无法从 emgucv 中的视频中检测到人脸

     2023-03-16     246

关键词:

【中文标题】无法从 emgucv 中的视频中检测到人脸【英文标题】:Not able to detect face from video in emgucv 【发布时间】:2018-10-15 01:59:00 【问题描述】:

通过在 C# 中使用 Emgucv,我能够从图像中检测人脸,但无法从视频中检测人脸。在我的解决方案中,视频正在播放,但未检测到人脸。

我的代码如下:

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);
            
        
    

提前致谢!!

【问题讨论】:

请描述您的具体孤立问题。你试过调试这个吗?有什么例外吗?您的算法是否按预期工作? 【参考方案1】:

首先,您必须为此过程创建一个事件,并且您需要获取视频的每一帧并检查每一帧以进行人脸检测。使用 VideoCapture 类中的 QueryFrame 方法,您可以将每个帧作为图像处理并检测人脸。

例子

    private VideoCapture m_videoCapture;

    public MainWindow()
    
        InitializeComponent();
        try
        
            m_videoCapture = new VideoCapture("controlcam.avi");
            Application.Idle += onProcessFrame;
        
        catch (NullReferenceException ex)
        
            MessageBox.Show(ex.Message);
        
    

    private void onProcessFrame(Object sender, EventArgs e)
    
        Image<Bgr, Byte> frameImage = m_videoCapture.QueryFrame().ToImage<Bgr, Byte>();

        // Call your function or write your code here.
        DetectFaceHaar(frameImage);
    

    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);
        
    

【讨论】:

EMgucv 保存从网络摄像头检测到的多张人脸

】EMgucv保存从网络摄像头检测到的多张人脸【英文标题】:EMgucvsavemultiplefacedetectedfromwebcam【发布时间】:2017-12-2220:39:35【问题描述】:我有一个窗口应用程序,它将检测多张人脸并捕获人脸并保存为图像。我使用EMGUCV进行人脸... 查看详情

使用 Vision 框架跟踪本地视频中的人脸 [关闭]

】使用Vision框架跟踪本地视频中的人脸[关闭]【英文标题】:TrackfacesinLocalvideousingVisionframework[closed]【发布时间】:2017-12-0210:52:22【问题描述】:我正在尝试使用Vision框架检测本地录制视频中的人脸。提供的大多数示例都是在Livec... 查看详情

EMGU CV 2.4.9 人脸识别准确率问题

】EMGUCV2.4.9人脸识别准确率问题【英文标题】:EMGUCV2.4.9facerecognitionaccuracyissue【发布时间】:2018-01-1819:11:12【问题描述】:我已经按照代码项目中的示例代码使用EMGUCV创建了一个人脸识别系统。我已经用2个人训练了数据库,每个... 查看详情

iPhone上相机视频输入的人脸检测

】iPhone上相机视频输入的人脸检测【英文标题】:FaceDetectiononCameravideoinputoniPhone【发布时间】:2011-09-2410:20:10【问题描述】:我正在开展一个需要对摄像头视频输入(如安全摄像头)进行人脸检测的项目。我设法通过AVFoundation框... 查看详情

图像处理项目——人脸检测—视频(代码片段)

人脸检测 *开发环境为visualstudio2010*使用的是opencv中的Haart特征分类器,harrCascades*检测对象为视频中的人脸 一:主要步骤1.加载分类器,将人脸检测分类器和笑脸检测分类器放在项目目录中去2.调用detecMutiScale()函数检测,... 查看详情

如何从 face-api.js 中提取检测到的人脸

