[Winform]基于Emgu.CV人脸识别
摘要
“OpenCV是一个开源的计算机视觉库。OpenCV采用C/C++语言编写,可以运行在Linux/Windows/Mac等操作系统上。OpenCV还提供了Python、Ruby、MATLAB以及其他语言的接口。OpenCV的一个目标是构建一个简单易用的计算机视觉框架,以帮助开发人员更便捷地设计更复杂得计算机视觉相关应用程序。OpenCV包含的函数有500多个,覆盖了计算机视觉的许多应用。
Emgu
Emgu CV是将OpenCV使用.net编程语言(C#)封装成的.net库,使用Emgu CV就可以在.net平台上调用OpenCV的功能,同时,Emgu CV也是开源的。
Emgu CV官网:http://www.emgu.com
从官网上你可以下载最新版本,我采用的是3.2.0.2682版本的。
安装成功之后,打开目录
打开解决方案,你可以看到很多demo,可以根据自己需求研究下
新建winform程序,添加引用,Emgu安装目录下的dll
并将所需的文件从Emgu的bin目录下拷贝到你的程序debug下
测试核心代码
public partial class MainFrm : Form
{
/// <summary>
/// 摄像头
/// </summary>
private VideoCapture _capture = null;
private Mat _frame;
private string _exePath = AppDomain.CurrentDomain.BaseDirectory;
private string _trainedFacePath = string.Empty;
/// <summary>
/// 3.5s 保存一次图片
/// </summary>
private const double Interval = 3.5;
long detectionTime;
List<Rectangle> faces = new List<Rectangle>();
List<Rectangle> eyes = new List<Rectangle>();
/// <summary>
/// 上次保存图片时间
/// </summary>
private DateTime _lastSaveDt = DateTime.Now;
/// <summary>
/// 窗口坐标
/// </summary>
private Point _frmPoint;
/// <summary>
/// 是否抓取到人脸
/// </summary>
private bool _isHavePersonFace = false;
public MainFrm()
{
InitializeComponent();
this.TopMost = true;
CheckForIllegalCrossThreadCalls = false;
_frmPoint = new Point();
} private void MainFrm_Load(object sender, EventArgs e)
{
//无边框
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
//不出现在任务栏
this.ShowInTaskbar = false;
//去掉滑轮放大或者缩小
this.VideoImageBox.Enabled = false;
this.MouseDown += MainFrm_MouseDown;
this.MouseMove += MainFrm_MouseMove; _trainedFacePath = _exePath + "trainedfaces";
this.Location = new Point(Screen.PrimaryScreen.WorkingArea.Width - this.Width - ,
Screen.PrimaryScreen.WorkingArea.Height - this.Height);
if (!Directory.Exists(_trainedFacePath))
{
Directory.CreateDirectory(_trainedFacePath);
}
CvInvoke.UseOpenCL = false;
try
{
_capture = new VideoCapture();
_frame = new Mat();
_capture.ImageGrabbed += ProcessFrame;
_capture.Start(); }
catch (NullReferenceException excpt)
{
MessageBox.Show(excpt.Message);
}
} void MainFrm_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Point myPosittion = MousePosition;
myPosittion.Offset(-_frmPoint.X, -_frmPoint.Y);
Location = myPosittion;
}
} void MainFrm_MouseDown(object sender, MouseEventArgs e)
{
_frmPoint.X = e.X;
_frmPoint.Y = e.Y;
} private void ReleaseData()
{
if (_capture != null)
_capture.Dispose(); }
private void ProcessFrame(object sender, EventArgs e)
{ if (_capture != null && _capture.Ptr != IntPtr.Zero)
{
bool isOk = _capture.Retrieve(_frame, );
VideoImageBox.Image = _frame;
if (isOk && !_isHavePersonFace)
{ Run(_frame);
}
}
}
private void UploadFile(string filePath)
{ try
{
FileInfo file = new FileInfo(filePath);
FileLogHelper.WriteFileLog(file.Name); }
catch (Exception ex)
{
FileLogHelper.WriteFileLog(ex);
} } private void Run(Mat mat)
{
IImage image = mat;
DetectFace.Detect(
image, "haarcascade_frontalface_default.xml", "haarcascade_eye.xml",
faces, eyes,
out detectionTime);
string fileName = DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".jpg";
string path = Path.Combine(_trainedFacePath, fileName); foreach (Rectangle face in faces)
{
try
{
_isHavePersonFace = true;
CvInvoke.Rectangle(image, face, new Bgr(Color.Red).MCvScalar, );
using (Bitmap bm = new Bitmap(face.Width, face.Height))
using (Graphics g = Graphics.FromImage(bm))
{
g.DrawImage(image.Bitmap, new Rectangle(, , face.Width, face.Height),
new Rectangle(face.X + , face.Y + , face.Width - , face.Height - ), GraphicsUnit.Pixel);
bm.Save(path, System.Drawing.Imaging.ImageFormat.Jpeg);
}
break; }
catch (Exception ex)
{
FileLogHelper.WriteFileLog(ex);
}
} _isHavePersonFace = false;
} }
[Winform]基于Emgu.CV人脸识别的更多相关文章
- Emgu cv人脸检测识别
Emgu cv人脸检测识别 1.开发平台:WIN10 X64 VS2012 Emgucv版本:3.1 2.先给大家分享一个官网给的示例源代码: https://ncu.dl.sourcef ...
- 基于 OpenCV 的人脸识别
基于 OpenCV 的人脸识别 一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenC ...
- 【计算机视觉】基于OpenCV的人脸识别
一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenCV 已被广泛运用在各种项目上,从 ...
- 基于MATLAB的人脸识别算法的研究
基于MATLAB的人脸识别算法的研究 作者:lee神 现如今机器视觉越来越盛行,从智能交通系统的车辆识别,车牌识别到交通标牌的识别:从智能手机的人脸识别的性别识别:如今无人驾驶汽车更是应用了大量的机器 ...
- 基于 HTML5 的人脸识别技术
基于 HTML5 的人脸识别技术 https://github.com/auduno/headtrackr/
- 基于node.js人脸识别之人脸对比
基于node.js人脸识别之人脸对比 Node.js简介 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 I/O ...
- java基于OpenCV的人脸识别
基于Java简单的人脸和人眼识别程序 使用这个程序之前必须先安装配置OpenCV详细教程见:https://www.cnblogs.com/prodigal-son/p/12768948.html 注 ...
- 基于Emgu CV+百度人脸识别,实现视频动态 人脸抓取与识别
背景 目前AI 处于风口浪尖,作为 公司的CTO,也作为自己的技术专研,开始了AI之旅,在朋友圈中也咨询 一些大牛对于AI 机器学习框架的看法,目前自己的研究方向主要开源的 AI 库,如:Emgu C ...
- 可学习的多人人脸识别程序(基于Emgu CV)
源代码下载(需要安装Emgu CV,安装方法请百度) 很多朋友使用Emgu CV遇到CvInvoke()的报错,我找到一种解决方法. 把EmguCV目录下bin里面的所有dll复制到C:\WINDOW ...
随机推荐
- Shell中各种判断语法
Shell判断 按照文件类型进行判断 -b 判断文件是否存在,并且是否为快设备文件(是块设备文件为真) -c 判断文件是否存在,并且是否为字符设备文件(是字符设备文件为真) -d 判断文件是否存在,并 ...
- python3迭代器和生成器
1.手动访问迭代器中的元素 #要手动访问迭代器中的元素,可以使用next()函数 In [3]: with open('/etc/passwd') as f: ...: try: ...: while ...
- echo变量失败,提示:ECHO 处于关闭状态
检查变量值,变量值为空就会提示关闭
- apiCloud app调用浏览器打开网页的方法
在APP调用浏览器有两种方法:1.使用openApp2.使用openWin 两种方法调用浏览器后的效果有一点不同:1.使用openApp调用浏览器后,如果手机内有多个浏览器,会首先弹出选择浏览器的框2 ...
- 更改jupyter notebook的主题颜色(theme) 包括pycharm
https://blog.csdn.net/Techmonster/article/details/73382535
- github git 无法读取远程仓库或无权限
解决方法:重新设置ssh密钥 ssh-keygen -t rsa -C "http://github.com"//输入命令后按提示输入id_rsa.pub的存储地址 和密钥密码 地 ...
- Java Scanner Readable
通过implements(实现)Readbale interface(接口)的 read() method(方法) 实现自己添加字符到buffer里,然后读取 //策略模式package object ...
- DDD领域模型企业级系统Linq的CRUD(四)
建造一个Product Module类: ProductDBContextDataContext dbcontext = new ProductDBContextDataContext(); publ ...
- js ES6 Set和Map数据结构详解
这篇文章主要介绍了ES6学习笔记之Set和Map数据结构,结合实例形式详细分析了ECMAScript中基本数据结构Set和Map的常用属性与方法的功能.用法及相关注意事项,需要的朋友可以参考下 本 ...
- hdu 1700 (圆的内接三角形 要周长最大)
以原点为圆心,给出圆上的一点,要求圆上的另外两点,使得这三个点的距离和最大,很容易想到这是一个等边三角形然后有这两个公式 点a为已知点a*b=|a|*|b|*cos(120); x*x+y*y=r*r ...