C#EmguCV:无法预测 - System.AccessViolationException

时间:2017-12-12 08:36:40

标签: c# opencv emgucv

我正在使用网络摄像头进行人脸识别。每次检测到面部时,系统将连续处理数据。我正在使用EmguCV,一个OpenCV包装器。代码正在运行并且能够处理数据。但有一次,系统在执行System.AccessViolationException函数时抛出Emgu.CV.Face.FaceRecognizer.Predict(IInputArray image)异常,并且  它总是停在那里。

以下是导致问题的代码的一部分:

public void recognizeUser(Bitmap userImage, out string label, out int confidentLevel)
{
      Image<Gray, byte> imgToRecognize = new Image<Gray, byte>(userImage).Resize(100, 100, Emgu.CV.CvEnum.Inter.Cubic);
      Image<Gray, byte> grayFrame = imgToRecognize.Convert<Gray, byte>().Resize(100, 100, Emgu.CV.CvEnum.Inter.Cubic);                

      var lbphResult = _lbphRecognizer.Predict(imgToRecognize); // Exception occurs here.

      label = lbphResult.Label.ToString();
      confidentLevel = (int)lbphResult.Distance;
}

这是我得到的错误:

  

System.AccessViolationException :'尝试读取或写入受保护的内存。这通常表明其他内存已损坏。'

这是堆栈跟踪:

at Emgu.CV.ContribInvoke.CvFaceRecognizerPredict(IntPtr recognizer, IntPtr image, Int32& label, Double& distance)
at Emgu.CV.Face.FaceRecognizer.Predict(IInputArray image)

这是一种错误还是我错过了什么?或者是因为有这么多数据被同时处理?任何帮助将不胜感激。

2017年12月19日更新:以下是我捕获数据的方式:

private void PerformDetection()
{
    while (true)
    {
        DetectionResult[] detectionResult = detection.DoDetection(detectionEngineId); // Capture the face

        foreach (var detResult in detectionResult)
        {
            string label = "0";
            int confidentLevel = 0;

            lock (detResult)
            {
                if (!IsTrainRecognition)
                {
                    Bitmap imgToRecognize = (Bitmap)detResult.FaceImage.Clone();
                    _recognition.recognizeUser(imgToRecognize, out label, out confidentLevel); // Call the function above.
                    if (confidentLevel < 40)
                    {
                        IsTrainRecognition = true;
                        // Start training new face.
                    }
                }
                else
                {
                    // Keep training until 10 image are trained and updated in YAML file.
                }

                // Saving the detection data in local database.
            }
        }
    }
}

0 个答案:

没有答案