实例介绍
【实例简介】
【实例截图】
【文件目录】
├─人脸识别 │ └─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) 盖楼(回复)