...face-api.js的Javascript库。当face-api检测到人脸时,我需要从视频帧中提取人脸。谁能帮我做那部分?constvideo=document.getElementById(\'video\ 查看详情

视频直播美颜sdk算法代码解析

...测美颜sdk中所用到的人脸检测技术指的是对视频中、图片中的人脸进行检测,并且准确定位人脸的位置。而人脸检测主要的技术难点在于,如何在特定光照条件,人脸姿态变化、人脸表情变化、遮挡等情况下,从... 查看详情

Firebase ML Kit 无法检测到人脸

】FirebaseMLKit无法检测到人脸【英文标题】:FirebaseMLKitdoesnotdetectfaces【发布时间】:2020-05-2304:46:40【问题描述】:我正在使用GoogleFirebase的MLKit来检测从手机摄像头拍摄的图像的面部轮廓。但是,它实际上并没有检测到任何人脸。... 查看详情

基于opencv的视频处理-人脸检测(代码片段)

...人脸检测拍摄影片检测人脸保存面孔和摘要视频输出运行中的管道作者有言基于OpenCV的视频处理-人脸检测目前可依靠模块化方式实现图像处理管道,检测一堆图像文件中的人脸,并将其与漂亮的结构化JSON摘要文件一起保... 查看详情

无法一次检测多个人脸

】无法一次检测多个人脸【英文标题】:Unabletodetectmultiplefacesatatime【发布时间】:2019-05-2303:01:14【问题描述】:由于某种原因,我无法一次检测到多张面孔。它一次只检测一张脸。我该如何解决这个问题?我在下面添加了代码... 查看详情

使用 emgucv (c#) 查找人脸的位置

】使用emgucv(c#)查找人脸的位置【英文标题】:Findingthepositionofafaceusingemgucv(c#)【发布时间】:2020-07-2603:08:18【问题描述】:我的代码能够检测到人脸,然后在它找到人脸的地方放置一个框,但我希望获得它放置的框的位置。任何... 查看详情

如何从漫画人脸中检测地标位置?

...目前为止,我已经尝试使用Python的dlib库来检测卡通面孔中的地标点。但是,它似乎不适用于真人以外的面部。是否有任何替代方案?任何有关面部对齐和地标检测的建 查看详情

MS 认知人脸 API:无法检测人脸

】MS认知人脸API:无法检测人脸【英文标题】:MSCognitiveFaceAPI:Unabletodetectfaces【发布时间】:2018-06-1919:13:51【问题描述】:我是第一次尝试使用MicrosoftCognitiveFaceAPI。文档提供了一种从内存流中检测人脸的非常简单的方法。我正在... 查看详情

从文件夹中读取所有图像并检测人脸,裁剪并保存到新文件夹

...正在尝试构建一个模型,在该模型中它将读取给定文件夹中的所有图像并检测面部,裁剪并将裁剪的面部保存到新文件夹!当我收到错误时,谁能帮我写代码:cv2.imshow(str(img),im 查看详情

使用opencv进行face_eyes检测和跟踪

...实时视频中的人脸和眼睛,但是当我倾斜我的脸时,算法无法检测到人脸,而且我还在网上看到如果人脸倾斜则无法检测到.所以我认为跟踪会很有帮助。 查看详情

从视频中聚类人脸

...我已经运行了opencv内置的人脸检测算法来提取视频每一帧中的人脸(以1fps采样)。我还将每个人脸图像的大小调整为相同大小,并裁剪了部分图像以去除背景噪音和头发。现在的问题是我必须对这些人脸图像进行聚类——每个... 查看详情

我无法用 camera2 检测到人脸

】我无法用camera2检测到人脸【英文标题】:Ican\'tdetectfacewithcamera2【发布时间】:2016-07-2604:48:25【问题描述】:我在android.hardware.Camera2的预览中找不到有关人脸检测的信息,有人可以帮我提供一个完整的示例吗?我在github中看到... 查看详情

如何在 android 中提高 OpenCV 人脸检测性能?

...正在开发一个android项目,在该项目中我使用OpenCV从图库中的所有图像中检测人脸。从图像中获取人脸的过程在服务中执行。服务持续工作,直到处理完所有图像。它将检测到的人脸存储在内部存储中,如果活动 查看详情