2015-10-04 16 views
0

我使用Emgu.cv進行人臉識別應用程序。它在數據庫中存儲面部圖像並在識別之後告訴圖像的名稱。我的問題是它沒有告訴未知的人,但它會自動匹配來自數據庫的最相關的人臉並告訴錯誤的名字。如何將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; 
    } 

回答

0

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

,它有助於

添加到您的識別形式

希望