离线人脸识别 ArcFaceSharp -- ArcFace 2.0 SDK C#封装库分享
ArcFaceSharp
ArcFaceSharp 是ArcSoft 虹软 ArcFace 2.0 SDK 的一个 C# 封装库,为方便进行 C# 开发而封装。欢迎 Start & Fork。
使用
在 Nuget 搜索 ArcFaceSharp 安装。
PM> Install-Package ArcFaceSharp -Version 1.0.2
或者下载dll导入。
导入 ArcFaceSharp 后,将自己申请到的 ArcFace2.0 SDK 的 dll 文件 (libarcsoft_face.dll 和 libarcsoft_face_engine.dll)放在程序的运行目录下。
接口调用的流程可参考官方文档的流程图(http://ai.arcsoft.com.cn/manual/arcface_windows_guideV2.html 2.1.5调用流程)
主要 API
具体参数和含义可以自行查看方法的注释
- 激活及初始化
创建 ArcFaceCore对象即可
ArcFaceCore arcFaceCore = ArcFaceCore(appId, sdkKey, detectMode, combinedMask,detectFaceOrientPriority, detectFaceMaxNum,detectFaceScaleVal);
- 将 Bitmap 转换成 ImageData
ImageData imageData = ImageDataConverter.ConvertToImageData(bitmap);
以下方法都是 ArcFaceCore 中的方法
- 人脸检测
MultiFaceModel multiFaceModel = arcFaceCore.FaceDetection(imageData);
- 人脸信息检测(年龄/性别/人脸3D角度)最多支持4张人脸信息检测,超过部分返回未知
// 人脸信息检测 先调用这个接口才能获取以下三个信息
arcFaceCore.FaceProcess(imageData,multiFaceModel);
//获取年龄信息
List<int> ageList = arcFaceCore.GetAge();
// 获取性别信息
List<int> genderList = arcFace.GetGender();
// 获取人脸角度信息
List<Face3DAngleModel> face3DAngleList = arcFace.GetFace3DAngle();
- 人脸特征值提取
asfSingleFaceInfo 为人脸检测接口返回的人脸信息中的其中一个人脸信息
AsfFaceFeature asfFaceFeature = arcFace.FaceFeatureExtract(imageData, ref asfSingleFaceInfo);
- 人脸对比
float result = arcFace.FaceCompare(asfFaceFeature1, asfFaceFeature2);
- 异常捕获
以人脸特征提取为例,当借口返回值不为 0(成功)时,则会抛出 ResultCodeException 异常。
try
{
AsfFaceFeature asfFaceFeature = arcFace.FaceFeatureExtract(imageData, ref asfSingleFaceInfo);
}
catch (ResultCodeException e)
{
Console.WriteLine(e.ResultCode);
throw;
}
代码示例:
\ArcFaceSharpUnitTest\UnitTest1.cs
public void TestMethod1()
{
// SDK对应的 APP_ID SDK_KEY
string APP_ID = @"7NK7KSpfgxdqb74r8nvy36kDwH3wVGstr2LHGHBxQ8LY";
string SDK_KEY = @"3fD8vKYMNfPzKHMoqppjA9chGh2aGkWzUQNFiAj7Yq63";
// 加载图片
Bitmap heying = new Bitmap(@"heying.jpg");
Bitmap face1 = new Bitmap(@"ldh0.jpg");
Bitmap face2 = new Bitmap(@"ldh1.jpg");
Bitmap face3 = new Bitmap(@"zxy0.jpg");
// 创建 ArcFaceCore 对象,向构造函数传入相关参数进行 ArcFace 引擎的初始化
ArcFaceCore arcFace = new ArcFaceCore(APP_ID,SDK_KEY,ArcFaceDetectMode.IMAGE,
ArcFaceFunction.FACE_DETECT | ArcFaceFunction.FACE_RECOGNITION | ArcFaceFunction.AGE | ArcFaceFunction.FACE_3DANGLE | ArcFaceFunction.GENDER,DetectionOrientPriority.ASF_OP_0_ONLY,50,32);
// 将 Bitmap 转换成 ImageData
ImageData heyingImgData = ImageDataConverter.ConvertToImageData(heying);
// 人脸检测
// 也可直接传入 Bitmap 来调用相关接口 会自动转换成 ImageData,但这里推荐用 ImageData
MultiFaceModel multiFaceB = arcFace.FaceDetection(heying);
// 传入 ImageData ,推荐使用这个接口
MultiFaceModel multiFace = arcFace.FaceDetection(heyingImgData);
// 人脸信息检测(年龄/性别/人脸3D角度)最多支持4张人脸信息检测,超过部分返回未知 这是官方文档的说明
arcFace.FaceProcess(heyingImgData, multiFace);
// 获取年龄信息
List<int> ageList = arcFace.GetAge();
// 获取性别信息
List<int> genderList = arcFace.GetGender();
// 获取人脸角度信息
List<Face3DAngleModel> face3DAngleList = arcFace.GetFace3DAngle();
// 将第一张图片的 Bitmap 转换成 ImageData
ImageData faceData1 = ImageDataConverter.ConvertToImageData(face1);
// 检测第一张图片中的人脸
MultiFaceModel multiFace1 = arcFace.FaceDetection(faceData1);
// 取第一张图片中返回的第一个人脸信息
AsfSingleFaceInfo faceInfo1 = multiFace1.FaceInfoList.First();
// 提第一张图片中返回的第一个人脸的特征
AsfFaceFeature faceFeature1 = arcFace.FaceFeatureExtract(faceData1, ref faceInfo1);
ImageData faceData2 = ImageDataConverter.ConvertToImageData(face2);
// 检测第二张图片中的人脸
MultiFaceModel multiFace2 = arcFace.FaceDetection(faceData2);
// 取第二张图片中返回的第一个人脸信息
AsfSingleFaceInfo faceInfo2 = multiFace2.FaceInfoList.First();
// 提第二张图片中返回的第一个人脸的特征
AsfFaceFeature faceFeature2 = arcFace.FaceFeatureExtract(faceData2, ref faceInfo2);
// face1 face2 人脸对比,将会返回一个 0-1 之间的浮点数值
float result = arcFace.FaceCompare(faceFeature1, faceFeature2);
ImageData faceData3 = ImageDataConverter.ConvertToImageData(face3);
// 检测第三张图片中的人脸
MultiFaceModel multiFace3 = arcFace.FaceDetection(faceData3);
// 取第三张图片中返回的第一个人脸信息
AsfSingleFaceInfo faceInfo3 = multiFace3.FaceInfoList.First();
// 提第三张图片中返回的第一个人脸的特征
AsfFaceFeature faceFeature3 = arcFace.FaceFeatureExtract(faceData3, ref faceInfo3);
// face1 face3 人脸对比,将会返回一个 0-1 之间的浮点数值
float result2 = arcFace.FaceCompare(faceFeature1, faceFeature3);
// 释放销毁引擎
arcFace.Dispose();
// ImageData使用完之后记得要 Dispose 否则会导致内存溢出
faceData1.Dispose();
faceData2.Dispose();
// BItmap也要记得 Dispose
face1.Dispose();
face2.Dispose();
}
感谢
本项目参考了以下开发者的一些思路和代码,在此表示感谢。
C#_Demo_摄像头实时_4线程人脸识别_注册 - Demo 分享 - 虹软人工智能引擎开发者论坛 - Powered by Discuz!https://ai.arcsoft.com.cn/bbs/forum.php?mod=viewthread&tid=673&extra=page%3D1
虹软2.0版本人脸检测C#类库分享 - 第2页 - ArcFace - 虹软人工智能引擎开发者论坛 - Powered by Discuz!https://ai.arcsoft.com.cn/bbs/forum.php?mod=viewthread&tid=1274&extra=page%3D1&page=2
C#人脸检测与动态人脸识别显示坐标 视频人脸识别WINFORM - ArcFace - 虹软人工智能引擎开发者论坛 - Powered by Discuz! https://ai.arcsoft.com.cn/bbs/forum.php?mod=viewthread&tid=648&extra=page%3D1
另外
欢迎打赏哈哈~
离线人脸识别 ArcFaceSharp -- ArcFace 2.0 SDK C#封装库分享的更多相关文章
- C#版免费离线人脸识别——虹软ArcSoft V3.0
[温馨提示] 本文共678字(不含代码),8张图.预计阅读时间需要6分钟. 1. 前言 人脸识别&比对发展到今天,已经是一个非常成熟的技术了,而且应用在生活的方方面面,比如手机.车站.天网等. ...
- 百度离线人脸识别sdk的使用
1.1下载sdk运行 百度离线人脸识别sdk的使用 1.2配置环境 添加至项目,可以拖动复制或者以类库形式添加face-resource此文件夹 放到根目录上一层 激活文件与所有dll引用放到根目录嫌 ...
- windows下百度离线人脸识别本地部署与使用(nodejs做客户端,c++做服务端,socket做通信)
1.离线人脸识别本地部署 详情请阅读百度人脸识别官网 2.nodejs做socket通信的客户端 为什么不直接通过调用c++编译的exe获得人脸识别结果? 原因:exe运行时会加载很多模型而消耗很多时 ...
- Java离线人脸识别SDK 支持arcface 2.0 最新版
虹软人脸识别SDK之Java版,支持SDK 1.1+,以及当前最新版本2.0,滴滴,抓紧上车! JDK SDK Win release license status 前言 由于业务需求,最近跟人脸识别 ...
- C# 离线人脸识别Demo 使用ArcFace 2.0开发完成
环境: win7以上 VS2013以上 sdk版本:ArcFace v2.0 x86 x64平台Debug.Release配置都已通过编译 下载地址:https://github ...
- 虹软离线人脸识别 ArcFace 2.0 Demo [C++]
环境: win10(10.0.16299.0)+ VS2017 sdk版本:ArcFace v2.0 OPENCV3.43版本 x64平台Debug.Release配置都已通过编译 下载地址:http ...
- 基于Arcface 免费离线人脸识别 2.0 Demo C#
本来打算做个C#版demo,但没用成功.使用虹软最新人脸识别技术开发完成 过程如下: 1. 传入一张单人脸照片: 2.调用检测人脸函数ASFDetectFaces,成功返回人脸信息的指针: 3.使用 ...
- python3+arcface2.0 离线人脸识别 demo
python3+虹软2.0的所有功能整合测试完成,并对虹软所有功能进行了封装,现提供demo主要功能,1.人脸识别2.人脸特征提取3.特征比对4.特征数据存储与比对其他特征没有添加 sdk 下载请戳这 ...
- 虹软2.0免费离线人脸识别 Demo [C++]
环境: win10(10.0.16299.0)+ VS2017 sdk版本:ArcFace v2.0 OPENCV3.43版本 x64平台Debug.Release配置都已通过编译 下载地址:http ...
随机推荐
- 4521: [Cqoi2016]手机号码
4521: [Cqoi2016]手机号码 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 1030 Solved: 609 [Submit][Statu ...
- @SpringBootApplication无法被解析引入
问题描述:@SpringBootApplication无法被解析引入,导致SpringBoot启动类报错 原因分析:springboot的包冲突了所致 解决方案: 需要删掉 repository\or ...
- Python自动化之高级语法单例模式
方法1 共享属性;所谓单例就是所有引用(实例.对象)拥有相同的状态(属性)和行为(方法) 同一个类的所有实例天然拥有相同的行为(方法), 只需要保证同一个类的所有实例具有相同的状态(属性)即可 所有实 ...
- https协议的一些杂谈
参考文献:百度运维博客&知乎车小胖的回答 这是拖了很久的一篇记录,项目完结了,也找个时间写完.(额,阅读者最好对http协议有一定了解,否则就没必要浪费时间看下去了)首先来一段百度的解释: H ...
- P1446 [HNOI2008]Cards
题目描述 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun很快就给出了答案. 进一步,小春要求染出Sr张红色,Sb张蓝 ...
- CAN--UART的协议转换器
CAN--UART的协议转换器 //------------------------------------------------------// CAN <==> UART的协议转换 ...
- Unity3D游戏开发从零单排(三) - 极速创建狂拽酷炫的游戏地形
提要 在Unity工作流程内,地形是一个必不可少的重要元素.不论是游戏或虚拟现实都会使用到各种类型的地形效果,在这个教学中我们须要了解到地形的制作基本概念与,当中对于Unity的地形操作部分须要大量的 ...
- CentOS 安装第三方yum源
yum install wget #安装下载工具 wget http://www.atomicorp.com/installers/atomic #下载 sh ./atomic #安装 yum che ...
- Hadoop(16)-MapReduce框架原理-自定义FileInputFormat
1. 需求 将多个小文件合并成一个SequenceFile文件(SequenceFile文件是Hadoop用来存储二进制形式的key-value对的文件格式),SequenceFile里面存储着多个文 ...
- Linux—文件命令之touch命令
下面总结一下对于文件的操作命令: satat命令:用于显示文件的详细信息,包括文件.设备.gid.各种时间等. 命令格式:stat filename touch 的两个功能: 1.新建文件,如需建立特 ...