zoukankan      html  css  js  c++  java
  • C#开发实录:基于免费SDK实现人脸识别应用开发

    随着人脸识别技术应用范围不断扩展,如何在Windows C#上基于免费SDK实现人脸识别应用开发,正成为开发者们关心的话题之一。

    对于该需求,我推荐虹软视觉开放平台的ArcFace 3.0,免费、离线且可商用,包含人脸识别、活体检测、年龄检测、性别检测等丰富功能,算法鲁棒性强,接入门槛低,同时支持Windows、iOS、Android(包含Android10)、Linux,是广大开发者落地AI应用的利器。

    为帮助开发者快速上手,虹软工程师团队针对C#开发打磨了一期课程,以技术解析和专项答疑等形式帮助开发者解决难题。建议有兴趣尝试ArcFace3.0的C#开发者可以提前学习,在实际开发中可事半功倍。

    本期课程要点如下,查看完整课程视频请点击文末视频链接:

    一、要点一【3分钟跑通C# demo】

    课程基于虹软人脸识别SDK包中提供的示例代码,以实操的形式介绍了如何快速接入使用。接入过程在课程视频中有详细介绍。建议观看视频后自行尝试配置,即可对虹软人脸识别技术有一个初步的了解。

    Demo配置过程如下:

    1. 下载Demo

    2. 检查本地系统环境是否符合要求:

    1. .NET Framework 4.5.1及以上
    2. 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文件所在文件夹添加环境变量。

    对完整课程视频感兴趣的开发者,可以点击下文课程视频链接观看。

    https://ai.arcsoft.com.cn/course/mobile/index.html

  • 相关阅读:
    LeetCode 227. Basic Calculator II
    LeetCode 224. Basic Calculator
    LeetCode 103. Binary Tree Zigzag Level Order Traversal
    LeetCode 102. Binary Tree Level Order Traversal
    LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal
    LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal
    LeetCode 169. Majority Element
    LeetCode 145. Binary Tree Postorder Traversal
    LeetCode 94. Binary Tree Inorder Traversal
    LeetCode 144. Binary Tree Preorder Traversal
  • 原文地址:https://www.cnblogs.com/feishixin123/p/13151189.html
Copyright © 2011-2022 走看看