程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 水印第四版 ~ 非人水印(添加人臉識別),第四版人臉

水印第四版 ~ 非人水印(添加人臉識別),第四版人臉

編輯:關於.NET

水印第四版 ~ 非人水印(添加人臉識別),第四版人臉


demo:https://github.com/dunitian/DNTLive/tree/master/Software/WaterMarkAPP/LoTWaterAPP

說起這個人臉識別,還真有點緣分。記得逆天以前在學生時代參加創新大賽的時候,題目就是人臉識別打卡 解決別人替人打卡的問題,想想看,要是用微軟的faceapi那還不是很容易實現的?

好了,不扯淡了,上次概述了下水印情緣:http://www.cnblogs.com/dunitian/p/6232074.html

一張圖概括:

額,這次先看下效果,然後普及一些開發過程中的知識點,然後介紹一下微軟的FaceAPI

==》原來的功能依舊在,非人臉識別,請在消息框中選擇否

不要求人臉識別的就選否,每個月Api次數是有限的

先生成縮略圖:(後期可以添加縮略比例的調節)

異步的方式開始干活了

好了之後會通知你(很多人用異步的方式不會捕獲異常和完成後的通知,一會我稍微說一下)

看看人臉,免費版的精度這個地步已經很好了(19個臉就2張有點誤差),要是你把他用來人臉打卡,完全可以允許的嘛,沒識別出來再試一試就ok了

點開一張看看,其實還是挺明顯的(網上的face api基本上都是對正臉識別比較好,側臉就差很多,微軟的這個算不錯的了【之前微軟不是有兩款小游戲很火嘛,就是用的人臉識別】)

上面演示部分結束了,我們進入技術探討環節(技術有什麼不到位的或者還有什麼更好方案的。還望同志們提點一下,小子勇於接受批評)

先說下,設置超時時間,異常處理

完成後的通知其實也很簡單:

有人可能會說:Task.Factory.StartNew 和 Task.Run 一樣不?Run就是第一種方式,只不過自動添加了一些默認參數

再說下Magick,之前說了水印的用法:http://www.cnblogs.com/dunitian/p/5895133.html

這次基本上用法全了,縮略圖,裁剪,水印 

裁剪官方文檔沒有說,我是根據命令逆推的==》寫了個demo:https://github.com/dunitian/TempCode/tree/master/2016-12-26/MagickTest

生成縮略圖很簡單:

 水印官方寫的很詳細:

-------------------------------------------------------------------------------------------------

一下不管這個了,說說人臉識別,之前不知道官方有sdk,自己封裝了。一起看看吧,有利於理解官方sdk:

首先定義了一個人臉識別的專用異常類:(別問我為啥不直接用Exception,不知道百度下~)

下面進行場景還原,為什麼這樣封裝,很多人不寫方法,直接貼代碼,看的容易暈

然後是Model,我這邊沒高興封裝臉部關鍵點,需求決定一切(我只要面部矩陣),如果是Face++就得自己算了

微軟返回結果是這個:

那model自然就得這麼封裝了

注意處理一下每個字段的負數情況(後面計算是可能為負的)

下面就是核心代碼:(我這邊分了網頁URL和本地圖片路徑,SDK好像統一用流的方式)

為什麼我分兩種情況,看這兩張圖就能理解:

根據要求進行封裝:

看代碼: 

 下面就是響應了

太多,我就不貼了,看對應代碼:(微軟的提示是英文的,我得簡單封裝下)

 調用就不用說了吧:await FaceHelper.GetFaceModelList(path) or FaceHelper.GetFaceModelList(path).Result

微軟的api很簡單,eg:

 private static async Task<IEnumerable<Face>> UploadAndDetectFaces(string imageFilePath)
        {
            try
            {
                using (Stream imageFileStream = File.OpenRead(imageFilePath))
                {
                    var faceClient = new FaceServiceClient(FaceHelper.GetAPIKey());
                    return await faceClient.DetectAsync(imageFileStream);
                }
            }
            catch (FaceAPIException ex)
            {
                throw ex;
            }
        }

  

 先這樣吧,WPF不是很擅長,湊合著用吧~~

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved