C#離線人臉識別 ArcFaceSharp封裝庫分享
ArcFaceSharp
ArcFaceSharp 是 ArcSoft 虹軟 ArcFace 2.0 SDK 的一個 C# 封裝庫,為方便進行 C# 開發而封裝。歡迎 Start & Fork。
使用
在 Nuget 搜尋 ArcFaceSharp 安裝。PM> Install-Package ArcFaceSharp -Version 1.0.2或者下載dll匯入。
匯入 ArcFaceSharp 後,將自己申請到的 ArcFace2.0 SDK 的 dll 檔案 (libarcsoft_face.dll 和 libarcsoft_face_engine.dll)放在程式的執行目錄下。
介面呼叫的流程可參考官方文件的流程圖( http://ai.arcsoft.com.cn/manu... 2.1.5呼叫流程)
主要 API
具體引數和含義可以自行檢視方法的註釋
啟用及初始化
建立 ArcFaceCore物件即可
ArcFaceCore arcFaceCore = ArcFaceCore(appId, sdkKey, detectMode, combinedMask,detectFaceOrientPriority, detectFaceMaxNum,detectFaceScaleVal);將 Bitmap 轉換成 ImageDataImageData imageData = ImageDataConverter.ConvertToImageData(bitmap);
以下方法都是 ArcFaceCore 中的方法
人臉檢測
MultiFaceModel multiFaceModel = arcFaceCore.FaceDetection(imageData);
人臉資訊檢測(年齡/性別/人臉3D角度)最多支援4張人臉資訊檢測,超過部分返回未知
// 人臉資訊檢測 先呼叫這個接口才能獲取以下三個資訊
arcFaceCore.FaceProcess(imageData,multiFaceModel);
//獲取年齡資訊
List<int> ageList = arcFaceCore.GetAge();
// 獲取性別資訊
List<int> genderList = arcFace.GetGender();
// 獲取人臉角度資訊
List<Face3DAngleModel> face3DAngleList = arcFace.GetFace3DAngle();人臉特徵值提取asfSingleFaceInfo 為人臉檢測介面返回的人臉資訊中的其中一個人臉資訊AsfFaceFeature asfFaceFeature = arcFace.FaceFeatureExtract(imageData, ref asfSingleFaceInfo);人臉對比 float result = arcFace.FaceCompare(asfFaceFeature1, asfFaceFeature2);異常捕獲以人臉特徵提取為例,當藉口返回值不為 0(成功)時,則會丟擲 ResultCodeException 異常。try
{
AsfFaceFeature asfFaceFeature = arcFace.FaceFeatureExtract(imageData, ref asfSingleFaceInfo);
}
catch (ResultCodeException e)
{
Console.WriteLine(e.ResultCode);
throw;
}程式碼示例:ArcFaceSharpUnitTestUnitTest1.cs public void TestMethod1()
{ // SDK對應的 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"); // 建立 ArcFaceCore 物件,向建構函式傳入相關引數進行 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 轉換成 ImageData ImageData heyingImgData = ImageDataConverter.ConvertToImageData(heying); // 人臉檢測 // 也可直接傳入 Bitmap 來呼叫相關介面 會自動轉換成 ImageData,但這裡推薦用 ImageData MultiFaceModel multiFaceB = arcFace.FaceDetection(heying); // 傳入 ImageData ,推薦使用這個介面 MultiFaceModel multiFace = arcFace.FaceDetection(heyingImgData); // 人臉資訊檢測(年齡/性別/人臉3D角度)最多支援4張人臉資訊檢測,超過部分返回未知 這是官方文件的說明 arcFace.FaceProcess(heyingImgData, multiFace); // 獲取年齡資訊 List<int> ageList = arcFace.GetAge(); // 獲取性別資訊 List<int> genderList = arcFace.GetGender(); // 獲取人臉角度資訊 List<Face3DAngleModel> face3DAngleList = arcFace.GetFace3DAngle(); // 將第一張圖片的 Bitmap 轉換成 ImageData ImageData faceData1 = ImageDataConverter.ConvertToImageData(face1); // 檢測第一張圖片中的人臉 MultiFaceModel multiFace1 =arcFace.FaceDetection(faceData1); // 取第一張圖片中返回的第一個人臉資訊 AsfSingleFaceInfo faceInfo1 = multiFace1.FaceInfoList.First(); // 提第一張圖片中返回的第一個人臉的特徵 AsfFaceFeature faceFeature1 = arcFace.FaceFeatureExtract(faceData1, ref faceInfo1); ImageData faceData2 = ImageDataConverter.ConvertToImageData(face2); // 檢測第二張圖片中的人臉 MultiFaceModel multiFace2 = arcFace.FaceDetection(faceData2); // 取第二張圖片中返回的第一個人臉資訊 AsfSingleFaceInfo faceInfo2 = multiFace2.FaceInfoList.First(); // 提第二張圖片中返回的第一個人臉的特徵 AsfFaceFeature faceFeature2 = arcFace.FaceFeatureExtract(faceData2, ref faceInfo2); // face1 face2 人臉對比,將會返回一個 0-1 之間的浮點數值 float result = arcFace.FaceCompare(faceFeature1, faceFeature2); ImageData faceData3 = ImageDataConverter.ConvertToImageData(face3); // 檢測第三張圖片中的人臉 MultiFaceModel multiFace3 = arcFace.FaceDetection(faceData3); // 取第三張圖片中返回的第一個人臉資訊 AsfSingleFaceInfo faceInfo3 = multiFace3.FaceInfoList.First(); // 提第三張圖片中返回的第一個人臉的特徵 AsfFaceFeature faceFeature3 = arcFace.FaceFeatureExtract(faceData3, ref faceInfo3); // face1 face3 人臉對比,將會返回一個 0-1 之間的浮點數值 float result2 = arcFace.FaceCompare(faceFeature1, faceFeature3); // 釋放銷燬引擎 arcFace.Dispose(); // ImageData使用完之後記得要 Dispose 否則會導致記憶體溢位 faceData1.Dispose(); faceData2.Dispose(); // BItmap也要記得 Dispose face1.Dispose(); face2.Dispose(); }
感謝
本專案參考了以下開發者的一些思路和程式碼,在此表示感謝。
C#_Demo_攝像頭實時_4執行緒人臉識別_註冊 - Demo 分享 - 虹軟人工智慧引擎開發者論壇 - Powered by Discuz! https://ai.arcsoft.com.cn/bbs...
虹軟2.0版本人臉檢測C#類庫分享 - 第2頁 - ArcFace - 虹軟人工智慧引擎開發者論壇 - Powered by Discuz! https://ai.arcsoft.com.cn/bbs...
C#人臉檢測與動態人臉識別顯示座標 視訊人臉識別WINFORM - ArcFace - 虹軟人工智慧引擎開發者論壇 - Powered by Discuz! https://ai.arcsoft.com.cn/bbs...
另外歡迎打賞哈哈~