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

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

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

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

虹软人脸识别公开课视频-虹软视觉开放平台​ai.arcsoft.com.cn

要点一【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文件所在文件夹添加环境变量。

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

虹软人脸识别公开课视频-虹软视觉开放平台​ai.arcsoft.com.cn

android人脸识别demo_C#开发实录:基于免费SDK实现人脸识别应用开发相关推荐

  1. ABB机器人二次开发:基于FlexPendant SDK的示教器功能开发基础

    目录 一.开发环境搭建 二.开发项目创建 三.专业工具开发控件添加

  2. 【口罩人脸检测/识别】中科视拓免费开放口罩人脸检测与识别技术解读

    原文:中科视拓免费开放口罩人脸检测与识别技术 思路 通过掺入了20%以上戴口罩的人脸识别数据集训练专门戴口罩识别模型,然后调整整个识别的Pipeline为先检测是否戴口罩,如果判断为带口罩则使用戴口罩 ...

  3. 数字识别java开源_Java基于opencv实现图像数字识别(三)—灰度化和二值化

    Java基于opencv实现图像数字识别(三)-灰度化和二值化 一.灰度化 灰度化:在RGB模型中,如果R=G=B时,则彩色表示灰度颜色,其中R=G=B的值叫灰度值:因此,灰度图像每个像素点只需一个字 ...

  4. 中国人工智能学会通讯——基于视频的行为识别技术 1.5 基于深度学习的视频识别方法...

    1.5 基于深度学习的视频识别方法 下面介绍面向视频分类的深度学习方 法.深度卷积神经网络在图像分类取得 成功后,研究人员就希望把它推广到视 频分类中.但这不是一件很容易的事, 一个原因是缺乏足够的训 ...

  5. linux指纹登录实现原理,指纹识别技术原理与基于Linux系统的指纹识别门禁系统设计...

    指纹作为人体的身体特征,具有唯一性.稳定性和不易盗用等特点.随着指纹识别理论逐渐成熟.指纹采集工具这一难题得到解决,指纹识别已经成为目前最广泛应用的生物识别之一,逐渐取代了传统的认证识别方式,广泛应用 ...

  6. 计算机辅助的开发方法,基于计算机辅助设计技术(TCAD)的工艺开发

    随着半导体工艺开发和制造成本的快速上升和复杂程度不断加深,半导体制造商如今面临着前所未有的挑战.为了满足成本更低和功能更多的产品需求,半导体工艺的更新换代取决于不同器件类型的升级和集成--核心逻辑金属 ...

  7. 表单识别(六)——票据识别-论文研读:基于深度学习的票据识别系统设计与实现,卞飞飞(中)

    票据识别系统文本检测与识别算法研究 方法概览 票据文本检测算法 文本单元间边界信息建模设计 可微分二值化模块设计 网络结构设计 网络训练标签的生成与损失函数设计 网络推理过程与后处理设计 票据文本识别 ...

  8. 表单识别(五)——票据识别-论文研读:基于深度学习的票据识别系统设计与实现,卞飞飞(上)

    (论文研读:基于深度学习的票据识别系统设计与实现,卞飞飞:) 引言: 传统的文本检测与识别算法主要指利用数字图像处理等非深度学习技术进行文本检测的方法,依赖于数字图像特征(如颜色.纹理.轮廓.形状等特 ...

  9. 水位尺读数识别 python_一种基于深度学习的水尺识别方法与流程

    本发明涉及水位监测 技术领域: :,具体地说,涉及一种基于深度学习的水尺识别方法. 背景技术: ::近些年来,随着图像处理技术的发展,通过计算机获得图像里的详细信息成为了一种非常方便且高效的方式.将图 ...

最新文章

  1. 本地 无法启动 SQL Server 错误代码126
  2. poj 3255 Roadblocks (SPFA)
  3. 它们的定义Activity跳转动画
  4. 每天一道LeetCode-----二叉树逐层遍历,每一层存在一个序列中,返回所有序列集合
  5. 浅谈 CSRF 攻击方式
  6. (一)FlexViewer之整体框架解析
  7. source code of MES Data
  8. mysql 窗口函数_MySQL数分:窗口函数
  9. string与byte[]之间的转换
  10. 2018.12.13 区块链论文翻译
  11. citirx for wincor configuration (citrix 7.5 setup with WI)
  12. CC2640 LaunchPad入门试用-第一篇
  13. 二叉树的非递归遍历算法
  14. 内存和硬盘在计算机中的作用,电脑内存的作用 内存条的作用到底是什么
  15. 无法安装NET Framework3.5错误代码0x800F081F
  16. 求助!!!pycharm第一次安装后启动时报错怎么解决
  17. C++(30)—奇偶数判断
  18. 用于微信小程序的图文编辑器(富文本编辑器)
  19. 虚拟机 安装 CUDA 可行性说明
  20. Micropython史上最友好的编辑器,小巧精悍

热门文章

  1. Net中的AOP系列之《方法执行前后——边界切面》
  2. Python中的break和continue的使用方法
  3. 手机号中间四位星号显示
  4. 不使用border-radius,实现一个可复用的高度和宽度都自适应的圆角矩形
  5. (二)Flask 学习 —— 模板
  6. mysql数据库需求分析工具_一份全面的“数据库设计需求分析”是怎样的?
  7. c语言中尖括号的作用,C语言中,#include
  8. 宿主机docker容器互传文件命令
  9. java xml annotation_Annotation与XML配置ID生成策略
  10. 转:NAT traversal 的概念