C#离线人脸识别 ArcFaceSharp封装库分享

栏目: ASP.NET · 发布时间: 7年前

内容简介:ArcFaceSharp 是 ArcSoft 虹软 ArcFace 2.0 SDK 的一个 C# 封装库,为方便进行 C# 开发而封装。欢迎 Start & Fork。使用在 Nuget 搜索 ArcFaceSharp 安装。PM> Install-Package ArcFaceSharp -Version 1.0.2或者下载dll导入。

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/manu... 2.1.5调用流程)

C#离线人脸识别 ArcFaceSharp封装库分享

主要 API

具体参数和含义可以自行查看方法的注释

激活及初始化

创建 ArcFaceCore对象即可

ArcFaceCore arcFaceCore = ArcFaceCore(appId, sdkKey, detectMode, combinedMask,detectFaceOrientPriority, detectFaceMaxNum,detectFaceScaleVal);将 Bitmap 转换成 ImageDataImageData 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;

}代码示例:ArcFaceSharpUnitTestUnitTest1.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...

虹软2.0版本人脸检测C#类库分享 - 第2页 - ArcFace - 虹软人工智能引擎开发者论坛 - Powered by Discuz! https://ai.arcsoft.com.cn/bbs...

C#人脸检测与动态人脸识别显示坐标 视频人脸识别WINFORM - ArcFace - 虹软人工智能引擎开发者论坛 - Powered by Discuz! https://ai.arcsoft.com.cn/bbs...

另外欢迎打赏哈哈~


以上所述就是小编给大家介绍的《C#离线人脸识别 ArcFaceSharp封装库分享》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

测试驱动开发的艺术

测试驱动开发的艺术

Lasse Koskela / 李贝 / 人民邮电出版社 / 20101023 / 59.00元

在传统的软件开发中,开发人员对于代码是否正确心中无底,一切依赖于后期的测试环节。极限编程反其道而行之,主张采用测试驱动开发(TDD)的方法,即通过测试定义所要开发的功能的接口,然后实现功能的开发过程。TDD通过不断地测试推动代码的开发,既简化了代码,又保证了软件质量。 本书采用“手把手”的教学方式,通过大量实例来解释TDD,还专门用几章的篇幅来讲解如何为难于测试的技术编写单元测试。全书内容循......一起来看看 《测试驱动开发的艺术》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具