Точного значения достоверности нет, однако существует переменная шкала, которую можно использовать и грубо интерпретировать как таковую, которая является Собственным расстоянием.
Значение, которое классифицируется как хорошее совпадение, изменяется в зависимости от количества имеющихся у вас данных и параметров обучения, поэтому вам придется проверять значения с разными лицами, чтобы определить свой порог.
Вам нужно будет добавить функцию в класс Eigen, чтобы получить это значение.Сначала мы перезапишем используемый нами EigenObjectRecognizer.Это действительно просто - заархивируйте файл EigenObjectRecognizer.cs, он находится в установочном каталоге \ EMGU \ Emgu.CV, или где бы вы ни распаковали файлы, вы должны иметь возможность скрыть его, так как он находится в той же папке, что и папка bin со всемииспользуемые вами .dll.
Добавьте файл в проект, щелкнув правой кнопкой мыши имя проекта в обозревателе решений в Visual Studion и выбрав Добавить> Существующий элемент ... Перейдите к файлу и добавьте его.Ваш проект будет автоматически использовать это, а не тот, который содержится в EMGU.CV.dll в ваших ссылках.
Откройте EigenObjectRecognizer.cs прямо сейчас в вашем проекте, не волнуйтесь, это копия оригинала, поэтому любое внесенное вами изменение не повлияет на исходный источник.Чтобы начать с упрощения, удерживая Ctrl нажатой клавишу m, а затем клавишу o, это свернет все поля метода.
Для начала нам нужно перезаписать пространство имен, которое я назвал моим Emgu.Custom.
Теперь в верхней части кода добавьте следующую переменную под остальные
private float eigenDistance;
Добавьте следующий метод в класс,
/// <summary>
/// Get the calculated Eignen Distance for the last proceessed frame
/// </summary>
public float GetEignenDistance
{
get { return eigenDistance; }
}
Вы можете поместить этогде бы вы ни находились, но, очевидно, внутри класса и вне метода, теперь важная составляющая.Мы сделали eigenDistance глобальным, но он создается в частном порядке, когда мы вызываем метод .Recognize (Image image).
Найдите этот метод в EigenObjectRecognizer.cs и измените
float eigenDistance;
на
eigenDistance = -1;
Вы можете удалить с плавающей точкой eigenDistance;строка, но я хотел бы убедиться, что она перезаписана значением, которое я могу наблюдать за ошибкой, поскольку она всегда должна быть положительной, если распознавание применено правильно.Вы заметите, что следующий раздел кода содержит:
FindMostSimilarObject(image, out index, out eigenDistance, out label);
- index
- eigenDistance
- label
Все выходыдоступны для использования с небольшим дополнительным кодированием.
Нам не нужно указывать переменную распознавателя Eigen на запись:
Emgu.Custom.EigenObjectRecognizer recognizer;
Теперь мы можем получить EigenDistance с помощью этого вызова функции:
float EigenDistance = recognizer.GetEignenDistance;
Надеюсь, это прояснит ситуацию,
Приветствия,
Крис