Emgu cv人脸检测识别
Emgu cv人脸检测识别
1、开发平台:WIN10 X64 VS2012 Emgucv版本:3.1
2、先给大家分享一个官网给的示例源代码:
https://ncu.dl.sourceforge.net/project/emgufacerecog/Face%20Recognition%202.4.9.zip
3、部分代码展示:
【打开摄像头:】
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 基于人脸识别的智能监控
{
class CaptureManage
{
private Emgu.CV.Capture capture;//摄像头对象 //检测是否有可用摄像头
void showCapture()
{ } public Object returnCapture(int a)
{
switch(a)
{
case ://本地摄像头
try
{
capture = new Emgu.CV.Capture();
capture.Start();//摄像头开始工作
return capture;
}
catch
{ } break;
case : //网络摄像头
try
{
capture = new Emgu.CV.Capture("rtsp://admin:tlJwpbo6@192.168.1.125:554");
}
catch (NullReferenceException excpt)
{
//MessageBox.Show("摄像头打开失败\n" + excpt.Message);
}
break;
case :
break;
}
return null;
}
private bool closeCapture(int i)
{
switch (i)
{
case ://本地摄像头
try
{
if(capture!=null)
capture.Stop();//摄像头开始工作
return true;
}
catch
{ } break;
case : //网络摄像头
break;
case :
break;
}
return false;
}
}
}
【实时获取图像】
CaptureManage cm = new CaptureManage();
//capture = new Emgu.CV.Capture();
//capture.Start();//摄像头开始工作
capture = (Emgu.CV.Capture)cm.returnCapture();
capture.ImageGrabbed += frameProcess;//实时获取图像
【加载和人脸识别有关的XML】
//faceClassifier = new CascadeClassifier("haarcascade_frontalface_default.xml");
faceClassifier = new CascadeClassifier("haarcascade_frontalface_default.xml");
SetTrainedFaceRecognizer(FaceRecognizerType.EigenFaceRecognizer);//设置识别器
【训练人脸识别器】
public TrainedFaceRecognizer SetTrainedFaceRecognizer(FaceRecognizerType type)
{
tfr = new TrainedFaceRecognizer();
tfr.trainedFileList = SetSampleFacesList(); switch (type)
{
case FaceRecognizerType.EigenFaceRecognizer:
tfr.faceRecognizer = new Emgu.CV.Face.EigenFaceRecognizer(, double.PositiveInfinity);//PositiveInfinity double.NegativeInfinity break;
case FaceRecognizerType.FisherFaceRecognizer:
tfr.faceRecognizer = new Emgu.CV.Face.FisherFaceRecognizer(, );
break;
case FaceRecognizerType.LBPHFaceRecognizer:
tfr.faceRecognizer = new Emgu.CV.Face.LBPHFaceRecognizer(, , , , );
break;
}
tfr.faceRecognizer.Train(tfr.trainedFileList.trainedImages.ToArray(), tfr.trainedFileList.trainedLabelOrder.ToArray());
return tfr;
}
【识别出人脸矩形框】
public faceDetectedObj GetFaceRectangle(Mat emguImage)
{
faceDetectedObj fdo = new faceDetectedObj();
fdo.originalImg = emguImage;
List<Rectangle> faces = new List<Rectangle>();
//List<Rectangle> eyes = new List<Rectangle>();
try
{
using (UMat ugray = new UMat())
{
CvInvoke.CvtColor(emguImage, ugray, Emgu.CV.CvEnum.ColorConversion.Bgr2Gray);//灰度化图片
CvInvoke.EqualizeHist(ugray, ugray);//均衡化灰度图片 Rectangle[] facesDetected = faceClassifier.DetectMultiScale(ugray, 1.1, , new Size(, ));
//Rectangle[] eyesDetected = eyesClassifier.DetectMultiScale(ugray, 1.1, 3, new Size(100, 100));
faces.AddRange(facesDetected); //向list集合的末尾添加
//eyes.AddRange(eyesDetected);
}
}
catch (Exception ex)
{
ex.ToString();
}
fdo.facesRectangle = faces; return fdo;
}
【给识别出的所有人脸画圈】
public faceDetectedObj faceRecognize(Mat emguImage)
{
faceDetectedObj fdo;
try
{ fdo = GetFaceRectangle(emguImage);
Image<Gray, byte> tempImg = fdo.originalImg.ToImage<Gray, byte>(); using (Graphics g = Graphics.FromImage(fdo.originalImg.Bitmap))
{
// camoareTwoImage(Emgu.CV.Image<Bgr,byte>[] img1,Emgu.CV.Image<Bgr,byte> img2);
// camoareTwoImage(fdo.facesRectangle,emguImage.ToImage<Bgr,byte>);
foreach (Rectangle face in fdo.facesRectangle)
{
g.DrawArc(new Pen(Color.Blue, ), face,,);//画圆
Image<Gray, byte> GrayFace = tempImg.Copy(face).Resize(, , Emgu.CV.CvEnum.Inter.Cubic);
GrayFace._EqualizeHist();//得到均衡化人脸的灰度图像 Emgu.CV.Face.FaceRecognizer.PredictionResult pr = tfr.faceRecognizer.Predict(GrayFace);//返回预测图像的标签 double db = pr.Distance;//.CompareTo(pr.Distance);//返回相似度 string recogniseName = tfr.trainedFileList.trainedFileName[pr.Label].ToString();
//FaceRecognizer
string name = tfr.trainedFileList.trainedFileName[pr.Label].ToString();
//pr.GetType();
if (db > || pr.Label == -)
{
name = "不认识";
} //画出姓名
//camoareTwoImage(GrayFace.MIplImage<Bgr,byte>, fdo.originalImg.ToImage<Bgr, byte>);
else
{ Font font = new Font("楷体", , GraphicsUnit.Pixel);
SolidBrush fontLine = new SolidBrush(Color.Red);
float xPos = face.X + (face.Width / - (name.Length * ) / );
float yPos = face.Y - ;
g.DrawString(name + "_" + pr.Label + "[" + db + "]", font, fontLine, xPos, yPos);
//MessageBox.Show("返回的Pr为:"+db);
//Console.WriteLine("db的值为==》》》》"+db); }
fdo.names.Add(name);
}
}
}
finally
{
//emguImage.Dispose();
} return fdo;
}
4、识别效果见下图:

5、以上代码并非全部是我敲的,参照【http://blog.csdn.net/u011616825/article/details/51620061】。
Emgu cv人脸检测识别的更多相关文章
- [Winform]基于Emgu.CV人脸识别
摘要 “OpenCV是一个开源的计算机视觉库.OpenCV采用C/C++语言编写,可以运行在Linux/Windows/Mac等操作系统上.OpenCV还提供了Python.Ruby.MATLAB以及 ...
- Python学习案例之视频人脸检测识别
前言 上一篇博文与大家分享了简单的图片人脸识别技术,其实在实际应用中,很多是通过视频流的方式进行识别,比如人脸识别通道门禁考勤系统.人脸动态跟踪识别系统等等. 案例 这里我们还是使用 opencv 中 ...
- Python学习案例之人脸检测识别
前言 随着科技的发展,人脸识别技术在许多领域得到的非常广泛的应用,手机支付.银行身份验证.手机人脸解锁等等. 识别 废话少说,这里我们使用 opencv 中自带了 haar人脸特征分类器,利用训练好的 ...
- 基于AdaBoost算法——世纪晟结合Haar-like特征训练人脸检测识别
AdaBoost 算法是一种快速人脸检测算法,它将根据弱学习的反馈,适应性地调整假设的错误率,使在效率不降低的情况下,检测正确率得到了很大的提高. 系统在技术上的三个贡献: 1.用简单的Haa ...
- MTCNN人脸检测识别笔记
论文:Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks 论文链接:https:// ...
- Python视频人脸检测识别
案例 这里我们还是使用 opencv 中自带了 haar人脸特征分类器,通过读取一段视频来识别其中的人脸. 代码实现: 动图有点花,讲究着看吧: 如果是捕捉摄像头,只需要改变以下代码即可: c ...
- 人脸检测识别,人脸检测,人脸识别,离线检测,C#源码
百度网盘地址 微云地址 使用虹软人工智能开放平台技术开发完成
- 【转载】opencv实现人脸检测
全文转载自CSDN的博客(不知道怎么将CSDN的博客转到博客园,应该没这功能吧,所以直接复制全文了),转载地址如下 http://blog.csdn.net/lsq2902101015/article ...
- MTCNN人脸检测 附完整C++代码
人脸检测 识别一直是图像算法领域一个主流话题. 前年 SeetaFace 开源了人脸识别引擎,一度成为热门话题. 虽然后来SeetaFace 又放出来 2.0版本,但是,我说但是... 没有训练代码, ...
随机推荐
- dlopen failed: empty/missing DT_HASH in "libx.so" (built with --hash-style=gnu?)
崩溃日志内容: java.lang.UnsatisfiedLinkError: dlopen failed: empty/missing DT_HASH in "libxxxx.so&quo ...
- PDF.NET支持最新的SQLite数据库
最近项目中用到了SQLite,之前项目中用的是PDF.NET+MySQL的组合,已经写了不少代码,如果能把写好的代码直接用在SQLite上就好了,PDF.NET支持大部分主流的数据库,这个当然可以,只 ...
- Oracle学习(十二):存储过程/存储函数
1.知识点 --第一个存储过程 /* 打印Hello World create [or replace] PROCEDURE 过程名(參数列表) AS PLSQL子程序体: 调用存储过程: 1. ex ...
- 在Android系统中修改Android.mk使其同时编译rgb2565和rgb2888(向out/host/linux-x86/bin/下新增加一个工具命令)【转】
本文转载自:http://blog.csdn.net/mu0206mu/article/details/7514559 在Android系统中修改android.mk使其同时编译rgb2565和rgb ...
- Node.js:Web 模块
ylbtech-Node.js:Web 模块 1.返回顶部 1. Node.js Web 模块 什么是 Web 服务器? Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,Web服 ...
- Ubuntu下安装sublime text3并汉化
转载请注明出处:果冻栋吖 通过ppa安装,打开终端,输入以下命令: sudo add-apt-repository ppa:webupd8team/sublime-text- sudo apt-get ...
- Python的filter与map内置函数
简单的记录下这两个函数的功能: list(filter(lambda x : x % 2, range(10))) 上例是返回了0-10之间的所有基数组成的列表.filter()有2个参数,第一个参数 ...
- QlikSense系列(3)——QlikSense建立数据模型
QlikSense管理数据在帮助中写的比较清楚 https://help.qlik.com/zh-CN/sense/3.1/Subsystems/Hub/Content/LoadData/load-d ...
- vue-router 原理解析
“更新视图但不重新请求页面”是前端路由原理的核心之一,
- 自定义安装MS Office Project2007会出错
作者:朱金灿 来源:http://blog.csdn.net/clever101 今天使用虚拟光驱文件自定义安装MSOffice Project2007,如下图: 然后总是出现一个错误: 从网上找来一 ...