Я пытаюсь создать приложение для распознавания лиц, используя Emgu.CV в C #.Я сам создал функцию видеопотока, но импортировал класс ImageRecognition из https://michaelreeves.us/pages/LaserSystem.html. Я изменил код ImageRecognition, чтобы удалить ошибки, однако я получаю сообщение об ошибке:
Нет перегрузки для метода 'DetectMultiScale'принимает 4 аргумента
независимо от того, что я пытаюсь.Какие аргументы я должен использовать вместо метода?
Вот код:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using Emgu.CV;
using Emgu.CV.Structure;
using Emgu.CV.Cuda;
namespace VladsEye2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private VideoCapture capture;
private bool captureInProgress;
private void ProcessFrame(object sender, EventArgs arg)
{
Image<Bgr, Byte> ImageFrame = capture.QueryFrame().ToImage<Bgr, Byte>();
CamImageBox.Image = ImageFrame;
}
private void Form1_Load(object sender, EventArgs e)
{
if(capture == null)
{
try
{
capture = new VideoCapture();
}
catch(NullReferenceException except)
{
MessageBox.Show(except.Message);
}
}
if (capture != null)
{
if (captureInProgress)
{
Application.Idle -= ProcessFrame;
}
else
{
Application.Idle += ProcessFrame;
}
captureInProgress = !captureInProgress;
}
timer1.Start();
}
public static class ImageRecognition
{
private static List<PointF> facePositions = new List<PointF>();
public static CudaCascadeClassifier classifier = new CudaCascadeClassifier(@"haarcascade_frontalface_default.xml");
public static Image<Bgr, byte> detectFace(Image<Bgr, byte> image, out List<PointF> positions)
{
Image<Bgr, byte> copyImage = new Image<Bgr, byte>(image.Bitmap);
facePositions.Clear();
using (CudaImage<Bgr, Byte> gpuImage = new CudaImage<Bgr, byte>(image))
using (CudaImage<Gray, Byte> gpuGray = gpuImage.Convert<Gray, Byte>())
{
foreach (Rectangle face in (IEnumerable<Rectangle>)classifier.DetectMultiScale(gpuGray, 1.2, 10, Size.Empty))
{
copyImage.Draw(face, new Bgr(Color.Red), 4);
facePositions.Add(new PointF(face.Location.X + (face.Width / 2), face.Location.Y + (face.Height / 2)));
}
positions = facePositions;
}
return copyImage;
}
}
}
}