自虹软发布了免费、离线版本人脸识别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**版本中,更改*ArcSoftFace\SDKModels\DetectionMode.cs*,改为如下:

C#    /// <summary>    /// 检测模式    /// </summary>    public enum DetectionMode : uint    {        /// <summary>        /// Video模式,一般用于多帧连续检测        /// </summary>        ASF\_DETECT\_MODE_VIDEO = 0x00000000,            /// <summary>        /// Image模式,一般用于静态图的单次检测        /// </summary>        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#    /// <summary>    /// 人脸比对可选的模型    /// </summary>    public enum ASF_CompareModel    {        /// <summary>        /// 用于生活照之间的特征比对,推荐阈值0.80        /// </summary>        ASF\_LIFE\_PHOTO = 0x1,            /// <summary>        /// 用于证件照或生活照与证件照之间的特征比对,推荐阈值0.82        /// </summary>        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)代码。

二、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)代码。

三、基础版本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。

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

虹软人脸识别—版本升级接口修改说明(C#)的更多相关文章

  1. 虹软人脸识别 - faceId及IR活体检测的更新介绍

    虹软人脸识别 - faceId及IR活体检测的介绍 前几天虹软推出了 Android ArcFace 2.2版本的SDK,相比于2.1版本,2.2版本中的变化如下: VIDEO模式新增faceId(类 ...

  2. 虹软人脸识别 - faceId及IR活体检测的介绍

    虹软人脸识别 - faceId及IR活体检测的介绍 前几天虹软推出了 Android ArcFace 2.2版本的SDK,相比于2.1版本,2.2版本中的变化如下: VIDEO模式新增faceId(类 ...

  3. asp.net 虹软 人脸识别 实现刷脸住宿、刷脸签到、刷脸进入等

    先看看效果图,我把demo改成自动运行了,暂时借用别人的图片: 最左侧的大图为选择上传的, 中间的小图是大图的脸, 右侧的大图是人脸文件夹中已经存在的,并且相似度较高的一张脸,也就是比对的结果. 先记 ...

  4. 记C# 调用虹软人脸识别 那些坑

    上一个东家是从事安防行业的,致力于人工智能领域,有自主人脸识别.步态识别的算法.C++同事比较称职有什么问题都可以第一时间反馈,并得到合理的处理,封装的DLL 是基于更高性能的GPU算法,可支持更多线 ...

  5. 虹软人脸识别SDK在网络摄像头中的实际应用

    目前在人脸识别领域中,网络摄像头的使用很普遍,但接入网络摄像头和人脸识别SDK有一定门槛,在此篇中介绍过虹软人脸识别SDK的接入流程,本文着重介绍网络摄像头获取视频流并处理的流程(红色框内),以下内容 ...

  6. 虹软人脸识别 - Android Camera实时人脸追踪画框适配

    在使用虹软人脸识别Android SDK的过程中 ,预览时一般都需要绘制人脸框,但是和PC平台相机应用不同,在Android平台相机进行应用开发还需要考虑前后置相机切换.设备横竖屏切换等情况,因此在人 ...

  7. 虹软人脸识别SDK接入Milvus实现海量人脸快速检索

    一.背景 人脸识别是近年来最热门的计算机视觉领域的应用之一,而且现在已经出现了非常多的人脸识别算法,如:DeepID.FaceNet.DeepFace等等.人脸识别被广泛应用于景区.客运.酒店.办公室 ...

  8. 基于虹软人脸识别,实现RTMP直播推流追踪视频中所有人脸信息(C#)

    前言 大家应该都知道几个很常见的例子,比如在张学友的演唱会,在安检通道检票时,通过人像识别系统成功识别捉了好多在逃人员,被称为逃犯克星:人行横道不遵守交通规则闯红灯的路人被人脸识别系统抓拍放在大屏上以 ...

  9. 虹软人脸识别——官方 Qt Demo 移植到 Linux

    一.前言 最近需要在 Linux 平台下开发一个人脸识别相关的应用,用到了虹软的人脸识别 SDK.之前在 Windows 平台用过,感觉不错,SDK 里面还带了 Demo 可以快速看到效果.打开 Li ...

随机推荐

  1. 什么?你还不会通过纯js提交表单?

    如果程序已经封装好了, 不管后台是java .asp.net   .还是php   ?这个时候你的客户突然追加说我要 追加表单验证?   what  妇产科    怎么办? submit  自带刷新效 ...

  2. day14总结

    装饰器 """1.什么是装饰器 器指的是工具/功能 装饰指的是为被装饰对象添加额外的功能 大白话:定义装饰器就是定义了一个函数,该函数就是用来为其他函数添加额外的功能的 ...

  3. Rsync服务常见问题及解决

    1. rsync服务端开启的iptables防火墙/selinux没关 [客户端的错误] No route to host [错误演示过程] [root@nfs01 tmp]# rsync -avz ...

  4. Win10 环境变量

    在你的环境变量前面加入下面的目录; 有奇效 %USERPROFILE%\AppData\Local\Microsoft\WindowsApps\

  5. 数据可视化之 图表篇(四) 那些精美的Power BI可视化图表

    之前使用自定义图表,每次新打开一个新文件时,都需要重新添加,无法保存,在PowerBI 6月更新中,这个功能得到了很大改善,可以将自定义的图表固定在内置图表面板上了. 添加自定义图表后,右键>固 ...

  6. .NET Core微服务开发服务间调用篇-GRPC

    在单体应用中,相互调用都是在一个进程内部调用,也就是说调用发生在本机内部,因此也被叫做本地方法调用:在微服务中,服务之间调用就变得比较复杂,需要跨网络调用,他们之间的调用相对于与本地方法调用,可称为远 ...

  7. 测试人员应该掌握的oracle知识体系

    闲来无事,总结了一下,软件测试人员应该掌握的基本的oracle数据库知识体系 1.安装 1.1 oracle安装 1.2 oracle升级 1.3 oracle补丁 2.管理 2.1数据库创建(dbc ...

  8. Python Ethical Hacking - Malware Analysis(1)

    WRITING MALWARE Download file. Execute Code. Send Report. Download & Execute. Execute & Repo ...

  9. MySQL数据库---记录相关操作

    序 表中记录的相关操作一共四种:插入,更新,删除.查询.其中使用最多,也是最难的就是查询. 记录的插入 1. 插入完整数据(顺序插入) 语法一: INSERT INTO 表名(字段1,字段2,字段3… ...

  10. 微信小程序开发(一)基础知识学习

    1.特点:   ①无DOM对象(虚拟DOM),一切基于组件化(复用.解耦) ②四个重要文件: *.js.*.wxml --> html..wxss --> css.*.json ③无需下载 ...