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. CodeForces 453A 概率题

    Description Twilight Sparkle was playing Ludo with her friends Rainbow Dash, Apple Jack and Flutter ...

  2. HDU 2717

    Catch That Cow Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  3. 站点搭建从零開始(七) WordPress站点的完好

    1.WordPress站点前后端经常使用语言简单介绍和执行过程 通常一个站点的整个构建过程中须要大量的技术支持,尤其是用到非常多种计算机语言.站点的构建主要分后端和前端两部分,后端代码在server上 ...

  4. 字符串函数---strcmp()与strncmp()详解及实现【转】

    本文转载自:http://blog.csdn.net/lanzhihui_10086/article/details/39829623 一.strcmp()与strncmp() strcmp():st ...

  5. CodeForces 486B

    Let's define logical OR as an operation on two logical values (i. e. values that belong to the set { ...

  6. 【SCOI 2005】 骑士精神

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1085 [算法] IDA* [代码] #include<bits/stdc++. ...

  7. NEU操作系统实验课4——线程同步

    实验要求: 创建两个线程按数字顺序打印10以下自然数,其中一个线程打印1-3及8-10:另一个线程打印4-6.要求使用线程同步机制实现上述打印顺序. 看网上的资料学习了两种写法 C++11的,使用了s ...

  8. Mac OS X10.9安装的Python2.7升级Python3.4步骤详解

    Mac OS X10.9安装的Python2.7升级Python3.4步骤详解 Mac OS X10.9默认带了Python2.7,不过现在Python3.4.0出来了,如果想使用最新版本,赶紧升级下 ...

  9. A - I Wanna Be the Guy

    Problem description There is a game called "I Wanna Be the Guy", consisting of n levels. L ...

  10. 4、Collection接口功能测试(所有的All方法)

    package cn.itcast_01; import java.util.ArrayList; import java.util.Collection; /* * 所有带All的方法:(听完就忘) ...