上一個東家是從事安防行業的,致力於人工智能領域,有自主人臉識別、步態識別的算法。C++同事比較稱職有什么問題都可以第一時間反饋,並得到合理的處理,封裝的DLL 是基於更高性能的GPU算法,可支持更多線路的運算,接口調用簡單,只需要傳入圖片即可得到特征值。對於公司的項目,更多的是與各類接口進行交互。包括建立任務、上傳視頻、截取片段,抽取特征,學習特征,步態比對等對接接口的復雜業務邏輯。由於長期和C++接口對接,包括Kafka消息隊列傳輸等,對於公司項目支撐的業務流程比較了解。至於底層算法,只是一知半解,知道些許流程。如今第一次調用虹軟2.2人臉識別,遇到了各種各樣的坑,這里做一個記錄,整理一下,也為了其他人遇到類似的問題可以供作參考,以避坑節省時間。(開發環境 win7,server2008,server2012,VS2017 未下載各種相關關圖片的程序包,百度一大堆需要安裝軟件包的,到最后只是徒勞)
現在負責升級公司的人臉識別系統,畢竟之前也有點相關經驗,所以一開始不覺得是個難點。公司使用虹軟人臉識別,目前這家公司只有CPU版本的,還沒出GPU。一上來便是官網下載當前最新 2.2版本的SDK、winform版本的Demo,按照文檔要求拷貝SDK的dll到bin(x64)下目錄,然后填寫Key 和 appId ,運行Demo,放幾張圖片一對比,分數挺高,效果挺好。
正常使用肯定時作為類庫調用,在項目中新建一類庫,將Demo中需要用到的類文件拷貝,再將初始化引擎和提取特征,比對特征的方法提出來單獨建立cs類方便調用,然后拷貝對應版本的SDK,一運行就是報錯,初始化失敗,錯誤值90113(官方文檔表示 dll文件無訪問權限,或當前目錄可用空間不足),按照網上解決方案,選中sdk下的三個dll文件,右鍵屬性,添加讀寫權限(仍然90113),然后所在文件夾添加讀寫權限(仍然90113),最后項目根目錄添加仍然沒有改變,這里還是贊揚一下虹軟的反饋時效,工作期間提交工單基本半個小時內就有反饋。 其次百度,發現鋪天蓋地的說的都是缺少dll文件,卻沒有一個整體情況的說明,而且也沒告知運行的版本,環境,很難對症下葯,各種操作一番很耽誤功夫,也沒效果,着實讓人抓狂。
初始化引擎失敗 (90113)
① VS管理員身份運行
② 程序池-發布項目-高級設置-標識-LoacalSystem
③電腦缺少2013C++運行庫,部署不同服務器的時候,保不齊有個服務器缺少環境(2.2,3.0 對應的是2013版本的C++庫,2015庫無效)
當然初始化引擎成功只是第一步,實際運用中,比如 傳圖片獲取特征值時,基於虹軟目前最新發布的2.2 的版本中,在處理圖片提取特征前,加入了活體檢測的功能,引用了 Emgu.CV.World.dll 這個dll(如果程序用不上活體,可以屏蔽,使用舊版本的圖像處理方法ImageUtil.ReadBMP),於是各種問題接踵而至
無法加載 DLL“libarcsoft_fsdk_face_detection.dll”: 找不到指定的模塊 ,這個錯誤很常見,可能的原因也有很多,就目前整理的情況如下
①該dll 缺失,檢查bin目錄是否存在此文件
②該dll 依賴的其他dll缺失
Emgu.CV.CvInvoke的類型初始值設定項引發異常(無法加載 DLL“cvextern”: 找不到指定的模塊),這個錯誤很坑爹,處理起來比較花費時間
①缺少cvextern.dll,將demo中debug下的x64/x86文件夾拷貝到項目的bin目錄下(連同文件夾)
②電腦缺少Opencv依賴的環境(一般是部署在Windows Server的服務器),服務器里面添加功能時,勾選墨跡和手寫服務、桌面安裝兩項即可。
③項目根目錄是否缺少x64/x86文件夾及其下對應dll
④運行環境缺少指定的補丁包 ,嘗試下載並安裝 Windows8.1-KB2999226-x64 (Windows Server 2012服務器)程序包完成更新后,重啟計算機
⑤若程序不需要IR活體檢測,可以參照2.0的版本來讀取圖片消息(ReadBMP)
視圖加載格式不正確的程序 這個錯誤有坑(虹軟3.0增值版 32位)
①IIS 程序池-啟用32位應用程序--選擇 true
②檢查當前電腦是否有 2013C++運行庫 ,重點來了,32位sdk時,下載的c++ 運行庫也要對應的32位版本
目前針對C# 64位調用虹軟2.2 人臉識別中遇到的問題就這些, C# 32位調用虹軟3.0 人臉識別(增加口罩功能),再處理完以上問題之后,暫時未發現新的環境問題。看起來其實沒多少,只是這些解決方案的背后都是無數次的百度,和花費大量時間成本驗證后得到的方案,為此作為記錄。