优秀的编程知识分享平台

网站首页 > 技术文章 正文

C# 人脸识别库(winform人脸识别登录)

nanyue 2024-11-12 11:46:54 技术文章 1 ℃

原文地址:https://www.cnblogs.com/view12138/p/13185907.html


NET 人脸识别库 ViewFaceCore

这是基于 SeetaFace6 人脸识别开发的 .NET 平台下的人脸识别库这是一个使用超简单的人脸识别库这是一个基于 .NET Standard 2.0 开发的库这个库已经发布到 NuGet ,你可以一键集成到你的项目此项目可以免费商业使用

?、开源

开源协议:Apache-2.0GitHub地址: ViewFaceCore十分感谢您的小星星

一、示例

示例项目地址:WinForm 摄像头人脸检测示例项目效果:

二、使用

一分钟在你的项目里集成人脸识别

1. 创建你的 .NET 应用

.NET Standard >= 2.0.NET Core >= 2.0.NET Framework >= 4.6.1^2

2. 使用 Nuget 安装 ViewFaceCore

  • Author : View
  • Version >= 0.1.1

此 Nuget 包会自动添加依赖的 C++ 库,以及最精简的识别模型。如果需要其它场景的识别模型,请下载 SeetaFace6 模型文件。

3. 在项目中编写你的代码

  • 按照 说明 自己编写
  • 或者参考以下代码

简单的调用示例

ViewFaceCore 使用示例

三、说明

命名空间:ViewFaceCore.Sharp : 人脸识别类所在的命名空间

  • 属性说明:

属性名称类型说明默认值ModelPathstring获取或设置模型路径 [ 如非必要,请勿修改 ]./model/FaceTypeFaceType获取或设置人脸类型FaceType.LightMarkTypeMarkType获取或设置人脸关键点类型MarkType.LightDetectorSettingDetectorSetting获取或设置人脸检测器设置new DetectorSetting()

  • 方法说明:

 1 using System.Drawing;
 2 using ViewFaceCore.Sharp;
 3 using ViewFaceCore.Sharp.Model;
 4 
 5 // 识别 bitmap 中的人脸,并返回人脸的信息。
 6 FaceInfo[] FaceDetector(Bitmap);
 7 
 8 // 识别 bitmap 中指定的人脸信息 info 的关键点坐标。
 9 FaceMarkPoint[] FaceMark(Bitmap, FaceInfo);
10 
11 // 提取人脸特征值。
12 float[] Extract(Bitmap, FaceMarkPoint[]);
13 
14 // 计算特征值相似度。
15 float Similarity(float[], float[]);
16 
17 // 判断相似度是否为同一个人。
18 bool IsSelf(float);

四、实现

此项目受到了 SeetaFaceEngine.NET 项目的启发

这个项目本质上来说还是调用了 SeetaFace 的 C++ 类库来实现的人脸识别功能。针对本人遇到过的相关的类库的使用都不太方便,而且使用的 SeetaFace 的版本较老,故萌生了自己重新开发的想法。

本项目在开发完成之后为了方便调用,采用了 Nuget 包的形式,将所有需要的依赖以及最小识别模型一起打包。在使用时非常简单,只需要 nuget 安装,编写代码,运行即可,不需要多余的操作。

首先查看 SeetaFace ,已经更新到了v3(v6即v3)(上面前辈的项目是基于v1开发的),最新版本暂时没有开源,但是可以免费商用。然后是根据以前的经验和 SeetaFace6 文档的指导,以及前辈的项目,做了以下操作。

1.对SeetaFace6 的接口进行了 C++ 形式的封装。

目前主要实现了 人脸检测,关键点提取,特征值提取,特征值对比几个人脸识别中的基础接口。有了这几个接口,可以完整的实现一套人脸识别和验证的流程。

  • c++封装的接口代码如下:

C++ 封装层

2.采用 C# 对上诉接口进行了导入。

因为C++的项目测CPU架构区分x86和x64,所以C# 层也需要区分架构封装

C# 导入层

3.采用 C# 的面向对象的封装

因为C#的项目默认都是 AnyCPU,所以为了简化调用,在这一层封装的时候增加了架构判断,当在你的项目中引用的时候,不用做任何修改。

且因为C++的C#导入方法在和原生的C#写法略有差异,且数据的转换和传递比较麻烦,所以类库中对外隐藏了 C# 导入层。并使用大家都更熟悉的C#的面向对象的方式进行进一步的封装和简化。

C# 面向对象层

五、也许…

  • 此项目还未实现 SeetaFace6 中的许多特性,也许:

    想起 GitHub 密码,持续更新…    删除代码仓库跑路…

  • 如果在使用过程中遇到问题,你也许可以:

    在 GitHub 报告Bug…    向我 发送邮件

Tags:

最近发表
标签列表