離線人臉識(shí)別 ArcFaceSharp -- ArcFace 2.0 SDK C#封裝庫(kù)分享

ArcFaceSharp

ArcFaceSharp 是 ArcSoft 虹軟 ArcFace 2.0 SDK 的一個(gè) C# 封裝庫(kù),為方便進(jìn)行 C# 開發(fā)而封裝。歡迎 Start & Fork。

使用

在 Nuget 搜索 ArcFaceSharp 安裝。

PM> Install-Package ArcFaceSharp -Version 1.0.2

或者下載dll導(dǎo)入。

導(dǎo)入 ArcFaceSharp 后,將自己申請(qǐng)到的 ArcFace2.0 SDK 的 dll 文件 (libarcsoft_face.dll 和 libarcsoft_face_engine.dll)放在程序的運(yùn)行目錄下。

接口調(diào)用的流程可參考官方文檔的流程圖(http://ai.arcsoft.com.cn/manual/arcface_windows_guideV2.html2.1.5調(diào)用流程)

?

主要 API

具體參數(shù)和含義可以自行查看方法的注釋

激活及初始化

創(chuàng)建 ArcFaceCore對(duì)象即可

ArcFaceCore arcFaceCore = ArcFaceCore(appId, sdkKey, detectMode, combinedMask,detectFaceOrientPriority, detectFaceMaxNum,detectFaceScaleVal);

將 Bitmap 轉(zhuǎn)換成 ImageData

ImageData imageData = ImageDataConverter.ConvertToImageData(bitmap);

以下方法都是 ArcFaceCore 中的方法

人臉檢測(cè)

MultiFaceModel multiFaceModel = arcFaceCore.FaceDetection(imageData);

人臉信息檢測(cè)(年齡/性別/人臉3D角度)最多支持4張人臉信息檢測(cè),超過(guò)部分返回未知

// 人臉信息檢測(cè) 先調(diào)用這個(gè)接口才能獲取以下三個(gè)信息arcFaceCore.FaceProcess(imageData,multiFaceModel);//獲取年齡信息ListageList = arcFaceCore.GetAge();// 獲取性別信息ListgenderList = arcFace.GetGender();// 獲取人臉角度信息Listface3DAngleList = arcFace.GetFace3DAngle();

人臉特征值提取

asfSingleFaceInfo 為人臉檢測(cè)接口返回的人臉信息中的其中一個(gè)人臉信息

AsfFaceFeature asfFaceFeature = arcFace.FaceFeatureExtract(imageData, ref asfSingleFaceInfo);

人臉對(duì)比

float result = arcFace.FaceCompare(asfFaceFeature1, asfFaceFeature2);

異常捕獲

以人臉特征提取為例,當(dāng)借口返回值不為 0(成功)時(shí),則會(huì)拋出 ResultCodeException 異常。

try

{

? AsfFaceFeature asfFaceFeature = arcFace.FaceFeatureExtract(imageData, ref asfSingleFaceInfo);

}

catch (ResultCodeException e)

{

? Console.WriteLine(e.ResultCode);

? throw;

}

代碼示例:

\ArcFaceSharpUnitTest\UnitTest1.cs

public void TestMethod1()? ? ? ? {? ? ? ? ? ? // SDK對(duì)應(yīng)的 APP_ID SDK_KEY? ? ? ? ? ? string APP_ID = @"7NK7KSpfgxdqb74r8nvy36kDwH3wVGstr2LHGHBxQ8LY";? ? ? ? ? ? string SDK_KEY =? @"3fD8vKYMNfPzKHMoqppjA9chGh2aGkWzUQNFiAj7Yq63";? ? ? ? ? ? // 加載圖片? ? ? ? ? ? Bitmap heying = new Bitmap(@"heying.jpg");? ? ? ? ? ? Bitmap face1 = new Bitmap(@"ldh0.jpg");? ? ? ? ? ? Bitmap face2 = new Bitmap(@"ldh1.jpg");? ? ? ? ? ? Bitmap face3 = new Bitmap(@"zxy0.jpg");? ? ? ? ? ? // 創(chuàng)建 ArcFaceCore 對(duì)象,向構(gòu)造函數(shù)傳入相關(guān)參數(shù)進(jìn)行 ArcFace 引擎的初始化? ? ? ? ? ? ArcFaceCore arcFace = new ArcFaceCore(APP_ID,SDK_KEY,ArcFaceDetectMode.IMAGE,? ? ? ? ? ? ? ? ArcFaceFunction.FACE_DETECT | ArcFaceFunction.FACE_RECOGNITION | ArcFaceFunction.AGE | ArcFaceFunction.FACE_3DANGLE | ArcFaceFunction.GENDER,DetectionOrientPriority.ASF_OP_0_ONLY,50,32);? ? ? ? ? ? // 將 Bitmap 轉(zhuǎn)換成 ImageData? ? ? ? ? ? ImageData heyingImgData = ImageDataConverter.ConvertToImageData(heying);? ? ? ? ? ? // 人臉檢測(cè)? ? ? ? ? ? // 也可直接傳入 Bitmap 來(lái)調(diào)用相關(guān)接口 會(huì)自動(dòng)轉(zhuǎn)換成 ImageData,但這里推薦用 ImageData? ? ? ? ? ? MultiFaceModel multiFaceB = arcFace.FaceDetection(heying);? ? ? ? ? ? // 傳入 ImageData ,推薦使用這個(gè)接口? ? ? ? ? ? MultiFaceModel multiFace = arcFace.FaceDetection(heyingImgData);? ? ? ? ? ? // 人臉信息檢測(cè)(年齡/性別/人臉3D角度)最多支持4張人臉信息檢測(cè),超過(guò)部分返回未知 這是官方文檔的說(shuō)明? ? ? ? ? ? arcFace.FaceProcess(heyingImgData, multiFace);? ? ? ? ? ? // 獲取年齡信息? ? ? ? ? ? ListageList = arcFace.GetAge();? ? ? ? ? ? // 獲取性別信息? ? ? ? ? ? ListgenderList = arcFace.GetGender();? ? ? ? ? ? // 獲取人臉角度信息? ? ? ? ? ? Listface3DAngleList = arcFace.GetFace3DAngle();? ? ? ? ? ? // 將第一張圖片的 Bitmap 轉(zhuǎn)換成 ImageData? ? ? ? ? ? ImageData faceData1 = ImageDataConverter.ConvertToImageData(face1);? ? ? ? ? ? // 檢測(cè)第一張圖片中的人臉? ? ? ? ? ? MultiFaceModel multiFace1 =? arcFace.FaceDetection(faceData1);? ? ? ? ? ? ? ? ? ? ? ? // 取第一張圖片中返回的第一個(gè)人臉信息? ? ? ? ? ? AsfSingleFaceInfo faceInfo1 = multiFace1.FaceInfoList.First();? ? ? ? ? ? // 提第一張圖片中返回的第一個(gè)人臉的特征? ? ? ? ? ? AsfFaceFeature faceFeature1 = arcFace.FaceFeatureExtract(faceData1, ref faceInfo1);? ? ? ? ? ? ImageData faceData2 = ImageDataConverter.ConvertToImageData(face2);? ? ? ? ? ? // 檢測(cè)第二張圖片中的人臉? ? ? ? ? ? MultiFaceModel multiFace2 = arcFace.FaceDetection(faceData2);? ? ? ? ? ? // 取第二張圖片中返回的第一個(gè)人臉信息? ? ? ? ? ? AsfSingleFaceInfo faceInfo2 = multiFace2.FaceInfoList.First();? ? ? ? ? ? // 提第二張圖片中返回的第一個(gè)人臉的特征? ? ? ? ? ? AsfFaceFeature faceFeature2 = arcFace.FaceFeatureExtract(faceData2, ref faceInfo2);? ? ? ? ? ? // face1 face2 人臉對(duì)比,將會(huì)返回一個(gè) 0-1 之間的浮點(diǎn)數(shù)值? ? ? ? ? ? float result = arcFace.FaceCompare(faceFeature1, faceFeature2);? ? ? ? ? ? ImageData faceData3 = ImageDataConverter.ConvertToImageData(face3);? ? ? ? ? ? // 檢測(cè)第三張圖片中的人臉? ? ? ? ? ? MultiFaceModel multiFace3 = arcFace.FaceDetection(faceData3);? ? ? ? ? ? // 取第三張圖片中返回的第一個(gè)人臉信息? ? ? ? ? ? AsfSingleFaceInfo faceInfo3 = multiFace3.FaceInfoList.First();? ? ? ? ? ? // 提第三張圖片中返回的第一個(gè)人臉的特征? ? ? ? ? ? AsfFaceFeature faceFeature3 = arcFace.FaceFeatureExtract(faceData3, ref faceInfo3);? ? ? ? ? ? // face1 face3 人臉對(duì)比,將會(huì)返回一個(gè) 0-1 之間的浮點(diǎn)數(shù)值? ? ? ? ? ? float result2 = arcFace.FaceCompare(faceFeature1, faceFeature3);? ? ? ? ? ? // 釋放銷毀引擎? ? ? ? ? ? arcFace.Dispose();? ? ? ? ? ? // ImageData使用完之后記得要 Dispose 否則會(huì)導(dǎo)致內(nèi)存溢出? ? ? ? ? ? faceData1.Dispose();? ? ? ? ? ? faceData2.Dispose();? ? ? ? ? ? // BItmap也要記得 Dispose? ? ? ? ? ? face1.Dispose();? ? ? ? ? ? face2.Dispose();? ? ? ? ? ? ? ? }

感謝

本項(xiàng)目參考了以下開發(fā)者的一些思路和代碼,在此表示感謝。

C#_Demo_攝像頭實(shí)時(shí)_4線程人臉識(shí)別_注冊(cè) - Demo 分享 - 虹軟人工智能引擎開發(fā)者論壇 - Powered by Discuz!https://ai.arcsoft.com.cn/bbs/forum.php?mod=viewthread&tid=673&extra=page%3D1

虹軟2.0版本人臉檢測(cè)C#類庫(kù)分享 - 第2頁(yè) - ArcFace - 虹軟人工智能引擎開發(fā)者論壇 - Powered by Discuz!https://ai.arcsoft.com.cn/bbs/forum.php?mod=viewthread&tid=1274&extra=page%3D1&page=2

C#人臉檢測(cè)與動(dòng)態(tài)人臉識(shí)別顯示坐標(biāo) 視頻人臉識(shí)別WINFORM - ArcFace - 虹軟人工智能引擎開發(fā)者論壇 - Powered by Discuz!https://ai.arcsoft.com.cn/bbs/forum.php?mod=viewthread&tid=648&extra=page%3D1

另外

歡迎打賞哈哈~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容