نحوه تشخیص صورت در سی شارپ با استفاده از هوش مصنوعی و EMGU.CV
سلام دوستان
در این آموزش قصد داریم دور صورت های درون تصویر وب کم مربع بکشیم
یک پروژه از نوع windows forms بسازید و به صورت زیر دیزاین کنید
حالا باید کل پکیج های زیر را نصب کنید
بریم سراغ کد نویسی
اول از همه دو متغیر پابلیک در بالای صفحه ایجاد کنید
FilterInfoCollection filter;
VideoCaptureDevice device;
در رویداد فرم لود کد زیر را قرار دهید
private void Form1_Load(object sender, EventArgs e)
{
filter = new FilterInfoCollection(FilterCategory.VideoInputDevice);
foreach (FilterInfo device in filter)
cboDevice.Items.Add(device.Name);
cboDevice.SelectedIndex = 0;
device = new VideoCaptureDevice();
}
حالا به لینک زیر بروید
github.com/opencv/opencv/tree/master/data/haarcascades
و فایلی با نام زیر را پیدا کرده و دانلود کنید
haarcascade_frontalface_alt_tree.xml
کد زیر را هم به بالای صفحه خود به عنوان یک متغییر پابلیک اضافه کنید
static readonly CascadeClassifier cascadeClassifier = new CascadeClassifier("haarcascade_frontalface_alt_tree.xml");
کد زیر را به دکمه Detect اضافه کنید
private void btnDetect_Click(object sender, EventArgs e)
{
device = new VideoCaptureDevice(filter[cboDevice.SelectedIndex].MonikerString);
device.NewFrame += Device_NewFrame;
device.Start();
}
حالا باید رویداد NewFrame را اضافه کنید
private void Device_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
Bitmap bitmap = (Bitmap)eventArgs.Frame.Clone();
Image<Bgr, byte> grayImage = new Image<Bgr, byte>(bitmap);
Rectangle[] rectangles = cascadeClassifier.DetectMultiScale(grayImage, 1.2, 1);
foreach (Rectangle rectangle in rectangles)
{
using (Graphics graphics = Graphics.FromImage(bitmap))
{
using (Pen pen = new Pen(Color.Red, 1))
{
graphics.DrawRectangle(pen, rectangle);
}
}
}
pic.Image = bitmap;
}
و در رویداد form closing کد زیر را اضافه کنید تا هنگام بسته شدن فرم device وب کم خاموش شود
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (device.IsRunning)
device.Stop();
}
پایان.