离线人脸识别 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.html2.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);//获取年龄信息ListageList = arcFaceCore.GetAge();// 获取性别信息ListgenderList = arcFace.GetGender();// 获取人脸角度信息Listface3DAngleList = 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);            // 获取年龄信息            ListageList = arcFace.GetAge();            // 获取性别信息            ListgenderList = arcFace.GetGender();            // 获取人脸角度信息            Listface3DAngleList = 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

另外

欢迎打赏哈哈~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容