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# 6.0 新特性汇总

    当C#6.0发布后,引入了一些非常有用的新特性,为程序员提供了更好的编程体验。本文将为大家详细讲解C#6.0中的新特性并附带相应的代码示例。 1. 空值传递运算符 在C#6.0中,新增了一个空值传递运算符(?.),可以在访问一个对象的属性或者执行方法前判断该对象是否为空。如果该对象为空,则程序会直接返回null,不会抛出NullReferenceExcept…

    C# 2023年5月15日
    00
  • C#使用base64对字符串进行编码和解码的测试

    下面是“C#使用base64对字符串进行编码和解码的测试”的完整攻略: 什么是Base64编码? Base64是一种常见的编码方式,它将数据编码成64个字符的可打印ASCII字符,用于在网络上传输二进制数据或者其他不可打印字符的数据。它是一种常见的加密方式,被广泛应用在数据加密、签名等领域。 C#使用Base64编码和解码字符串 我们可以使用C#内置的Sys…

    C# 2023年6月7日
    00
  • C#中的自动类型转换和强制类型转换

    C#中的类型转换包括自动类型转换和强制类型转换两种方式。 自动类型转换 当一个变量的数据类型的范围小于另一个变量的数据类型范围时,C#会自动将小范围类型数据转换成大范围类型。这种转换方式叫做自动类型转换。 示例: int a = 10; double b = a; // 自动类型转换 在这个例子中,整型变量a的数据类型范围小于double类型的数据范围。所以…

    C# 2023年5月15日
    00
  • C#使用EF连接PGSql数据库的完整步骤

    概述 C# 是一种广泛使用的编程语言,EF(Entity Framework) 是一种数据访问技术,用于在 C# 中从数据库中检索、更新和操作数据。PGSql 是一种开源的关系型数据库。 在这篇文章中,我将带你了解如何使用 Entity Framework 与 C# 连接 PGSql 数据库的完整步骤。 步骤 以下是完整的步骤: 2.1. 安装 NuGet …

    C# 2023年6月1日
    00
  • C# 扩展方法的使用

    C# 扩展方法是一种特殊的静态方法,可以为现有的类类型(包括基元类型、引用类型、结构类型和枚举类型等)添加额外的方法,而无需创建派生类或使用继承。扩展方法的使用使得我们可以为系统自带的类型添加自定义的方法,也可以对外部封装的类型进行方法扩展以实现特定的功能。下面是使用C#扩展方法的完整攻略,包含以下几个步骤: 1. 创建静态类 为了定义扩展方法,我们需要创建…

    C# 2023年6月3日
    00
  • C#实现JSON和对象之间互相转换功能示例

    下面开始详细讲解“C#实现JSON和对象之间互相转换功能示例”的完整攻略。 1. 什么是C# JSON和对象之间互相转换? C# JSON和对象之间的转换是指将一个C#对象转换成JSON格式的字符串,或者将JSON格式的字符串转换成一个C#对象。 在C#中,通常使用JSON序列化和反序列化技术来实现JSON和对象之间的转换。 2. C#实现JSON序列化示例…

    C# 2023年5月31日
    00
  • Entity Framework代码优先(Code First)模式

    下面是Entity Framework代码优先(Code First)模式的完整攻略,包括定义数据模型、创建数据库、数据存取操作等内容。 什么是代码优先(Code First)模式 Entity Framework是微软推出的一个ORM(对象关系映射)框架,用于简化应用程序与数据库之间的访问。Entity Framework有三种模式:数据库优先(DataB…

    C# 2023年6月3日
    00
  • C#词法分析器之正则表达式的使用

    C#词法分析器之正则表达式的使用 前言 C#的正则表达式被广泛应用于文本处理和模式匹配。词法分析器是一个典型的例子,需要解析输入的字符串并将其转换为一个完整的语言结构。本文将介绍C#中正则表达式在词法分析器中的应用,并提供两个示例说明。 正则表达式基础 在开始说明C#中正则表达式在词法分析器中的应用之前,我们先来简单介绍正则表达式的基础知识。正则表达式由一些…

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