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日

相关文章

  • 使用数字签名实现数据库记录防篡改(Java实现)

    使用数字签名实现数据库记录防篡改是一种常见的数据安全保护方法。以下是使用Java实现数字签名的完整攻略。 环境准备 在使用Java实现数字签名前,需要确保以下环境已经准备好: JDK已经安装并配置好了环境变量。 项目中已经添加了需要引入的包的依赖。 实现数字签名 以下是使用Java实现数字签名的步骤: 步骤1:生成密钥对 使用Java的KeyPairGene…

    C# 2023年5月15日
    00
  • C#元组类型ValueTuple用法详解

    C#元组类型ValueTuple用法详解 简介 元组类型是C#7.0之后加入的新特性,提供了一种简单方便的方式来存储和传递多个值。元组类型有两种:ValueTuple和Tuple。 本篇攻略将详细讲解ValueTuple类型的用法。 ValueTuple类型的定义 ValueTuple是一个泛型结构体(struct),它所定义的元组类型可以存储1~8个元素,…

    C# 2023年6月7日
    00
  • 干货来袭! C# 7.0 新特性(VS2017可用)

    干货来袭!C#7.0新特性(VS2017可用)的完整攻略 介绍 C# 7.0 是微软于2017年推出的一项新技术,它具有以下一些新特性: Tuples(元组) Deconstruction(解构) Out Var(输出变量) Local function(本地函数) Ref return and Ref locals(引用返回和引用本地变量) Pattern…

    C# 2023年5月15日
    00
  • Microsoft .Net Remoting系列教程之一:.Net Remoting基础篇

    Microsoft.NetRemoting系列教程之一:.NetRemoting基础篇 .NetRemoting是一种用于实现分布式应用程序的技术。本教程将提供.NetRemoting基础知识的完整攻略,包括如何创建.NetRemoting应用程序、如何定义远程对象、如何使用远程对象以及两个示例。 创建.NetRemoting应用程序 要创建.NetRemo…

    C# 2023年5月15日
    00
  • C#复制数组的两种方式及效率比较

    C#复制数组的两种方式及效率比较 在C#编程中,复制数组是一项非常常见的操作。本文将介绍C#中复制数组的两种方式,并通过对比它们的效率,得出更为高效的复制方式。 1. 使用Array.Copy方法 Array.Copy方法是C#中复制数组的最基本方式之一。该方法的语法如下: Array.Copy(Array sourceArray, Array destin…

    C# 2023年6月7日
    00
  • asp.net DataGrid 中文字符排序的实现代码

    ASP.NET DataGrid 是一个常用的数据展示控件,但是当涉及到中文字符排序时,DataGrid 默认是按照 ASCII 码顺序进行排序的,可能无法满足我们的需求。为了实现中文字符排序,我们可以使用自定义排序算法。 下面是实现中文字符排序的完整攻略: 第一步:继承 IComparer 接口 我们需要自定义一个排序类,并继承 IComparer 接口。…

    C# 2023年5月31日
    00
  • 深入理解C#之接口

    当我们需要定义一个规范或者一个协议,描述某个对象应该具有哪些能力时,可以使用接口。接口可以看做是一种特殊的抽象类,它没有任何实现,只用于描述对象应该有哪些能力。具体来说,一个接口是由一组抽象方法、属性、索引器和事件组成的。可以将接口看做一种契约,实现接口的类型需要履行这个契约,提供指定的能力。 以下是实现接口的基本语法: [public | internal…

    C# 2023年6月7日
    00
  • c#字符串查找某词出现的次数及索引

    下面是详细讲解“C#字符串查找某词出现的次数及索引”的完整攻略: 1. 使用IndexOf方法查找某词出现的次数及索引 在C#中,可以使用IndexOf方法查找某个词在字符串中出现的次数以及第一次出现的索引。具体的代码实现如下: string str = "Hello World! Hello C#! Hello .NET!"; // 查…

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