Каковы некоторые лучшие аргументы для функции CudaCascadeClassifier.DetectMultiScale в Emgu.CV? - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь создать приложение для распознавания лиц, используя 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;
            }
        }
    }
}
...