demo: https://github.com/dunitian/DNTLive/tree/master/Software/WaterMarkAPP/LoTWaterAPP 說起這個人臉識别,還真有點緣分。記得逆天以前在學生時代參加創新大賽的時候,題目就是人臉識别打卡 解決别人替人打卡的問題,想想看,要是用微軟的faceapi那還不是很容易實作的?

額,這次先看下效果,然後普及一些開發過程中的知識點,然後介紹一下微軟的FaceAPI
==》原來的功能依舊在,非人臉識别,請在消息框中選擇否
上面示範部分結束了,我們進入技術探讨環節(技術有什麼不到位的或者還有什麼更好方案的。還望同志們提點一下,小子勇于接受批評)
先說下,設定逾時時間,異常處理
有人可能會說: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:
下面進行場景還原,為什麼這樣封裝,很多人不寫方法,直接貼代碼,看的容易暈
然後是Model,我這邊沒高興封裝臉部關鍵點,需求決定一切(我隻要面部矩陣),如果是Face++就得自己算了
微軟傳回結果是這個:
下面就是核心代碼:(我這邊分了網頁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不是很擅長,湊合着用吧~~
作者:
毒逆天出處:
https://www.cnblogs.com/dotnetcrazy打賞:
18i4JpL6g54yAPAefdtgqwRrZ43YJwAV5z本文版權歸作者和部落格園共有。歡迎轉載,但必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接!