離線人臉識別 ArcFaceSharp -- ArcFace 2.0 SDK C#封裝庫分享


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/manual/arcface_windows_guideV2.html 2.1.5調用流程)

  • lct

主要 API

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

  • 激活及初始化

創建 ArcFaceCore對象即可

ArcFaceCore arcFaceCore = ArcFaceCore(appId, sdkKey, detectMode, combinedMask,detectFaceOrientPriority, detectFaceMaxNum,detectFaceScaleVal);
  • 將 Bitmap 轉換成 ImageData
ImageData 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;
}

代碼示例:

\ArcFaceSharpUnitTest\UnitTest1.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/forum.php?mod=viewthread&tid=673&extra=page%3D1

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

C#人臉檢測與動態人臉識別顯示坐標 視頻人臉識別WINFORM - ArcFace - 虹軟人工智能引擎開發者論壇 - Powered by Discuz! https://ai.arcsoft.com.cn/bbs/forum.php?mod=viewthread&tid=648&extra=page%3D1

另外

歡迎打賞哈哈~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM