C#版免费离线人脸识别之虹软ArcSoft V3.0(推荐)

C#版免费离线人脸识别之虹软ArcSoft V3.0(推荐)攻略

1. 介绍

在人工智能与计算机视觉领域中,人脸识别是重要的技术之一。而虹软ArcSoft人脸识别引擎是国内较为流行的人脸识别引擎之一。本篇攻略介绍如何通过C#调用虹软ArcSoft V3.0的免费离线人脸识别SDK,实现人脸检测、人脸特征提取、1:1人脸比对和1:N人脸搜索等功能。

2. 环境准备

本篇攻略基于Windows平台和Visual Studio 2017环境。具体需要准备以下环境:

  • Windows 7以上操作系统
  • Visual Studio 2017以上版本
  • 虹软ArcSoft V3.0免费离线人脸识别SDK
  • C#版虹软ArcSoft V3.0免费离线人脸识别SDK封装库

3. 安装虹软ArcSoft V3.0免费离线人脸识别SDK

请先前往虹软官方网站下载并安装虹软ArcSoft V3.0免费离线人脸识别SDK。

4. C#版虹软ArcSoft V3.0免费离线人脸识别SDK封装库使用示例

在完成虹软ArcSoft V3.0免费离线人脸识别SDK的安装后,我们可以使用C#版虹软ArcSoft V3.0免费离线人脸识别SDK封装库来调用SDK进行开发和测试。

下面是C#版虹软ArcSoft V3.0免费离线人脸识别SDK封装库的使用示例,包含了人脸检测、人脸特征提取、1:1人脸比对和1:N人脸搜索等功能:

using ArcFaceSharp;
using System;
using System.Drawing;
using System.IO;

namespace ArcFaceSharpTest
{
    class Program
    {
        static void Main(string[] args)
        {
            // 初始化引擎
            ArcFaceEngine engine = new ArcFaceEngine();
            int errorCode = engine.Init("AppId", "SdkKey");
            if (errorCode != 0) throw new Exception($"初始化引擎失败,错误码:{errorCode}");

            // 人脸检测
            using (Bitmap bitmap = new Bitmap("TestImage.jpg"))
            {
                AsImage asImage = new AsImage(bitmap);
                AsDetectFaceResult detectResult = engine.DetectFace(asImage);
                Console.WriteLine($"人脸检测结果:{detectResult.FaceNum}个人脸");
                foreach (var faceInfo in detectResult.FaceInfos)
                {
                    Console.WriteLine($"人脸坐标:({faceInfo.Left},{faceInfo.Top},{faceInfo.Right},{faceInfo.Bottom})");
                }
            }

            // 人脸特征提取
            byte[] faceFeature;
            using (Bitmap bitmap = new Bitmap("TestImage.jpg"))
            {
                AsImage asImage = new AsImage(bitmap);
                AsDetectFaceResult detectResult = engine.DetectFace(asImage);
                if (detectResult.FaceNum == 1) // 只有一个人脸
                {
                    AsFaceFeature feature = engine.FaceFeatureExtract(asImage, detectResult.FaceInfos[0]);
                    faceFeature = feature.FeatureData.ToArray();
                    Console.WriteLine($"人脸特征提取成功,特征向量维度:{feature.FeatureData.Count}");
                }
                else
                {
                    throw new Exception("人脸数量不为1,无法提取人脸特征");
                }
            }

            // 1:1人脸比对
            using (Bitmap bitmap1 = new Bitmap("TestImage1.jpg"), bitmap2 = new Bitmap("TestImage2.jpg"))
            {
                AsImage asImage1 = new AsImage(bitmap1);
                AsDetectFaceResult detectResult1 = engine.DetectFace(asImage1);

                AsImage asImage2 = new AsImage(bitmap2);
                AsDetectFaceResult detectResult2 = engine.DetectFace(asImage2);

                if (detectResult1.FaceNum == 1 && detectResult2.FaceNum == 1) // 两张图片各只有一个人脸
                {
                    AsCompareResult compareResult = engine.FaceCompare(asImage1, detectResult1.FaceInfos[0], asImage2, detectResult2.FaceInfos[0]);
                    Console.WriteLine($"1:1比对结果:相似度{compareResult.Score}");
                }
                else
                {
                    throw new Exception("两张图片的人脸数量不为1,无法进行1:1比对");
                }
            }

            // 1:N人脸搜索
            byte[] targetFeature = faceFeature; // 以前面提取的人脸特征向量作为目标特征
            using (FileStream msmFile = new FileStream("msm.bin", FileMode.Open, FileAccess.Read))
            {
                byte[] feature = new byte[1960]; // 虹软ArcSoft V3.0人脸识别SDK提取的人脸特征为1960字节
                while (msmFile.Read(feature, 0, 1960) == 1960) // 循环读取人脸特征向量
                {
                    double similarity = engine.FaceCompare(targetFeature, feature); // 计算相似度
                    if (similarity > 0.8) // 相似度阈值
                    {
                        Console.WriteLine($"1:N搜索结果:匹配成功,相似度{similarity}");
                    }
                }
            }

            // 释放引擎
            engine.Dispose();
        }
    }
}

