• 虹软人脸识别—版本升级接口修改说明(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)
    * [ArcFace 2.2 Demo](https://github.com/SkyStonePan/ArcfaceDemo_CSharp_2.2)
    * [ArcFace 3.0 Demo](https://github.com/SkyStonePan/ArcfaceDemo_CSharp_3.0)
    * [ArcFace 3.1 Demo](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**版本中,更改*ArcSoftFaceSDKModelsDetectionMode.cs*,改为如下:

    C#    /// <summary>    /// 检测模式    /// </summary>    public enum DetectionMode : uint    {        /// <summary>        /// Video模式,一般用于多帧连续检测        /// </summary>        ASF\_DETECT\_MODE_VIDEO = 0x00000000,            /// <summary>        /// Image模式,一般用于静态图的单次检测        /// </summary>        ASF\_DETECT\_MODE_IMAGE = 0xFFFFFFFF    }

    同时将ArcSoftFaceFaceForm.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**,为保证接口调用正常,必须更改*ArcSoftFaceSDKUtilASFFunctions.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**:用于证件照或证件照和生活照之间的特征比对。

    为保证接口匹配,先在*ArcSoftFaceSDKModels*中增加新建枚举,名为**ASF_CompareModel.cs**,代码如下:

    C#    /// <summary>    /// 人脸比对可选的模型    /// </summary>    public enum ASF_CompareModel    {        /// <summary>        /// 用于生活照之间的特征比对,推荐阈值0.80        /// </summary>        ASF\_LIFE\_PHOTO = 0x1,            /// <summary>        /// 用于证件照或生活照与证件照之间的特征比对,推荐阈值0.82        /// </summary>        ASF\_ID\_PHOTO = 0x2    }

    接着更改ArcSoftFaceSDKUtilASFFunctions.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)代码。

    二、ArcFace 3.0 Demo 使用 ArcFace 3.1 SDK

    1. SDK中的**ASFFaceFeatureExtract**接口新增参数**MInt32 threadNum = 1**,为保证接口调用正常,必须更改ArcFaceSDKDemoArcFaceSDKUtils 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**,必须更改 *ArcFaceSDKDemoArcFaceSDKUtils ASFFunctions.cs*中的**Line:240**,代码如下:

    C#    public static extern int ASFFaceFeatureExtractEx(IntPtr hEngine,                                                      IntPtr imgData,                                                      IntPtr faceInfo,                                                      IntPtr feature,                                                      int threadNum = 1);

    3. 需删除 _ArcFaceSDKDemoArcFaceSDKUtils ASFFunctions.cs_中老的激活接口**ASFActivation**

    4. 此外还有新增功能接口,具体新增内容详见ArcFaceSDK说明文档,接口调用详见[ArcFaceDemoV3.1](https://github.com/SkyStonePan/ArcfaceDemo_CSharp_3.1)代码。

    三、基础版本SDK替换为对应的增值版本(以3.0Demo为例)

    1. 在*ArcFaceSDKDemoArcFaceSDKUtilsASFFunctions.cs*中的在线激活接口ASFOnlineActivation增加**activeKey**参数,代码如下:

    C#    public static extern int ASFOnlineActivation(string appId, string sdkKey,string activeKey);
       
    2. 在*ArcFaceSDKDemoArcFaceSDKUtilsASFFunctions.cs*中的在线激活接口ASFActivation接口增加**activeKey**参数,代码如下:

    C#    public static extern int ASFActivation(string appId, string sdkKey,string activeKey);

    3. 在*ArcFaceSDKDemoArcFaceSDKUtilsASFFunctions.cs*中添加离线激活接口ASFOfflineActivation,代码如下:

    C#    [DllImport(Dll_PATH, CallingConvention = CallingConvention.Cdecl)]    public static extern int ASFOfflineActivation(IntPtr filePath);

    以上,仅对已有接口的修改进行了说明,新增接口的对接,可以参考对应版本的Demo。

    相关产品大家可以到虹软视觉开放平台进一步了解

  • 相关阅读:
    ELF BIN HEX[zz]
    电路、信号和PCB设计
    ADHelper中AD属性赋值的修正
    发布一个图片库轮显WebPart
    MOSS的ItemUpdated执行了10次,您碰到了吗?
    InfoPath 保存时自动生成文件名
    最新版WSS3.0 SDK
    自定义MOSS网站的masterpage
    自定义InfoPath数据验证有效性
    (暂时)解决InfoPath一直显示“installing”问题 续
  • 原文地址:https://www.cnblogs.com/ccLqqy/p/13426040.html
Copyright © 2020-2023  润新知