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人脸检测识别的更多相关文章

  1. [Winform]基于Emgu.CV人脸识别

    摘要 “OpenCV是一个开源的计算机视觉库.OpenCV采用C/C++语言编写,可以运行在Linux/Windows/Mac等操作系统上.OpenCV还提供了Python.Ruby.MATLAB以及 ...

  2. Python学习案例之视频人脸检测识别

    前言 上一篇博文与大家分享了简单的图片人脸识别技术,其实在实际应用中,很多是通过视频流的方式进行识别,比如人脸识别通道门禁考勤系统.人脸动态跟踪识别系统等等. 案例 这里我们还是使用 opencv 中 ...

  3. Python学习案例之人脸检测识别

    前言 随着科技的发展,人脸识别技术在许多领域得到的非常广泛的应用,手机支付.银行身份验证.手机人脸解锁等等. 识别 废话少说,这里我们使用 opencv 中自带了 haar人脸特征分类器,利用训练好的 ...

  4. 基于AdaBoost算法——世纪晟结合Haar-like特征训练人脸检测识别

      AdaBoost 算法是一种快速人脸检测算法,它将根据弱学习的反馈,适应性地调整假设的错误率,使在效率不降低的情况下,检测正确率得到了很大的提高.   系统在技术上的三个贡献: 1.用简单的Haa ...

  5. MTCNN人脸检测识别笔记

    论文:Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks 论文链接:https:// ...

  6. Python视频人脸检测识别

    案例 这里我们还是使用 opencv 中自带了 haar人脸特征分类器,通过读取一段视频来识别其中的人脸. 代码实现:   动图有点花,讲究着看吧:   如果是捕捉摄像头,只需要改变以下代码即可: c ...

  7. 人脸检测识别,人脸检测,人脸识别,离线检测,C#源码

    百度网盘地址 微云地址 使用虹软人工智能开放平台技术开发完成

  8. 【转载】opencv实现人脸检测

    全文转载自CSDN的博客(不知道怎么将CSDN的博客转到博客园,应该没这功能吧,所以直接复制全文了),转载地址如下 http://blog.csdn.net/lsq2902101015/article ...

  9. MTCNN人脸检测 附完整C++代码

    人脸检测 识别一直是图像算法领域一个主流话题. 前年 SeetaFace 开源了人脸识别引擎,一度成为热门话题. 虽然后来SeetaFace 又放出来 2.0版本,但是,我说但是... 没有训练代码, ...

随机推荐

  1. MVVM设计模式基础知识--ICommand接口

    命令是 Windows Presentation Foundation (WPF) 中的输入机制,它提供的输入处理比设备输入具有更高的语义级别. 命令有若干用途: 第一个用途是将语义以及调用命令的对象 ...

  2. 【Java】基本类型和引用类型(值传递)

    [关键词] [问题] · 加深对基本类型和引用类型的理解: [效果图] [分析] 參见最后的[參考资料] [解决方式] [代码] public void test() throws Exception ...

  3. Python面向切面编程-语法层面和functools模块

    1,Python语法层面对面向切面编程的支持(方法名装饰后改变为log) __author__ = 'Administrator' import time def log(func): def wra ...

  4. Narrow Art Gallery

    Time Limit: 4000ms, Special Time Limit:10000ms, Memory Limit:65536KB Total submit users: 11, Accepte ...

  5. CefSharp 设置cookie

    设置cookie var cookieManager = CefSharp.Cef.GetGlobalCookieManager(); await cookieManager.SetCookieAsy ...

  6. 基于Dynamic Proxy技术的方法AOP拦截器开发

    在面向对象编程中,会用到大量的类,并且会多次调用类中的方法.有时可能需要对这些方法的调用进行一些控制.如在权限管理中,一些用户没有执行某些方法的权限.又如在日志系统中,在某个方法执行完后,将其执行的结 ...

  7. 学习笔记:javascript中的Generator函数

    最近在学习redux-saga,由于redux-saga需要使用Generator函数,所以下来就回顾了一下Generator Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为 ...

  8. 修改Visual Studio2010的主题颜色

    第一步:打开工具->扩展管理器 第二步:搜素visual studio color theme editor 第三步:找到Visual Studio Color Theme Editor 第四步 ...

  9. java8-3-LambdaMapReduce例子

    public class LambdaMapReduce { private static List<User> users = Arrays.asList( new User(1, &q ...

  10. 修改数组数据头和尾push()、pop()和unshift()、shift()

    1.push().pop()和unshift().shift() 这两组同为对数组的操作,并且会改变数组的本身的长度及内容. 不同的是 push().pop() 是从数组的尾部进行增减,unshift ...