[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 ...
随机推荐
- PyCharm 2018实现远程调试代码
pycharm是一个非常强大的python开发工具,现在很多代码最终在线上跑的环境都是linux,而开发环境可能还是windows下开发,这就需要经常在linux上进行调试,或者在linux对代码进行 ...
- CentOS下配置MySQL允许root用户远程登录
1.常用命令: 安装上传下载文件命令yum install lrzsz安装webget工具yum -y install wget ----------------------------------- ...
- 2018-2019-2 网络对抗技术 20165301 Exp2 后门原理与实践
2018-2019-2 网络对抗技术 20165301 Exp2 后门原理与实践 实验内容 (1)使用netcat获取主机操作Shell,cron启动 (2)使用socat获取主机操作Shell, 任 ...
- Delphi中使用ActiveX的一些心得
使用方法分为两种:一.直接把可视化的ActiveX控件放到程序中:二.运行时根据需要实时建立. 如果是直接使用,则应用程序在初始化的过程中会自动寻找.创建所需的ActiveX控件,如果控件没有注册, ...
- zabbix agent配置文件记录
一.无论主动还是被动模式都要配置server和linstenPort 二.若要设置主动模式那么要添加ServerActive,若不添加则默认为被动模式
- 008.FTP单独虚拟用户
一 单独虚拟用户概念 给每个虚拟用户单独建立目录,并建立自己的配置文件,方便单独配置权限,并可以单独制定上传目录. 二 单独为虚拟用户设置权限 2.1 创建用户单独保存虚拟用户配置文件的目录 [roo ...
- 003.NFS配置实例
一 NFS常见服务管理 1.1 启动NFS [root@imxhy ~]# systemctl start nfs #CentOS7.x系列启动 [root@imxhy ~]# service nfs ...
- 【Ray Tracing in One Weekend 超详解】 光线追踪1-4
我们上一篇写了Chapter5 的第一个部分表面法线,那么我们来学剩下的部分,以及Chapter6. Chapter5:Surface normals and multiple objects. 我们 ...
- Pwn入坑指南
栈溢出原理 参考我之前发的一篇 Windows栈溢出原理 还有 brant 师傅的<0day安全笔记> Pwn常用工具 gdb:Linux下程序调试 PEDA:针对gdb的python漏洞 ...
- Android `AsyncTask`简要分析
AsyncTask简要分析 经典异步任务:AsyncTask,使用场景有:批量下载,批量拷贝等.官方文档就直接给出了一个批量下载的示例. private class DownloadFilesTask ...