5. 附录

本篇攻略中给出的示例代码均来源于GitHub,感谢GitHub用户tomaszzm的分享。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#版免费离线人脸识别之虹软ArcSoft V3.0(推荐) - Python技术站

(0)
上一篇 2023年6月6日
下一篇 2023年6月6日

相关文章

  • C++ 和 C# 中的 lambda的方法技巧

    C++和C#中lambda表达式都是一种可以在运行时定义匿名函数的语法,它所属的范畴属于闭包。在函数式编程中,lambda表达式可以替代匿名函数来传递操作。下面将分别对C++和C#中的lambda表达式进行详细讲解。 C++中的lambda表达式 在C++11中,lambda表达式的语法为: [capture list] (parameters) ->…

    C# 2023年5月15日
    00
  • unity与vue交互(无第三方插件)

    下面我将为您介绍如何进行Unity与Vue交互的攻略,并提供两个示例。 前置知识 在深入讲解 Unity 与 Vue 交互之前,需要掌握以下技术: Unity 中 C# 与 JavaScript 编程 前端开发技术,包括 Vue.js 的使用方法 网络编程基础 Unity与Vue交互实现方式 Unity 以及 Vue.js 都支持WebSocket。因此,我…

    C# 2023年5月15日
    00
  • 如何使用C#读写锁ReaderWriterLockSlim

    下面是详细讲解如何使用C#读写锁ReaderWriterLockSlim的攻略: 什么是ReaderWriterLockSlim? ReaderWriterLockSlim是一个线程同步机制,用于实现在多个线程之间共享对某个资源的读取和写入。它可以提供高性能的读取操作和相对低性能的写操作。 使用ReaderWriterLockSlim可以控制多个线程同时读取…

    C# 2023年5月15日
    00
  • 在Unity中实现动画的正反播放代码

    下面是在Unity中实现动画的正反播放代码的完整攻略。 1. 实现动画正播放 要在Unity中实现动画的正播放,首先需要将动画文件添加到项目中。可以通过在“Project”窗口中右键单击,选择“Import New Asset”选项,然后选择要添加的动画文件。 接下来,在场景中选择要添加动画的对象,然后拖动动画文件到对象的“Animator”组件上。此时,可…

    C# 2023年6月3日
    00
  • ToLua框架下C#与Lua代码的互调操作

    ToLua是一款在Unity3D游戏引擎中使用的框架,它支持C#和Lua之间的相互调用和交互。下面我们来介绍ToLua框架下C#与Lua代码的互调操作的完整攻略。 步骤一:在Unity项目中配置ToLua 首先需要在Unity项目中下载并导入ToLua插件,导入完成后需要在菜单栏依次打开 ToLua/Generate All 按钮来生成适合Lua调用的C#代…

    C# 2023年5月15日
    00
  • C#使用远程服务调用框架Apache Thrift

    C#使用远程服务调用框架Apache Thrift Apache Thrift是一个高效的跨语言服务调用框架,支持多种编程语言之间的远程过程调用(RPC)。这里将详细介绍如何在C#中使用Apache Thrift框架来实现远程服务调用。 1. 安装Thrift 下载官方提供的Thrift工具包:https://thrift.apache.org/downlo…

    C# 2023年6月3日
    00
  • MSScriptControl.ScriptControl组件的用法实例

    MSScriptControl.ScriptControl组件的用法实例 简介 MSScriptControl.ScriptControl是一个用于Windows开发的脚本控制器,在运行时可以解释和执行脚本代码。它支持多种脚本语言,如JavaScript、VBScript等,并提供了丰富的API接口,可用于实现各种脚本功能,是非常实用的开发工具。 安装 MS…

    C# 2023年5月31日
    00
  • asp.net 产生随机颜色实现代码

    产生随机颜色是 Web 开发中的一个比较常见的需求,下面是一份 asp.net 实现随机颜色的攻略。 方案一:使用 Random 类生成随机颜色值 可以通过 Random 类的 Next() 方法产生一个 32 位整数值,然后使用 Color.FromArgb() 方法将 32 位整数值转换为 Color 对象,从而实现随机颜色的生成。示例代码如下: Ran…

    C# 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部