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版本,但是,我说但是... 没有训练代码, ...
随机推荐
- CodeForces 453A 概率题
Description Twilight Sparkle was playing Ludo with her friends Rainbow Dash, Apple Jack and Flutter ...
- HDU 2717
Catch That Cow Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- 站点搭建从零開始(七) WordPress站点的完好
1.WordPress站点前后端经常使用语言简单介绍和执行过程 通常一个站点的整个构建过程中须要大量的技术支持,尤其是用到非常多种计算机语言.站点的构建主要分后端和前端两部分,后端代码在server上 ...
- 字符串函数---strcmp()与strncmp()详解及实现【转】
本文转载自:http://blog.csdn.net/lanzhihui_10086/article/details/39829623 一.strcmp()与strncmp() strcmp():st ...
- CodeForces 486B
Let's define logical OR as an operation on two logical values (i. e. values that belong to the set { ...
- 【SCOI 2005】 骑士精神
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1085 [算法] IDA* [代码] #include<bits/stdc++. ...
- NEU操作系统实验课4——线程同步
实验要求: 创建两个线程按数字顺序打印10以下自然数,其中一个线程打印1-3及8-10:另一个线程打印4-6.要求使用线程同步机制实现上述打印顺序. 看网上的资料学习了两种写法 C++11的,使用了s ...
- 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出来了,如果想使用最新版本,赶紧升级下 ...
- A - I Wanna Be the Guy
Problem description There is a game called "I Wanna Be the Guy", consisting of n levels. L ...
- 4、Collection接口功能测试(所有的All方法)
package cn.itcast_01; import java.util.ArrayList; import java.util.Collection; /* * 所有带All的方法:(听完就忘) ...