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技术站