Emgu CV Capture IP 摄像头人脸检测问题

Posted

技术标签:

【中文标题】Emgu CV Capture IP 摄像头人脸检测问题【英文标题】:Issue with EmguCV Capture IP cam Face Detection 【发布时间】:2017-12-28 01:34:58 【问题描述】:

我正在使用 EmguCV 2.2.1.1150 连接网络摄像头工作正常,但是当我使用 RTSP 协议连接 IP 摄像头时只工作几分钟并引发异常,但使用网络摄像头不会引发异常。

我有这个代码:

private void btnDetectar_Click(object sender, EventArgs e)

    //grabber = new Capture(@"rtsp://user:pass@address:554/cam/realmonitor?channel=1&subtype=01?tcp"); // IP CAMERA
    grabber = new Capture(); // WEBCAM

    // Inicia la función FrameGrabber
    Application.Idle += new EventHandler(FrameGrabber);
    btnDetectar.Enabled = false;



void FrameGrabber(object sender, EventArgs e)

    try
    
        // Obtiene el "frame" actual del dispositivo de captura
        currentFrame = grabber.QueryFrame().Resize(704, 480, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC);

        // Se convierte a escala de grises
        Image<Gray, byte> gray = currentFrame.Convert<Gray, byte>();

        // Detector facial
        MCvAvgComp[][] facesDetected = gray.DetectHaarCascade(
              face,
              1.2,
              10,
              Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING,
              new Size(gray.Width / 6, gray.Height / 6));

        // Acción para cada elemento detectado
        foreach (MCvAvgComp faces in facesDetected[0])
        
            result = currentFrame.Copy(faces.rect).Convert<Gray, byte>().Resize(200, 200, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC);
            // dibuja rectangulo en rostro detectado                     
            currentFrame.Draw(faces.rect, new Bgr(Color.Red), 3);
        

        picUser.Image = currentFrame.ToBitmap();

    
    catch (Exception a)
    
        String timeStamp = DateTime.Now.ToString();
        MessageBox.Show(" Hora: " + timeStamp + "\n Error: " + a.Message + "\n Stacktrace: " + a.StackTrace + "\n", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    

为什么会这样?

【问题讨论】:

你认为异常的文本可能包含线索吗? 霍拉:21/07/2017 05:06:56 p。米。错误:对象引用未设置为对象的实例。 Stacktrace: en MultiFaceRec.FrmPrincipal.FrameGrabber(Object sender, EventArgs e) en c:\FaceRecProOV\MainForm.cs:linea 115(这一行“currentFrame = grabber.QueryFrame().Resize(704, 480, Emgu.CV.CvEnum .INTER.CV_INTER_CUBIC);" ) 好吧,从阅读/理解this问题开始。然后你要么解决它,要么你可以问一个定义更狭窄的问题。 仍然没有工作。但谢谢。 【参考方案1】:

好吧,我必须将 Emgu CV 2.2.1.1150 更新到 3.0.0.2157,只能使用 Emgu CV 版本。

【讨论】:

以上是关于Emgu CV Capture IP 摄像头人脸检测问题的主要内容,如果未能解决你的问题,请参考以下文章

如何调用emgu cv的capture类创建变量

图像数据访问和图像匹配中的 C# 和 EMgu CV

如何在人脸识别 Emgu CV 上检测未知人脸

Emgu CV 人脸识别:在多个文件上并行运行 DetectHaarCascade 问题

利用Emgu.CV实现人脸识别详解 (C#)--附源码

如何将 Emgu.cv 用于未知人员?