C#開發(fā)實錄:基于免費SDK實現(xiàn)人臉識別應(yīng)用開發(fā)

隨著人臉識別技術(shù)應(yīng)用范圍不斷擴(kuò)展,如何在Windows C#上基于免費SDK實現(xiàn)人臉識別應(yīng)用開發(fā),正成為開發(fā)者們關(guān)心的話題之一。

對于該需求,我推薦虹軟視覺開放平臺的ArcFace 3.0,免費、離線且可商用,包含人臉識別、活體檢測、年齡檢測、性別檢測等豐富功能,算法魯棒性強,接入門檻低,同時支持Windows、iOS、Android(包含Android10)、Linux,是廣大開發(fā)者落地AI應(yīng)用的利器。

為幫助開發(fā)者快速上手,虹軟工程師團(tuán)隊針對C#開發(fā)打磨了一期課程,以技術(shù)解析和專項答疑等形式幫助開發(fā)者解決難題。建議有興趣嘗試ArcFace3.0的C#開發(fā)者可以提前學(xué)習(xí),在實際開發(fā)中可事半功倍。

本期課程要點如下,對完整課程視頻感興趣的開發(fā)者,可以通過百度搜索"虹軟技術(shù)公開課"觀看。

一、要點一【3分鐘跑通C# demo】

課程基于虹軟人臉識別SDK包中提供的示例代碼,以實操的形式介紹了如何快速接入使用。接入過程在課程視頻中有詳細(xì)介紹。建議觀看視頻后自行嘗試配置,即可對虹軟人臉識別技術(shù)有一個初步的了解。

Demo配置過程如下:

1. 下載Demo

2. 檢查本地系統(tǒng)環(huán)境是否符合要求:

a. .NET Framework 4.5.1及以上

b. 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,直接修改項目的目標(biāo)框架

二、要點二【ArcFace重點接口及參數(shù)介紹】

1.引擎初始化接口:ASFInitEngine()

【說明】

引擎初始化接口用于初始化引擎,初始化中的參數(shù)設(shè)置用于定義引擎的屬性和算法功能組合,與算法能夠呈現(xiàn)出的效果息息相關(guān)。

初始化失敗時,根據(jù)錯誤碼查詢原因即可。參數(shù)設(shè)置是開發(fā)者最關(guān)心的核心問題,也是保障在實際應(yīng)用場景中最大化發(fā)揮算法效果的關(guān)鍵。視頻中主要介紹以下幾個參數(shù)在實際場景下如何應(yīng)用。

【重要參數(shù)說明】

· detectMode(檢測模式):

ASF_DETECT_M(jìn)ODE_VIDEO video模式:適用于攝像頭預(yù)覽,視頻文件識別

ASF_DETECT_M(jìn)ODE_IMAGE image模式:適用于靜態(tài)圖片識別。

· detectFaceScaleVal(最小人臉尺寸):代表人臉尺寸相對于圖片長邊的占比,數(shù)值越大,能檢測更小的人臉,效值范圍[2,32],video模式推薦值為16,image模式推薦值32。

· combinedMask(算法功能組合):建議根據(jù)具體業(yè)務(wù)合理選擇算法功能組合,如果功能選擇越多,占用的內(nèi)存越大。

2.人臉特征提取接口:ASFFaceFeatureExtract()

【說明】當(dāng)人臉檢測完成時,可以根據(jù)獲取的人臉信息通過此接口進(jìn)行對應(yīng)人臉的特征提取。

【重要參數(shù)說明】

· faceInfo:特征提取需要單張準(zhǔn)確的人臉位置和角度,否則可能會報81925。

· featureFeature:算法返回的人臉特征值,包含特征byte數(shù)組及特征長度,特征數(shù)據(jù)庫存取操作應(yīng)存取特征byte數(shù)組。

3.人臉屬性檢測:ASFProcess()

【說明】人臉檢測成功后,可以根據(jù)人臉信息通過此接口檢測人臉屬性,如年齡、性別等。

【重要參數(shù)說明】

