随着人脸识别技术应用范围不断扩展,如何在Windows C#上基于免费SDK实现人脸识别应用开发,正成为开发者们关心的话题之一。
对于该需求,我推荐虹软视觉开放平台的ArcFace 3.0,免费、离线且可商用,包含人脸识别、活体检测、年龄检测、性别检测等丰富功能,算法鲁棒性强,接入门槛低,同时支持Windows、iOS、Android(包含Android10)、Linux,是广大开发者落地AI应用的利器。
为帮助开发者快速上手,虹软工程师团队针对C#开发打磨了一期课程,以技术解析和专项答疑等形式帮助开发者解决难题。建议有兴趣尝试ArcFace3.0的C#开发者可以提前学习,在实际开发中可事半功倍。
本期课程要点如下,对完整课程视频感兴趣的开发者,可以通过百度搜索"虹软技术公开课"观看。
一、要点一【3分钟跑通C# demo】
课程基于虹软人脸识别SDK包中提供的示例代码,以实操的形式介绍了如何快速接入使用。接入过程在课程视频中有详细介绍。建议观看视频后自行尝试配置,即可对虹软人脸识别技术有一个初步的了解。
Demo配置过程如下:
1. 下载Demo
2. 检查本地系统环境是否符合要求:
a. .NET Framework 4.5.1及以上
b. Microsoft Visual C++ 2013 运行库
3. 在虹软视觉开放平台下载SDK,获取APPID、SDKKEY
4. 配置运行Demo:
a.在App.config文件中配置APPID、SDKKEY
b.将SDK lib文件夹中dll文件拷贝到运行根目录下
c.如本地.NET Framework的版本高于4.5.1,直接修改项目的目标框架
二、要点二【ArcFace重点接口及参数介绍】
1.引擎初始化接口:ASFInitEngine()
【说明】
引擎初始化接口用于初始化引擎,初始化中的参数设置用于定义引擎的属性和算法功能组合,与算法能够呈现出的效果息息相关。
初始化失败时,根据错误码查询原因即可。参数设置是开发者最关心的核心问题,也是保障在实际应用场景中最大化发挥算法效果的关键。视频中主要介绍以下几个参数在实际场景下如何应用。
【重要参数说明】
· detectMode(检测模式):
ASF_DETECT_MODE_VIDEO video模式:适用于摄像头预览,视频文件识别
ASF_DETECT_MODE_IMAGE image模式:适用于静态图片识别。
· detectFaceScaleVal(最小人脸尺寸):代表人脸尺寸相对于图片长边的占比,数值越大,能检测更小的人脸,效值范围[2,32],video模式推荐值为16,image模式推荐值32。
· combinedMask(算法功能组合):建议根据具体业务合理选择算法功能组合,如果功能选择越多,占用的内存越大。
2.人脸特征提取接口:ASFFaceFeatureExtract()
【说明】当人脸检测完成时,可以根据获取的人脸信息通过此接口进行对应人脸的特征提取。
【重要参数说明】
· faceInfo:特征提取需要单张准确的人脸位置和角度,否则可能会报81925。
· featureFeature:算法返回的人脸特征值,包含特征byte数组及特征长度,特征数据库存取操作应存取特征byte数组。
3.人脸属性检测:ASFProcess()
【说明】人脸检测成功后,可以根据人脸信息通过此接口检测人脸属性,如年龄、性别等。
【重要参数说明】
· combinedMask:只支持引擎初始化时指定需要检测的功能,如引擎初始化时,mask指定为年龄和性别,则不能检测3D角度等其他属性。
· 支持的属性:ASF_AGE(年龄)、ASF_GENDER(性别)、ASF_FACE3DANGLE(3D角度)、ASF_LIVENESS(RGB活体)。
· Process() 检测后可根据ASFGetXXX()接口获取对应属性检测结果。
三、要点三【视频流识别和活体检测】
下图为常见视频流识别和活体检测的逻辑流程图:
【多线程策略】
· 主线程:包含人脸追踪以及画面预览功能。
· FR线程:用于人脸特征提取和特征搜索。
· 活体线程:用于人脸活体检测。
【优化策略】
· FaceID:根据FaceID标识一个人,从进入画面到离开画面,对这一人脸只做一次识别即可,大大降低系统资源占用。
· 尝试次数:同一张人脸,特征提取失败可以做有限次数的尝试,提高交互效果。
四、要点四【常见问题答疑】
1. 多线程调用问题
a. 同一个引擎可以使用多线程调用不同算法。
b. 多线程调用同一个算法接口需要启用不同的引擎。
2. VIDEO和IMAGE模式的区别
VIDEO模式:
a. 对视频流中的人脸进行追踪,人脸框平滑过渡,不会出现跳框的现象。
b. 用于预览数据的人脸追踪,处理速度快,可避免出现卡顿问题。
c. 在视频模式引入faceId帧,该值用于标记一张人脸,当一个人脸从进入画面直 到离开画面,faceId 值不变。可用于业务中优化程序性能。
IMAGE模式:
a. 针对单张图片进行人脸检测精度更高。
b. 在注册人脸库时,我们建议使用精度更高的IMAGE模式。
3. 非托管内存的操作
C#调用C++ SDK接口,有些传参需要以Intptr的形式。
a. 复制前应先为Intptr申请内存;
b. 当IntPtr不使用时,需要及时手动释放。
4. 人脸特征数据库的存储
人脸特征提取接口返回的featureFeature对应ASF_FaceFeature,数据库存储应将ASF_FaceFeature .feature转化为byte[]再进行数据库存储,featureSize表示byte[]的长度。
5. SDK dll文件的引用方法(使用DllImport方法)
a. 使用相对路径,将dll直接放到执行目录下(web程序不建议使用);
b. 使用绝对路径;
c. 将dll文件放到系统盘Windows下的System32文件夹下;
d. 为dll文件所在文件夹添加环境变量。
(免责声明:本网站内容主要来自原创、合作伙伴供稿和第三方自媒体作者投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
任何单位或个人认为本网站中的网页或链接内容可能涉嫌侵犯其知识产权或存在不实内容时,应及时向本网站提出书面权利通知或不实情况说明,并提供身份证明、权属证明及详细侵权或不实情况证明。本网站在收到上述法律文件后,将会依法尽快联系相关文章源头核实,沟通删除相关内容或断开相关链接。 )