基本信息
源码名称:人脸识别C#做的
源码大小:2.70M
文件格式:.zip
开发语言:C#
更新时间:2020-03-21
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):78630559
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
【文件目录】
├─人脸识别
│ └─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();
}
}
}