推荐个c#开源离线人脸识别库ViewFaceCore
By
admin
at 2023-08-29 • 0人收藏 • 564人看过

一个基于 SeetaFace6 的 .NET 人脸识别解决方案
本项目受到了 SeetaFaceEngine.Net 的启发
开源、免费、跨平台 (win/linux)
GitHub源码地址:https://github.com/ViewFaceCore/ViewFaceCore

可以识别出 人的年纪(虽然不太准) / 有无带口罩 / 男&女性别 信息
一个简单图片识别的例子如下:
using SkiaSharp;
using System;
using ViewFaceCore.Core;
using ViewFaceCore.Model;
namespace ViewFaceCore.Demo.ConsoleApp
{
internal class Program
{
private readonly static string imagePath = @"images/Jay_3.jpg";
static void Main(string[] args)
{
using var bitmap = SKBitmap.Decode(imagePath);
using FaceDetector faceDetector = new FaceDetector();
FaceInfo[] infos = faceDetector.Detect(bitmap);
Console.WriteLine($"识别到的人脸数量:{infos.Length} 个人脸信息:\n");
Console.WriteLine($"No.\t人脸置信度\t位置信息");
for (int i = 0; i < infos.Length; i++)
{
Console.WriteLine($"{i}\t{infos[i].Score:f8}\t{infos[i].Location}");
}
Console.ReadKey();
}
}
}
1 个回复 | 最后更新于 2023-09-11
登录后方可回帖
对人脸识别这个库进行了二次封装, 这样就可以在aardio中直接调用了.
import console; import dotNet; import System.Drawing; var viewFaceCoredll = dotNet.load("\FaceCoreEx.dll"); var fc = viewFaceCoredll.new("FaceCoreEx.Core"); //获取图片中的人脸数量 var ret = fc.FromFlie(io.fullpath("\images\Jay_4.jpg")); //位置和得分 for(i=0;ret-1;1){ var info = fc.GetInfo(i) console.log(info.X) console.log(info.Y) console.log(info.Width) console.log(info.Height) console.log(info.Score) } console.pause(true);完整工程如下: 文件300多M是因为包含里所有的人脸数据匹配文件
链接:
https://pan.baidu.com/s/1FoXoMMqhy56NVaqR9Zo31g?pwd=uzd4
提取码:uzd4
下面是二次封装的FaceCoreEx类库源码:
将上面工程中的 ViewFaceCore.dll 和ViewFaceCore.Extension.SystemDrawing.dll 引用在类库工程中即可.
using System; using System.Collections.Generic; using System.Drawing; using System.Globalization; using System.Linq; using System.Runtime.InteropServices; using System.Runtime.InteropServices.ComTypes; using System.Text; using System.Threading; using System.Threading.Tasks; using ViewFaceCore.Core; using ViewFaceCore.Model; namespace FaceCoreEx { public class Core { private FaceInfo[] infos; public int FromFlie(string path) { var bitmap = Bitmap.FromFile(path); var faceImage = ViewFaceCore.ViewFaceSystemDrawingExtension.ToFaceImage(bitmap); FaceDetector faceDetector = new FaceDetector(); infos = faceDetector.Detect(faceImage); bitmap.Dispose(); faceImage.Dispose(); faceDetector.Dispose(); return infos.Length; } public InfoStruct GetInfo(int index) { InfoStruct info = new InfoStruct(){ X = 0, Y = 0, Width = 0, Height = 0, Score = 0 }; if (index>=0 && index< infos.Length) { info.X = infos[index].Location.X; info.Y = infos[index].Location.Y; info.Width = infos[index].Location.Width; info.Height = infos[index].Location.Height; info.Score = infos[index].Score; } return info; } public struct InfoStruct { public int X; public int Y; public int Width; public int Height; public double Score; }; } }