1. 程式人生 > >虹軟人臉識別—版本升級介面修改說明(C#)

虹軟人臉識別—版本升級介面修改說明(C#)

自虹軟釋出了免費、離線版本人臉識別SDK,在Github上陸續分享了各個版本對應的 C# Demo。因為公司專案一直在使用虹軟的SDK,因此每當虹軟官網有新版本釋出,我都會進行了解,並結合Demo進行功能驗證。在虹軟官方群裡及論壇上,看到有朋友反饋**升級SDK**後出現如下問題: 1\. **替換SDK檔案有時介面會返回2** 2\. **記憶體溢位、程式crash** 3\. **檢測結果混亂** 我在版本升級的過程中也遇到了這類問題,下面記錄了版本升級過程中需要做的修改,希望能對一些朋友有所幫助。 **問題原因**:從ArcFace 2.0到3.1版本,虹軟SDK不斷優化演算法功能,在優化的過程中,對SDK的部分介面也進行了優化,添加了一些可變引數,\*\*C#程式碼在升級SDK時未進行同步修改\*\*。 **處理方法**: \* 如果僅用於體驗效果,保持SDK的版本與Demo的版本一致即可 \* 如果之前使用舊版本開發且有新版本升級需求的,需要對介面的傳參列表進行修改 \*\*Github的Demo\*\*: \* \[ArcFace 2.1 Demo\]([https://github.com/SkyStonePan/ArcfaceDemo_CSharp](https://github.com/SkyStonePan/ArcfaceDemo_CSharp)) \* \[ArcFace 2.2 Demo\]([https://github.com/SkyStonePan/ArcfaceDemo\_CSharp\_2.2](https://github.com/SkyStonePan/ArcfaceDemo_CSharp_2.2)) \* \[ArcFace 3.0 Demo\]([https://github.com/SkyStonePan/ArcfaceDemo\_CSharp\_3.0](https://github.com/SkyStonePan/ArcfaceDemo_CSharp_3.0)) \* \[ArcFace 3.1 Demo\]([https://github.com/SkyStonePan/ArcfaceDemo\_CSharp\_3.1](https://github.com/SkyStonePan/ArcfaceDemo_CSharp_3.1)) 其中,SDK 2.1版本到2.2版本,新增了IR活體檢測介面,只需參考Demo即可,此處不作贅述。然後我們依次說下,2.2版本的Demo如何更改使用3.0版本的SDK、3.0版本的Demo如何更改使用3.1版本的SDK,以及免費版本SDK如何替換對應增值版本的SDK。 ## 一、ArcFace 2.2 Demo 使用ArcFace 3.0 SDK 1\. SDK中檢測模式引數由結構體變更為列舉型別,為保證一致性,建議在原\*\*Demo2.2\*\*版本中,更改\*ArcSoftFace\\SDKModels\\DetectionMode.cs\*,改為如下: `C#    ///    /// 檢測模式    ///    public enum DetectionMode : uint    {        ///        /// Video模式,一般用於多幀連續檢測        ///        ASF\_DETECT\_MODE_VIDEO = 0x00000000,            ///        /// Image模式,一般用於靜態圖的單次檢測        ///
       ASF\_DETECT\_MODE_IMAGE = 0xFFFFFFFF    }` 同時將ArcSoftFace\\FaceForm.cs中的\*\*Line:166\*\*和\*\*Line:188\*\*分別改為: `C#    //Line166    uint detectMode = (uint)DetectionMode.ASF\_DETECT\_MODE_IMAGE;    //Line188    uint detectModeVideo = (uint)DetectionMode.ASF\_DETECT\_MODE_VIDEO;` 3\. SDK中的**人臉檢測介面ASFDetectFaces**介面新增可選引數\*\*ASF_DetectModel\*\*,為保證介面呼叫正常,**必須**更改\*ArcSoftFace\\SDKUtil\\ASFFunctions.cs\*中的\*\*Line:50\*\*,改為如下: `C#    public static extern int ASFDetectFaces(IntPtr pEngine, int width, int height, int format, IntPtr imgData, IntPtr detectedFaces, int ASF_DetectModel=0x1);`     4\. SDK中的**特徵比對介面ASFFaceFeatureCompare**介面新增\*\*ASF_CompareModel\*\*引數,可選引數值如下: \- \*\*ASF\_LIFE\_PHOTO\*\*:用於生活照之間的特徵比對,該項為預設項;    \- \*\*ASF\_ID\_PHOTO\*\*:用於證件照或證件照和生活照之間的特徵比對。 為保證介面匹配,先在\*ArcSoftFace\\SDKModels\*中增加新建列舉,名為\*\*ASF_CompareModel.cs\*\*,程式碼如下: `C#    ///    /// 人臉比對可選的模型    ///
   public enum ASF_CompareModel    {        ///        /// 用於生活照之間的特徵比對,推薦閾值0.80        ///        ASF\_LIFE\_PHOTO = 0x1,            ///        /// 用於證件照或生活照與證件照之間的特徵比對,推薦閾值0.82        ///
       ASF\_ID\_PHOTO = 0x2    }` 接著更改*\\ArcSoftFace\\SDKUtil\\ASFFunctions.cs*中\*\*Line:89\*\*,新增可選引數,程式碼如下: `C#    public static extern int ASFFaceFeatureCompare(IntPtr pEngine,                                            IntPtr faceFeature1,                                            IntPtr faceFeature2,                                            ref float similarity,                                            ASF\_CompareModel compareModel = ASF\_CompareModel.ASF\_LIFE\_PHOTO);` 5\. 此版本對人臉特徵模型進行了升級,SDK 2.* 版本儲存的人臉特徵**需要重新提取**。 6\. 此外還有新增功能介面,具體新增內容詳見,介面呼叫詳見**\[ArcFaceDemoV3.0\]([https://github.com/SkyStonePan/ArcfaceDemo\_CSharp\_3.0](https://github.com/SkyStonePan/ArcfaceDemo_CSharp_3.0))**程式碼。 ## 二、ArcFace 3.0 Demo 使用 ArcFace 3.1 SDK 1\. SDK中的\*\*ASFFaceFeatureExtract\*\*介面新增引數\*\*MInt32 threadNum = 1\*\*,為保證介面呼叫正常,**必須**更改*\\ArcFaceSDKDemo\\ArcFaceSDK\\Utils\ ASFFunctions.cs*中的\*\*Line:89\*\*,程式碼如下: `C#    public static extern int ASFFaceFeatureExtract(IntPtr pEngine,                                                    int width,                                                    int height,                                                    int format,                                                    IntPtr imgData,                                                    IntPtr faceInfo,                                                    IntPtr faceFeature,                                                   int threadNum = 1);` 2\. SDK中的\*\*ASFFaceFeatureExtractEx\*\*介面新增引數\*\*MInt32 threadNum = 1\*\*,**必須**更改 \*ArcFaceSDKDemo\\ArcFaceSDK\\Utils\ ASFFunctions.cs\*中的\*\*Line:240\*\*,程式碼如下: `C#    public static extern int ASFFaceFeatureExtractEx(IntPtr hEngine,                                                      IntPtr imgData,                                                      IntPtr faceInfo,                                                      IntPtr feature,                                                      int threadNum = 1);` 3\. 需**刪除** _\\ArcFaceSDKDemo\\ArcFaceSDK\\Utils\ ASFFunctions.cs_中老的啟用介面\*\*ASFActivation\*\* 4\. 此外還有新增功能介面,具體新增內容詳見ArcFaceSDK說明文件,介面呼叫詳見**\[ArcFaceDemoV3.1\]([https://github.com/SkyStonePan/ArcfaceDemo\_CSharp\_3.1](https://github.com/SkyStonePan/ArcfaceDemo_CSharp_3.1))**程式碼。 ## 三、基礎版本SDK替換為對應的增值版本(以3.0Demo為例) 1\. 在\*ArcFaceSDKDemo\\ArcFaceSDK\\Utils\\ASFFunctions.cs\*中的**線上啟用介面ASFOnlineActivation**增加\*\*activeKey\*\*引數,程式碼如下: `C#    public static extern int ASFOnlineActivation(string appId, string sdkKey,string activeKey);`     2\. 在\*ArcFaceSDKDemo\\ArcFaceSDK\\Utils\\ASFFunctions.cs\*中的**線上啟用介面ASFActivation**介面增加\*\*activeKey\*\*引數,程式碼如下: `C#    public static extern int ASFActivation(string appId, string sdkKey,string activeKey);` 3\. 在\*ArcFaceSDKDemo\\ArcFaceSDK\\Utils\\ASFFunctions.cs\*中新增**離線啟用介面ASFOfflineActivation**,程式碼如下: `C#    \[DllImport(Dll_PATH, CallingConvention = CallingConvention.Cdecl)\]    public static extern int ASFOfflineActivation(IntPtr filePath);` **以上,僅對已有介面的修改進行了說明,新增介面的對接,可以參考對應版本的Demo。** ### **相關產品大家可以到[虹軟視覺開放平臺](https://ai.arcsoft.com.cn/third/mobile.html?utm_source=cnblogs&utm_medium=referral)進一步