2015-10-04 4 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)); 

Добавить это в вашу форму признания

надеюсь, что это поможет