c# image转换为bitmap_C# 人脸识别库
(给DotNet加星标,提升.Net技能)
转自:View12138cnblogs.com/view12138/p/ViewFaceCore.html
.NET人脸识别库ViewFaceCore
这是基于SeetaFace6 人脸识别开发的.NET 平台下的人脸识别库
这是一个使用超简单的人脸识别库
这是一个基于.NET Standard 2.0 开发的库
这个库已经发布到 NuGet ,你可以一键集成到你的项目
此项目可以免费商业使用
开源
开源协议:Apache-2.0
GitHub地址:https://github.com/View12138/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、在项目中编写你的代码
按照 说明 自己编写
或者参考以下代码
简单的调用示例
static void Main(){ ViewFace viewFace = new ViewFace((str) => { Debug.WriteLine(str); }); // 初始化人脸识别类,并设置 日志回调函数 viewFace.DetectorSetting = new DetectorSetting() { FaceSize = 20, MaxWidth = 2000, MaxHeight = 2000, Threshold = 0.5 };// 系统默认使用的轻量级识别模型。如果对精度有要求,请切换到 Normal 模式;并下载需要模型文件 放入生成目录的 model 文件夹中 viewFace.FaceType = FaceType.Normal;// 系统默认使用5个人脸关键点。//不建议改动,除非是使用口罩模型。 viewFace.MarkType = MarkType.Light;
#region 识别老照片float[] oldEigenValues; Bitmap oldImg = (Bitmap)Image.FromFile(@"C:\Users\yangw\OneDrive\图片\Camera Roll\IMG_20181103_142707.jpg"/*老图片路径*/); // 从文件中加载照片 // 或者视频帧等var oldFaces = viewFace.FaceDetector(oldImg); // 检测图片中包含的人脸信息。(置信度、位置、大小)if (oldFaces.Length > 0) //识别到人脸 { { // 打印人脸信息 Console.WriteLine($"识别到的人脸数量:{oldFaces.Length} 。人脸信息:\n"); Console.WriteLine($"序号\t人脸置信度\t位置X\t位置Y\t宽度\t高度");for (int i = 0; i < oldFaces.Length; i++) { Console.WriteLine($"{i + 1}\t{oldFaces[i].Score}\t{oldFaces[i].Location.X}\t{oldFaces[i].Location.Y}\t{oldFaces[i].Location.Width}\t{oldFaces[i].Location.Height}"); } Console.WriteLine(); }var oldPoints = viewFace.FaceMark(oldImg, oldFaces[0]); // 获取 第一个人脸 的识别关键点。(人脸识别的关键点数据) oldEigenValues = viewFace.Extract(oldImg, oldPoints); // 获取 指定的关键点 的特征值。 }else { oldEigenValues = new float[0]; /*未识别到人脸*/ }#endregion
#region 识别新照片float[] newEigenValues; Bitmap newImg = (Bitmap)Image.FromFile(@"C:\Users\yangw\OneDrive\图片\Camera Roll\IMG_20181129_224339.jpg"/*新图片路径*/); // 从文件中加载照片 // 或者视频帧等var newFaces = viewFace.FaceDetector(newImg); // 检测图片中包含的人脸信息。(置信度、位置、大小)if (newFaces.Length > 0) //识别到人脸 { { // 打印人脸信息 Console.WriteLine($"识别到的人脸数量:{newFaces.Length} 。人脸信息:\n"); Console.WriteLine($"序号\t人脸置信度\t位置X\t位置Y\t宽度\t高度");for (int i = 0; i < newFaces.Length; i++) { Console.WriteLine($"{i + 1}\t{newFaces[i].Score}\t{newFaces[i].Location.X}\t{newFaces[i].Location.Y}\t{newFaces[i].Location.Width}\t{newFaces[i].Location.Height}"); } Console.WriteLine(); }var newPoints = viewFace.FaceMark(newImg, newFaces[0]); // 获取 第一个人脸 的识别关键点。(人脸识别的关键点数据) newEigenValues = viewFace.Extract(newImg, newPoints); // 获取 指定的关键点 的特征值。 }else { newEigenValues = new float[0]; /*未识别到人脸*/ }#endregiontry {float similarity = viewFace.Similarity(oldEigenValues, newEigenValues); // 对比两张照片上的数据,确认是否是同一个人。 Console.WriteLine($"阈值 = {Face.Threshold[viewFace.FaceType]}\t相似度 = {similarity}"); Console.WriteLine($"是否是同一个人:{viewFace.IsSelf(similarity)}"); }catch (Exception e) { Console.WriteLine(e); } Console.ReadKey();}
三、说明
命名空间:ViewFaceCore.Sharp : 人脸识别类所在的命名空间
属性说明:
方法说明:
using System.Drawing;using ViewFaceCore.Sharp;using ViewFaceCore.Sharp.Model;
// 识别 bitmap 中的人脸,并返回人脸的信息。FaceInfo[] FaceDetector(Bitmap);
// 识别 bitmap 中指定的人脸信息 info 的关键点坐标。FaceMarkPoint[] FaceMark(Bitmap, FaceInfo);
// 提取人脸特征值。float[] Extract(Bitmap, FaceMarkPoint[]);
// 计算特征值相似度。float Similarity(float[], float[]);
// 判断相似度是否为同一个人。bool IsSelf(float);
四、实现
此项目受到了 SeetaFaceEngine.NET项目的启发
https://github.com/iarray/SeetaFaceEngine.Net
这个项目本质上来说还是调用了 SeetaFace 的 C++ 类库来实现的人脸识别功能。针对本人遇到过的相关的类库的使用都不太方便,而且使用的 SeetaFace 的版本较老,故萌生了自己重新开发的想法。
本项目在开发完成之后为了方便调用,采用了 Nuget 包的形式,将所有需要的依赖以及最小识别模型一起打包。在使用时非常简单,只需要 nuget 安装,编写代码,运行即可,不需要多余的操作。
首先查看 SeetaFace ,已经更新到了v3(v6即v3)(上面前辈的项目是基于v1开发的),最新版本暂时没有开源,但是可以免费商用。然后是根据以前的经验和 SeetaFace6 文档的指导,以及前辈的项目,做了以下操作。
1、对SeetaFace6 的接口进行了 C++ 形式的封装
目前主要实现了 人脸检测,关键点提取,特征值提取,特征值对比几个人脸识别中的基础接口。有了这几个接口,可以完整的实现一套人脸识别和验证的流程。
2、采用 C# 对上诉接口进行了导入
因为C++的项目测CPU架构区分x86和x64,所以C# 层也需要区分架构封装
3、采用 C# 的面向对象的封装
因为C#的项目默认都是 AnyCPU,所以为了简化调用,在这一层封装的时候增加了架构判断,当在你的项目中引用的时候,不用做任何修改。
且因为C++的C#导入方法在和原生的C#写法略有差异,且数据的转换和传递比较麻烦,所以类库中对外隐藏了 C# 导入层。并使用大家都更熟悉的C#的面向对象的方式进行进一步的封装和简化。
五、最后
此项目还未实现 SeetaFace6 中的许多特性,也许:
想起 GitHub 密码,持续更新…
删除代码仓库跑路…
如果在使用过程中遇到问题,你也许可以:
在 GitHub 报告Bug…
向我发送邮件yangwei169@live.com
- EOF -
推荐阅读 点击标题可跳转
.NET 关于人脸识别引擎分享
C#30分钟完成百度人脸识别
C#离线人脸识别使用ArcFace 2.0开发
看完本文有收获?请转发分享给更多人
关注「DotNet」加星标,提升.Net技能
好文章,我在看❤️
c# image转换为bitmap_C# 人脸识别库相关推荐
- 基于Python的开源人脸识别库:离线识别率高达99.38%
基于Python的开源人脸识别库:离线识别率高达99.38% 2019年04月18日 18:13:18 AI终结者 阅读数 1233 项目地址:https://github.com/ageitgey/ ...
- face-recognition库(人脸识别库)安装,使用
一,起因 1,在某hub上下载了所谓"最简单的人脸识别项目". 2,开始了face-recognition的安装之路. 3,人脸识别在win10上的使用,识别图像上面的人脸. 二, ...
- Python人脸识别教程 - 基于Python的开源人脸识别库:离线识别率高达99.38%
Python人脸识别教程 - 基于Python的开源人脸识别库:离线识别率高达99.38% 仅用 Python 和命令行就可以实现人脸识别的库开源了.该库使用 dlib 顶尖的深度学习人脸识别技术构建 ...
- Github | 标星3W+ ! Face Recognition世界上最简洁的人脸识别库!
点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 编辑:Sophia 计算机视觉联盟 报道 | 公众号 CVLianMeng 转载于 :Github [人工智能资 ...
- 基于爬虫+人脸识别库实现指定人物自动采集
基于爬虫+人脸识别库实现指定人物自动采集 项目目的,为后面基于GAN的换脸大法做准备 更新 无需多张照片只需要一张原照就可以了 前言 如今大数据时代下的深度学习发展的火热,但是总是发现找不到合适的自己 ...
- python人脸识别库_基于Python的face_recognition库实现人脸识别
Python Python开发 Python语言 基于Python的face_recognition库实现人脸识别 一.face_recognition库简介 face_recognition是Pyt ...
- facenet 人脸识别库的搭建和使用方法(二)
上一篇文章介绍了facenet人脸识别的源码使用,这篇文章就来搭建自己的人脸识别库. 1. 制作自己的人脸识别库 1.1 准备数据集 通过百度图片爬取一些明星图片为例,这里准备了一个DownloadI ...
- 人脸识别库face_recognition安装简单教程
face_recognition是一款免费.开源.实时.离线的Python人脸识别库.Github网址为https://github.com/ageitgey/face_recognition.如安装 ...
- SeetaFace2.0:中科视拓开源跨平台C++商业人脸识别库
SeetaFace2.0:中科视拓开源跨平台C++商业人脸识别库 SeetaFace2.0 的人脸识别库,来自中科院计算所的中科视拓团队商业开源,它完全使用 C++编写,支持 Windows.Linu ...
最新文章
- CVPR2018论文看点:基于度量学习分类与少镜头目标检测
- 几个流行移动前端框架的比较评分
- 又爱又恨的 Microsoft Edge!
- iOS开发之UIMenuController的基本使用
- WINCE6.0+S3C6410串口驱动
- java 数组 参数 ppt,Java自学课件-数组.ppt
- logging.getLogger(logger)
- 你好,面试官 | 你拿Java Map考验老干部?
- netty中的websocket
- The summary of Interview
- 通过 百度网盘 分享文件
- 埃及分数c 语言程序,C语言将真分数分解为埃及分数
- Python爬虫(二十二)_selenium案例:模拟登陆豆瓣
- wtc java 代码 tpcall(servicename_[转载]Dorado+Spring+Wtc+Tuxedo开发
- MATLAB画立体包络图
- python爬虫进阶-同城旅游酒店评价(JS逆向)
- TextView设置MaxLength
- 华为云虚拟专用网络VPN常见问题解答
- IntelliJ IDEA快速入门 | 第二十八篇:详述IntelliJ IDEA(或者Eclipse)中一些常用的快捷键(下)
- css 光影掠过文字效果
热门文章
- R语言使用random包生成随机数或者随机字符串实战:randomNumbers函数创建随机整数的数据集(包含重复项)、randomSequence函数创建不含重复项的随机序列数据集、创建随机字符串
- Linux下配置jupyter notebook远程访问实战:配置Jupyter的连接密码、启动jupyter服务、远程访问jupyter(关闭防火墙)
- Python使用numpy中的hstack函数水平堆叠(horizontally stack)数组实战
- 临时表,临时表什么时候删除
- R构建幂回归模型(Power Regression)
- pandas使用to_sql方法将dataframe注册为数据库表进行数据整合和数据清洗并不对比SQL操作和dataframe操作
- 基于模型(Model-based)进行特征选择(feature selection)并可视化特征重要性(feature importance)
- R语言绘制韦恩(venn)图
- mysql buffer size_优化mysql之key_buffer_size设置
- 一个简单的C++程序,回顾基本语法