隨著人臉識別技術應用范圍不斷擴展,如何在Windows C#上基于免費SDK實現人臉識別應用開發,正成為開發者們關心的話題之一。 對于該需求,我推薦虹軟視覺開放平臺的ArcFace 3.0,免費、離線且可商用,包含人臉識別、活體檢測、年齡檢測、性別檢測等豐富功能,算法魯棒性強,接入門檻低,同時支持Windows、iOS、Android(包含Android10)、Linux,是廣大開發者落地AI應用的利器。 為幫助開發者快速上手,虹軟工程師團隊針對C#開發打磨了一期課程,以技術解析和專項答疑等形式幫助開發者解決難題。建議有興趣嘗試ArcFace3.0的C#開發者可以提前學習,在實際開發中可事半功倍。 本期課程要點如下,對完整課程視頻感興趣的開發者,可以通過百度搜索“虹軟技術公開課”觀看。 一、要點一【3分鐘跑通C# demo】 課程基于虹軟人臉識別SDK包中提供的示例代碼,以實操的形式介紹了如何快速接入使用。接入過程在課程視頻中有詳細介紹。建議觀看視頻后自行嘗試配置,即可對虹軟人臉識別技術有一個初步的了解。 Demo配置過程如下: 1. 下載Demo 2. 檢查本地系統環境是否符合要求: .NET Framework 4.5.1及以上 Microsoft Visual C++ 2013 運行庫 3. 在虹軟視覺開放平臺下載SDK,獲取APPID、SDKKEY 4. 配置運行Demo: a.在App.config文件中配置APPID、SDKKEY b.將SDK lib文件夾中dll文件拷貝到運行根目錄下 c.如本地.NET Framework的版本高于4.5.1,直接修改項目的目標框架 二、要點二【ArcFace重點接口及參數介紹】 1.引擎初始化接口:ASFInitEngine() 【說明】 引擎初始化接口用于初始化引擎,初始化中的參數設置用于定義引擎的屬性和算法功能組合,與算法能夠呈現出的效果息息相關。 初始化失敗時,根據錯誤碼查詢原因即可。參數設置是開發者最關心的核心問題,也是保障在實際應用場景中最大化發揮算法效果的關鍵。視頻中主要介紹以下幾個參數在實際場景下如何應用。 【重要參數說明】 detectMode(檢測模式): ASF_DETECT_MODE_VIDEO video模式:適用于攝像頭預覽,視頻文件識別 ASF_DETECT_MODE_IMAGE image模式:適用于靜態圖片識別。 detectFaceScaleVal(最小人臉尺寸):代表人臉尺寸相對于圖片長邊的占比,數值越大,能檢測更小的人臉,效值范圍[2,32],video模式推薦值為16,image模式推薦值32。 combinedMask(算法功能組合):建議根據具體業務合理選擇算法功能組合,如果功能選擇越多,占用的內存越大。 2.人臉特征提取接口:ASFFaceFeatureExtract() 【說明】當人臉檢測完成時,可以根據獲取的人臉信息通過此接口進行對應人臉的特征提取。 【重要參數說明】 faceInfo:特征提取需要單張準確的人臉位置和角度,否則可能會報81925。 featureFeature:算法返回的人臉特征值,包含特征byte數組及特征長度,特征數據庫存取操作應存取特征byte數組。 3.人臉屬性檢測:ASFProcess() 【說明】人臉檢測成功后,可以根據人臉信息通過此接口檢測人臉屬性,如年齡、性別等。 【重要參數說明】 combinedMask:只支持引擎初始化時指定需要檢測的功能,如引擎初始化時,mask指定為年齡和性別,則不能檢測3D角度等其他屬性。 支持的屬性:ASF_AGE(年齡)、ASF_GENDER(性別)、ASF_FACE3DANGLE(3D角度)、ASF_LIVENESS(RGB活體)。 Process() 檢測后可根據ASFGetXXX()接口獲取對應屬性檢測結果。 三、要點三【視頻流識別和活體檢測】 下圖為常見視頻流識別和活體檢測的邏輯流程圖: 【多線程策略】 主線程:包含人臉追蹤以及畫面預覽功能。 FR線程:用于人臉特征提取和特征搜索。 活體線程:用于人臉活體檢測。 【優化策略】 FaceID:根據FaceID標識一個人,從進入畫面到離開畫面,對這一人臉只做一次識別即可,大大降低系統資源占用。 嘗試次數:同一張人臉,特征提取失敗可以做有限次數的嘗試,提高交互效果。 四、要點四【常見問題答疑】 1. 多線程調用問題 a. 同一個引擎可以使用多線程調用不同算法。 b. 多線程調用同一個算法接口需要啟用不同的引擎。 2. VIDEO和IMAGE模式的區別 VIDEO模式: a. 對視頻流中的人臉進行追蹤,人臉框平滑過渡,不會出現跳框的現象。 b. 用于預覽數據的人臉追蹤,處理速度快,可避免出現卡頓問題。 c. 在視頻模式引入faceId幀,該值用于標記一張人臉,當一個人臉從進入畫面直 到離開畫面,faceId 值不變。可用于業務中優化程序性能。 IMAGE模式: a. 針對單張圖片進行人臉檢測精度更高。 b. 在注冊人臉庫時,我們建議使用精度更高的IMAGE模式。 3. 非托管內存的操作 C#調用C++ SDK接口,有些傳參需要以Intptr的形式。 a. 復制前應先為Intptr申請內存; b. 當IntPtr不使用時,需要及時手動釋放。 4. 人臉特征數據庫的存儲 人臉特征提取接口返回的featureFeature對應ASF_FaceFeature,數據庫存儲應將ASF_FaceFeature .feature轉化為byte[]再進行數據庫存儲,featureSize表示byte[]的長度。 5. SDK dll文件的引用方法(使用DllImport方法) a. 使用相對路徑,將dll直接放到執行目錄下(web程序不建議使用); b. 使用絕對路徑; c. 將dll文件放到系統盤Windows下的System32文件夾下; d. 為dll文件所在文件夾添加環境變量。 |