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

Posted

技术标签:

【中文标题】如何将 Emgu.cv 用于未知人员?【英文标题】:How to use Emgu.cv for Unknown Person? 【发布时间】:2016-01-01 12:08:15 【问题描述】:

我正在使用 Emgu.cv 进行人脸识别应用程序。它将人脸图像存储在数据库中,并在识别后告诉图片名称。我的问题是它不会告诉未知的人,但它会自动匹配数据库中最相关的人脸并告诉错误的名字。

我想为未知的人显示“未知”字符串。我使用了以下代码:

  public String Recognize(Image<Gray, Byte> image)
  
     int index;
     float eigenDistance;
     String label;
     FindMostSimilarObject(image, out index, out eigenDistance, out label);

     return (_eigenDistanceThreshold <= 0 || eigenDistance < _eigenDistanceThreshold )  ? _labels[index] : String.Empty;
  


  public EigenObjectRecognizer(Image<Gray, Byte>[] images, String[] labels, double eigenDistanceThreshold, ref MCvTermCriteria termCrit)
  
     Debug.Assert(images.Length == labels.Length, "The number of images should equals the number of labels");
     Debug.Assert(eigenDistanceThreshold >= 0.0, "Eigen-distance threshold should always >= 0.0");

     CalcEigenObjects(images, ref termCrit, out _eigenImages, out _avgImage);

     /*
     _avgImage.SerializationCompressionRatio = 9;

     foreach (Image<Gray, Single> img in _eigenImages)
         //Set the compression ration to best compression. The serialized object can therefore save spaces
         img.SerializationCompressionRatio = 9;
     */

     _eigenValues = Array.ConvertAll<Image<Gray, Byte>, Matrix<float>>(images,
         delegate(Image<Gray, Byte> img)
         
            return new Matrix<float>(EigenDecomposite(img, _eigenImages, _avgImage));
         );

     _labels = labels;

     _eigenDistanceThreshold = eigenDistanceThreshold;
  

【问题讨论】:

【参考方案1】:

EigenObjectRecognizer 返回一个String.Empty

       return (_eigenDistanceThreshold <= 0 || _eigenDistance < _eigenDistanceThreshold )  ? _labels[index] : String.Empty; // <--- this one

每当检测到身份不明的人时

为了表明这个人是“未知的”,当你试图检测和识别一个人时,你可以使用下面的代码

      ImageFrame.Draw(string.IsNullOrEmpty(name) ? "UNKNOWN" : name, ref font, new Point(f.rect.X - 2, f.rect.Y - 2), new Bgr(Color.Green));

将此添加到您的识别表中

希望对你有帮助

【讨论】:

以上是关于如何将 Emgu.cv 用于未知人员?的主要内容,如果未能解决你的问题,请参考以下文章

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

将“Emgu.CV.Image<Emgu.CV.Structure.Bgr,byte>”转换为“System.Drawing.Image”

如何将轮廓层次结构从 python openCV 转换为 emgu cv 以查找封闭轮廓

OpenCV和Emgu CV啥关系?

C#下用于同时使用OpenCvSharp和Emgu.CV两个库的相互转换库

OpenCV (Emgu.CV)——用 alpha 合成图像