随着人脸识别技术应用范围的不断扩大,如何在Windows C#上开发基于免费SDK的人脸识别应用程序,正成为开发者关心的话题之一。
对于这种需求,我推荐ArcFace的开放平台ArcFace 3.0,免费,离线,商用。包含人脸识别、活体检测、年龄检测、性别检测等丰富功能。算法鲁棒性强,准入门槛低。同时支持Windows、iOS、Android(包括Android10)和Linux。是开发者落地AI应用的工具。
为了帮助开发者快速入门,虹软工程师团队打磨了一门C#开发的课程,以技术分析和专题问答的形式帮助开发者解决疑难问题。建议有意尝试ArcFace3.0的C#开发者可以提前学习,在实际开发中事半功倍。
本课程的要点如下。对完整课程视频感兴趣的开发者可以通过百度搜索“虹软公开课”观看。
一、要点1【3分钟运行C #演示】
课程以ArcSoft人脸识别SDK包中提供的示例代码为基础,以实际操作的形式介绍如何快速访问和使用。课程视频中详细描述了访问过程。建议大家尝试自己配置视频,这样可以对虹软人脸识别技术有一个初步的了解。
演示配置流程如下:
1 .下载演示版
2。检查本地系统环境是否符合要求:
。NET Framework 4.5.1及以上版本。Microsoft Visual C++ 2013运行时
3。在虹软可视化开放平台下载SDK,获取APPID和SDKKEY
4。配置运行演示:
A .配置APPID和SDK key
B .将SDK lib文件夹中的dll文件复制到运行根目录
C .如果本地的版本。NET Framework高于4.5.1,直接修改项目的目标框架
II。第二点【ArcFace关键接口和参数介绍】
1。引擎初始化接口:as finit engine ()
[/br
[描述]
引擎初始化接口用于初始化引擎,初始化中的参数设置用于定义引擎的属性和算法函数的组合,与算法能够展现的效果密切相关。
初始化失败时,根据错误码查询原因即可。参数设置是开发者最关心的核心问题,也是在实际应用场景中最大化算法效果的关键。视频主要介绍了在实际场景中如何应用以下参数。
[重要参数描述]
detect mode:
ASF _ detect _ mode _ video video模式:适用于相机预览和视频文件识别
[/
detectFaceScaleVal(最小人脸尺寸):表示人脸尺寸与画面长边的比值。值越大,可以检测到的人脸越小。有效值范围为[2,32],视频模式推荐值为16,图像模式推荐值为32。
combinedMask:建议根据具体业务合理选择算法函数的组合。如果选择更多的函数,占用的内存会更大。2 .
。人脸特征提取接口:asffacefeatureextract()
【描述】当人脸检测完成后,可以根据得到的人脸信息,通过该接口提取相应人脸的特征。
[重要参数描述]
faceInfo:特征提取需要单张准确的人脸位置和角度,否则可能会上报81925。
featureFeature:算法返回的人脸特征值包括特征字节数组和特征长度,特征字节数组要在特征数据库访问操作中进行访问。
[br/]3。人脸属性检测:ASFProcess()
【描述】人脸检测成功后,可以根据人脸信息通过该界面检测年龄、性别等人脸属性。
[重要参数说明]
combinedMask:仅支持发动机初始化时检测的功能。例如,如果在引擎初始化期间将掩码指定为年龄和性别,则无法检测其他属性,如3D角度。
支持的属性:ASF_AGE(年龄)、ASF_GENDER(性别)、ASF_FACE3DANGLE(3D角度)、ASF_LIVENESS(RGB活体)。
process()检测后,根据ASFGetXXX()接口可以得到相应的属性检测结果。三、要点三【视频流识别和直播检测】
下图是常见的视频流识别和直播检测的逻辑流程图:

[多线程策略]
主线程:包含人脸追踪和屏幕预览功能。
FR thread:用于人脸特征提取和特征搜索。
活体线程:用于人脸活体检测。
[优化策略]
FaceID:根据FaceID识别一个人,从进屏到出屏只识别一次这个人的脸,大大减少了系统资源占用。
尝试次数:对于同一张人脸,如果特征提取失败,可以进行有限次数的尝试,以提高交互效果。
四。要点4[常见问题解答]
1。多线程调用问题
A .同一个引擎可以使用多线程调用不同的算法。
B .多线程调用同一个算法接口需要启动不同的引擎。2 .
。视频和图像模式的区别
视频模式:
A .在视频流中跟踪人脸,人脸帧会平滑过渡,不会跳帧。
B .用于预览数据的人脸跟踪,处理速度快,可以避免卡顿问题。
C .在视频模式下引入faceId帧,用来标记人脸,当人脸进入屏幕和离开屏幕时,faceId值保持不变。它可用于优化业务中的程序性能。
图像模式:
A .单张图片的人脸检测准确率更高。
B .注册人脸数据库时,我们建议使用准确率更高的图像模式。
[br/]3。非托管内存的操作
C#调用C++ SDK接口,有些参数需要以Intptr的形式传递。
A .复制前要为Intptr申请内存;
b . IntPtr不用的时候,需要及时手动释放。
4。人脸特征数据库的存储
人脸特征提取接口返回的特征对应ASF _ featureFeature。在数据库存储中,ASF_FaceFeature.feature要转换成byte[]再存储到数据库中。featureSize表示字节[]的长度。5 .
。SDK dll文件的引用方法(使用DllImport方法)
A .使用相对路径,将dll直接放入执行目录(不建议web程序使用);
B .使用绝对路径;
C .将dll文件放在系统盘Windows下的System32文件夹中;
D .将环境变量添加到dll文件所在的文件夹中。








