实例介绍
【实例简介】
【实例截图】
【文件目录】
├─人脸识别
│ └─FaceDetect
│ │ FaceDetect.sln
│ │
│ └─FaceDetect
│ │ Emgu.CV.dll
│ │ Emgu.CV.ML.dll
│ │ Emgu.CV.UI.dll
│ │ Emgu.Util.dll
│ │ FaceDetect.csproj
│ │ FaceDetect.csproj.user
│ │ haarcascade_eye.xml
│ │ haarcascade_frontalface_alt_tree.xml
│ │ Mainframe.cs
│ │ Mainframe.Designer.cs
│ │ Mainframe.resx
│ │ Program.cs
│ │ ZedGraph.dll
│ │
│ ├─bin
│ │ ├─Debug
│ │ │ Emgu.CV.dll
│ │ │ Emgu.CV.ML.dll
│ │ │ Emgu.CV.UI.dll
│ │ │ Emgu.Util.dll
│ │ │ FaceSimilarity.exe
│ │ │ FaceSimilarity.pdb
│ │ │ FaceSimilarity.vshost.exe
│ │ │ haarcascade_eye.xml
│ │ │ haarcascade_frontalface_alt_tree.xml
│ │ │ ZedGraph.dll
│ │ │
│ │ └─x86
│ │ └─Debug
│ │ Emgu.CV.dll
│ │ Emgu.CV.ML.dll
│ │ Emgu.CV.ML.xml
│ │ Emgu.CV.UI.dll
│ │ Emgu.CV.UI.xml
│ │ Emgu.CV.xml
│ │ Emgu.Util.dll
│ │ Emgu.Util.xml
│ │ FaceSimilarity.exe
│ │ FaceSimilarity.pdb
│ │ FaceSimilarity.vshost.exe
│ │ haarcascade_eye.xml
│ │ haarcascade_frontalface_alt_tree.xml
│ │ ZedGraph.dll
│ │
│ ├─obj
│ │ │ FaceDetect.csproj.FileListAbsolute.txt
│ │ │ FaceSimilarity.csproj.FileListAbsolute.txt
│ │ │
│ │ ├─Debug
│ │ │ │ FaceDetect.csproj.GenerateResource.Cache
│ │ │ │ FaceSimilarity.csproj.GenerateResource.Cache
│ │ │ │ FaceSimilarity.exe
│ │ │ │ FaceSimilarity.Mainframe.resources
│ │ │ │ FaceSimilarity.pdb
│ │ │ │ FaceSimilarity.Properties.Resources.resources
│ │ │ │ ResolveAssemblyReference.cache
│ │ │ │
│ │ │ ├─Refactor
│ │ │ └─TempPE
│ │ └─x86
│ │ └─Debug
│ │ │ FaceSimilarity.csproj.GenerateResource.Cache
│ │ │ FaceSimilarity.exe
│ │ │ FaceSimilarity.Mainframe.resources
│ │ │ FaceSimilarity.pdb
│ │ │ FaceSimilarity.Properties.Resources.resources
│ │ │ ResolveAssemblyReference.cache
│ │ │
│ │ ├─Refactor
│ │ └─TempPE
│ └─Properties
│ AssemblyInfo.cs
│ Resources.Designer.cs
│ Resources.resx
│ Settings.Designer.cs
│ Settings.settings
│
└─训练库
haarcascade_eye.xml
haarcascade_frontalface_alt_tree.xml
【核心代码】
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Text;
using System.Windows.Forms;
using Emgu.CV;
using Emgu.CV.UI;
using Emgu.Util;
using Emgu.CV.Structure;
using System.Drawing;
using System.Collections;
using System.IO;
namespace FaceSimilarity
{
public partial class Mainframe : Form
{
public Mainframe()
{
InitializeComponent();
}
// variables
private string haarXmlPath = @"haarcascade_frontalface_alt_tree.xml";
private Image<Bgr, byte> currentImage;
// components
// - webcam
private Capture webcam;
private bool cameraInUse = false;
// list of faces history
List<PictureBox> faceHistory = new List<PictureBox>();
// - face detection
private HaarCascade haar;
// show message in status bar
private void showMessage(string msg)
{
resultText.Text = msg;
resultText.Update();
}
// initiate webcam
private void initiateWebCam(int index)
{
if (webcam != null)
return;
try
{
showMessage("Initializing WebCam #" index "...");
webcam = new Capture(index);
showMessage("WebCam #" index " initialized.");
startButton.Enabled = true;
}
catch (Exception ex)
{
MessageBox.Show("Failed to load webcam!");
Console.WriteLine("WEBCAM:" ex.Message);
startButton.Enabled = false;
}
}
// initiate HaarCascade obj.
private void initiateHaar(string fileName)
{
if (haar != null)
return;
showMessage("Loading HaarCascade data...");
haar = new HaarCascade(fileName);
showMessage("HaarCascade data loaded.");
}
// analyze one frame
private MCvAvgComp[] getFaces(Image<Bgr, byte> img, HaarCascade haar)
{
if (haar == null || img == null)
return null;
MCvAvgComp[] faces = haar.Detect(img.Convert<Gray, byte>(), 1.4, 1, Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, new Size(20, 20));
if (faces != null)
{
resultText.Text = string.Format("Found {0} face(s).", faces.Length);
}
return faces;
}
// mark faces
private void markFaces(MCvAvgComp[] faces)
{
foreach (MCvAvgComp face in faces)
{
currentImage.Draw(face.rect, new Bgr(Color.Lime), 2);
PictureBox pic = new PictureBox();
pic.Image = currentImage.Copy(face.rect).ToBitmap();
pic.Width = pic.Image.Width;
pic.Height = pic.Image.Height;
faceHistory.Add(pic);
}
imageBox.Image = currentImage;
flowPanel.Controls.Clear();
flowPanel.Controls.AddRange(faceHistory.ToArray());
if (faceHistory.Count > 0)
flowPanel.ScrollControlIntoView(faceHistory[faceHistory.Count - 1]);
}
// process camera
private void processCamera(object sender, EventArgs e)
{
currentImage = webcam.QueryFrame();
currentImage = currentImage.Flip(Emgu.CV.CvEnum.FLIP.HORIZONTAL);
//currentImage = currentImage.Resize(imageBox.Width, imageBox.Height, Emgu.CV.CvEnum.INTER.CV_INTER_NN);
imageBox.Image = currentImage;
}
// process faces
private void processFaces(object sender, EventArgs arg)
{
markFaces(getFaces(currentImage, haar));
}
// first load form
private void Mainframe_Activated(object sender, EventArgs e)
{
initiateHaar(haarXmlPath);
initiateWebCam(0);
}
// start/stop
private void startButton_Click(object sender, EventArgs e)
{
if (webcam == null)
return;
destGroupBox.Text = "Real-time Camera";
if (cameraInUse)
{
showMessage("Stopped.");
Application.Idle -= new EventHandler(processCamera);
timer1.Tick -= new EventHandler(processFaces);
startButton.Text = "Start";
}
else
{
showMessage("Start capture...");
Application.Idle = new EventHandler(processCamera);
timer1.Tick = new EventHandler(processFaces);
startButton.Text = "Stop";
}
cameraInUse = !cameraInUse;
}
// open a pic & analyze
private void openButton_Click(object sender, EventArgs e)
{
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
destGroupBox.Text = "Picture: " Path.GetFileName(openFileDialog.FileName);
currentImage = new Image<Bgr, byte>(openFileDialog.FileName);
imageBox.Image = currentImage;
processFaces(null, null);
}
}
// clear history
private void clearButton_Click(object sender, EventArgs e)
{
flowPanel.Controls.Clear();
faceHistory.Clear();
}
}
}
好例子网口号:伸出你的我的手 — 分享!
网友评论
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


支持(0) 盖楼(回复)
支持(0) 盖楼(回复)