虹软人脸识别—版本升级接口修改说明(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**版本中,更改*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#)的更多相关文章
- 虹软人脸识别 - faceId及IR活体检测的更新介绍
虹软人脸识别 - faceId及IR活体检测的介绍 前几天虹软推出了 Android ArcFace 2.2版本的SDK,相比于2.1版本,2.2版本中的变化如下: VIDEO模式新增faceId(类 ...
- 虹软人脸识别 - faceId及IR活体检测的介绍
虹软人脸识别 - faceId及IR活体检测的介绍 前几天虹软推出了 Android ArcFace 2.2版本的SDK,相比于2.1版本,2.2版本中的变化如下: VIDEO模式新增faceId(类 ...
- asp.net 虹软 人脸识别 实现刷脸住宿、刷脸签到、刷脸进入等
先看看效果图,我把demo改成自动运行了,暂时借用别人的图片: 最左侧的大图为选择上传的, 中间的小图是大图的脸, 右侧的大图是人脸文件夹中已经存在的,并且相似度较高的一张脸,也就是比对的结果. 先记 ...
- 记C# 调用虹软人脸识别 那些坑
上一个东家是从事安防行业的,致力于人工智能领域,有自主人脸识别.步态识别的算法.C++同事比较称职有什么问题都可以第一时间反馈,并得到合理的处理,封装的DLL 是基于更高性能的GPU算法,可支持更多线 ...
- 虹软人脸识别SDK在网络摄像头中的实际应用
目前在人脸识别领域中,网络摄像头的使用很普遍,但接入网络摄像头和人脸识别SDK有一定门槛,在此篇中介绍过虹软人脸识别SDK的接入流程,本文着重介绍网络摄像头获取视频流并处理的流程(红色框内),以下内容 ...
- 虹软人脸识别 - Android Camera实时人脸追踪画框适配
在使用虹软人脸识别Android SDK的过程中 ,预览时一般都需要绘制人脸框,但是和PC平台相机应用不同,在Android平台相机进行应用开发还需要考虑前后置相机切换.设备横竖屏切换等情况,因此在人 ...
- 虹软人脸识别SDK接入Milvus实现海量人脸快速检索
一.背景 人脸识别是近年来最热门的计算机视觉领域的应用之一,而且现在已经出现了非常多的人脸识别算法,如:DeepID.FaceNet.DeepFace等等.人脸识别被广泛应用于景区.客运.酒店.办公室 ...
- 基于虹软人脸识别,实现RTMP直播推流追踪视频中所有人脸信息(C#)
前言 大家应该都知道几个很常见的例子,比如在张学友的演唱会,在安检通道检票时,通过人像识别系统成功识别捉了好多在逃人员,被称为逃犯克星:人行横道不遵守交通规则闯红灯的路人被人脸识别系统抓拍放在大屏上以 ...
- 虹软人脸识别——官方 Qt Demo 移植到 Linux
一.前言 最近需要在 Linux 平台下开发一个人脸识别相关的应用,用到了虹软的人脸识别 SDK.之前在 Windows 平台用过,感觉不错,SDK 里面还带了 Demo 可以快速看到效果.打开 Li ...
随机推荐
- List的isEmpty与==null的区别
集合的判空一般判定方法 ArrayList<Person> list = null; System.out.println(null == list);//return true Syst ...
- 日期推算:datetime
>>> import datetime >>> datetime.datetime.now() datetime.datetime(2020, 5, 20, 23, ...
- devtools 判断类数组的方法
var obj = { '2': 3, '3': 4, 'length': 2, 'splice': Array.prototype.splice, 'push': Array.prototype.p ...
- WPF基于.Net Core
WPF基于.Net Core 因为最近.net core的热门,所以想实现一下.net core框架下的WPF项目,还是MVVM模式,下面就开始吧,简单做一个计算器吧. 使用VS2019作为开发工具 ...
- JVM 专题三:类加载子系统(一)类装载器子系统
类装载器子系统 1.1 什么是类装载子系统? 类装载器子系统负责从文件系统或者网络中加载Class文件,Class文件在文件开头有特定的文件标识(魔数). 类装载器子系统(ClassLoader)只负 ...
- scrapy 基础组件专题(七):scrapy 调度器、调度器中间件、自定义调度器
一.调度器 配置 SCHEDULER = 'scrapy.core.scheduler.Scheduler' #表示scrapy包下core文件夹scheduler文件Scheduler类# 可以通过 ...
- javascript基础(一): 浏览器控制台使用Element,console,network,source,application
console https://www.jianshu.com/p/67bcb481d1c5 Element https://www.kkpan.com/article/1845.html
- 数据分析,numpy pandas常用api记录
1. np.percentile(train_list["wnum1"], [10, 90, 95, 99]) 计算一个多维数组的任意百分比分位数,此处的百分位是从小到大排列 2 ...
- 在spyder中无法import module
如果在anaconda中下载安装了模块,但是在spyder中无法import,可能是因为两个python环境并不一致,在promote重新conda install spyder即可
- tcpreplay的使用指导
Tcpreplay的介绍 简单的说, tcpreplay是一种pcap包的重放工具, 它可以将用ethreal, wireshark工具抓下来的包原样或经过任意修改后重放回去. 它允许你对报文做任意的 ...