· combinedMask:只支持引擎初始化時指定需要檢測的功能,如引擎初始化時,mask指定為年齡和性別,則不能檢測3D角度等其他屬性。

· 支持的屬性:ASF_AGE(年齡)、ASF_GENDER(性別)、ASF_FACE3DANGLE(3D角度)、ASF_LIVENESS(RGB活體)。

· Process() 檢測后可根據(jù)ASFGetXXX()接口獲取對應(yīng)屬性檢測結(jié)果。

三、要點三【視頻流識別和活體檢測】

下圖為常見視頻流識別和活體檢測的邏輯流程圖:

【多線程策略】

· 主線程:包含人臉追蹤以及畫面預(yù)覽功能。

· FR線程:用于人臉特征提取和特征搜索。

· 活體線程:用于人臉活體檢測。

【優(yōu)化策略】

· FaceID:根據(jù)FaceID標(biāo)識一個人,從進(jìn)入畫面到離開畫面,對這一人臉只做一次識別即可,大大降低系統(tǒng)資源占用。

· 嘗試次數(shù):同一張人臉,特征提取失敗可以做有限次數(shù)的嘗試,提高交互效果。

四、要點四【常見問題答疑】

1. 多線程調(diào)用問題

a. 同一個引擎可以使用多線程調(diào)用不同算法。

b. 多線程調(diào)用同一個算法接口需要啟用不同的引擎。

2. VIDEO和IMAGE模式的區(qū)別

VIDEO模式:

a. 對視頻流中的人臉進(jìn)行追蹤,人臉框平滑過渡,不會出現(xiàn)跳框的現(xiàn)象。

b. 用于預(yù)覽數(shù)據(jù)的人臉追蹤,處理速度快,可避免出現(xiàn)卡頓問題。

c. 在視頻模式引入faceId幀,該值用于標(biāo)記一張人臉,當(dāng)一個人臉從進(jìn)入畫面直 到離開畫面,faceId 值不變。可用于業(yè)務(wù)中優(yōu)化程序性能。

IMAGE模式:

a. 針對單張圖片進(jìn)行人臉檢測精度更高。

b. 在注冊人臉庫時,我們建議使用精度更高的IMAGE模式。

3. 非托管內(nèi)存的操作

C#調(diào)用C++ SDK接口,有些傳參需要以Intptr的形式。

a. 復(fù)制前應(yīng)先為Intptr申請內(nèi)存;

b. 當(dāng)IntPtr不使用時,需要及時手動釋放。

4. 人臉特征數(shù)據(jù)庫的存儲

人臉特征提取接口返回的featureFeature對應(yīng)ASF_FaceFeature,數(shù)據(jù)庫存儲應(yīng)將ASF_FaceFeature .feature轉(zhuǎn)化為byte[]再進(jìn)行數(shù)據(jù)庫存儲,featureSize表示byte[]的長度。

5. SDK dll文件的引用方法(使用DllImport方法)

a. 使用相對路徑,將dll直接放到執(zhí)行目錄下(web程序不建議使用);

b. 使用絕對路徑;

c. 將dll文件放到系統(tǒng)盤Windows下的System32文件夾下;

d. 為dll文件所在文件夾添加環(huán)境變量。

(免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請進(jìn)一步核實,并對任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對有關(guān)資料所引致的錯誤、不確或遺漏,概不負(fù)任何法律責(zé)任。
任何單位或個人認(rèn)為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實內(nèi)容時,應(yīng)及時向本網(wǎng)站提出書面權(quán)利通知或不實情況說明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關(guān)文章源頭核實,溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。 )

贊助商
2020-06-17
C#開發(fā)實錄:基于免費SDK實現(xiàn)人臉識別應(yīng)用開發(fā)
隨著人臉識別技術(shù)應(yīng)用范圍不斷擴(kuò)展,如何在Windows C#上基于免費SDK實現(xiàn)人臉識別應(yīng)用開發(fā),正成為開發(fā)者們關(guān)心的話題之一。

長按掃碼 閱讀全文