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

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

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

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

一張圖歸納:api

額,此次先看下效果,而後普及一些開發過程當中的知識點,而後介紹一下微軟的FaceAPI異步

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

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

先生成縮略圖:(後期能夠添加縮略比例的調節)3d

異步的方式開始幹活了htm

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

看看人臉,免費版的精度這個地步已經很好了(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不是很擅長,湊合着用吧~~

相關文章
相關標籤/搜索