Мне удалось обнаружить лицо по изображениям, но не удалось обнаружить лицо по видео с помощью Emgucv в C #. В моем решении видео воспроизводится, но не распознает лица.
Мой код указан ниже:
namespace Emgucv33Apps
{
public partial class FormFaceDetection : Form
{
VideoCapture capture;
bool Pause = false;
// Image<Bgr, byte> imgInput;
public FormFaceDetection()
{
InitializeComponent();
}
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == DialogResult.OK)
{
capture = new VideoCapture(ofd.FileName);
Mat m = new Mat();
capture.Read(m);
pictureBox1.Image = m.Bitmap;
}
}
private void DetectFaceHaar(Image<Bgr, byte> img)
{
try
{
string facePath = Path.GetFullPath(@"../../data/haarcascade_frontalface_default.xml");
string eyePath = Path.GetFullPath(@"../../data/haarcascade_eye.xml");
CascadeClassifier classifierFace = new CascadeClassifier(facePath);
CascadeClassifier classifierEye = new CascadeClassifier(eyePath);
var imgGray = img.Convert<Gray, byte>().Clone();
Rectangle[] faces = classifierFace.DetectMultiScale(imgGray, 1.1, 4);
foreach (var face in faces)
{
img.Draw(face, new Bgr(0, 0, 255), 2);
imgGray.ROI = face;
Rectangle[]eyes= classifierEye.DetectMultiScale(imgGray, 1.1, 4);
foreach (var eye in eyes)
{
var e = eye;
e.X += face.X;
e.Y += face.Y;
img.Draw(e, new Bgr(0, 255, 0), 2);
}
}
pictureBox1.Image = img.Bitmap;
pictureBox2.Image = img.Bitmap;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
private async void pauseToolStripMenuItem_Click(object sender, EventArgs e)
{
if (capture == null)
{
return;
}
try
{
while (true)
{
Mat m = new Mat();
capture.Read(m);
if (!m.IsEmpty)
{
pictureBox1.Image = m.Bitmap;
DetectFaceHaar(m.ToImage<Bgr, byte>());
double fps = capture.GetCaptureProperty(Emgu.CV.CvEnum.CapProp.Fps);
await Task.Delay(1000 / Convert.ToInt32(fps));
}
else
{
break;
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
Заранее спасибо !!