先看看效果圖,我把demo改爲自動運行了,暫時借用別人的圖片: 最左側的大圖爲選擇上傳的,html
中間的小圖是大圖的臉,redis
右側的大圖是人臉文件夾中已經存在的,而且類似度較高的一張臉,也就是比對的結果。算法
先記錄下思路,代碼整理好再貼出來。服務器
阿里雲和騰訊都有人臉識別的接口,可是圖片須要上傳到他們的服務器,app
而且,接口返回的不是我想要的東西,通過千辛萬苦,終於找到了虹軟,工具
http://www.arcsoft.com.cn/ai/arcface.html網站
開源就必須贊一個,而且支持本身搭建服務器,正是我須要的。阿里雲
翻閱了太多的資料,把C++的基礎都看了一點,demo總是各類錯誤,我都想改虹軟的算法了.net
怎麼可能的,他們的算法根本看不懂。orm
讓demo正常跑起來的步驟:
一、去官網註冊帳號;
二、選擇1:N的sdk包下載,建議選擇x86的;
三、在vs裏打開demo項目,把你下載的sdk保重的dll文件替換過去,用本身的key替換demo裏的;
四、指定本地一個文件夾,demo須要保存人臉的圖片和二進制數據的,設置user可寫權限;
五、到這一步基本就能運行了,有問題再百度;
原本的想法是app上傳圖片到服務器,經過軟件進行實時比對的,比對後,結果很差返回app了,換思路,
因而在demo 的基礎上,改爲了B/S直接比對,返回結果,一切順利。
上傳圖片時出問題了,初始化引擎時引用的dll老是沒法正確加載,
處處都貼3個解決方法,
DllImport會按照順序自動去尋找的地方: 一、exe所在目錄 二、System32目錄 三、環境變量目錄
反覆嘗試,無效!後來沒辦法,3種方法都設置,順便在bin下也放了,再生成項目,能夠了。
而後再把2和3的設置拿掉,一直能用,應該是隻須要放在bin下就好了;
有的還說引用dll使用絕對路徑,反正我也試了,不行!
最後還有個問題就是網站的程序池,務必開啓32位應用程序。
以上是針對32位SDK的,若是你是64位SDK,請繼續:
後來換成64位sdk,本地還好弄,把類庫對應的改成64位便可,
服務器又是崩潰,最難的錯誤是:
System.BadImageFormatException: 試圖加載格式不正確的程序。 (Exception from HRESULT: 0x8007000B) at ArcFaceTest.AFD.AFDFunction.AFD_FSDK_InitialFaceEngine(String appId, String sdkKey, IntPtr pMem, Int32 lMemSize, IntPtr& pEngine, Int32 iOrientPriority, Int32 nScale, Int32 nMaxFaceNum)
後來試試安裝了vcredist2013x64,點擊這裏下載,重啓IIS,終於能夠了。真心不容易。
怎麼知道缺乏文件的呢?
也是藉助工具檢測dll時發現的,工具下載地址
借鑑這位仁兄的帖子,才下載了上述環境文件的。
寫在最後:
應該感謝這位大牛,把C++的轉爲C#的,我只是把C/S的轉爲B/S了,這個過程比較簡單。