Определение того, перевернуто ли лицо вверх ногами с помощью Dlib.Net(FaceRecognition.Net)

#c# #.net #face-detection #dlib

Вопрос:

В основном я пытаюсь проверить, перевернуто ли лицо на изображении, используя эту библиотеку https://github.com/takuya-takeuchi/FaceRecognitionDotNet. Возьмите пример изображения ниже

введите описание изображения здесь

Это изображение, которое успешно распознается с помощью распознавания лиц.Сетевая библиотека.Изображение перевернуто вверх ногами.Я отметил все ориентиры лица на изображении синими эллипсами.

Это тот подход, которому я следую

  // Finding faceparts
var faceparts = dparameters._FaceRecognition.FaceLandmark(dparameters.FCImage);

// Drawing Ellipses over all points got from faceparts

foreach(var facepart in faceparts) {
  foreach(var mypoint in facepart.Values) {
    foreach(var x in mypoint) {
      tempg.DrawEllipse(Pens.Blue, x.Point.X, x.Point.Y, 2, 2);
    }
  }
}
 

Теперь я проверяю, поворачивается ли изображение, сравнивая максимальные координаты Y губ и окуляров

 var temp = faceparts.FirstOrDefault();
IEnumerable < FacePoint > lippoints;
temp.TryGetValue(FacePart.BottomLip, out lippoints);

IEnumerable < FacePoint > eyepoints;
temp.TryGetValue(FacePart.LeftEye, out eyepoints);

var lippoint = lippoints.Max(r => r.Point.Y);
var topeyepoint = eyepoints.Max(r => r.Point.Y);
if (lippoint > topeyepoint) {
  bool isinverted = true;
} else {
  bool isinverted = false;
}
 

Проблема в том, что даже когда изображение не перевернуто, координата глаза меньше, чем координата лица.Это связано с тем, что на изображении обнаружено ложное лицо, как показано на рисунке.Как преодолеть эту проблему?

Ответ №1:

Похоже, что эта библиотека не обеспечивает достоверности результатов. В противном случае я бы посоветовал попробовать как ввод, так и его перевернутую копию и взять ту, которая более надежна, прежде чем выполнять проверку «глаза поверх рта».

Так что, может быть, что может помочь, так это:

  • используя модель CNN, в оригинальной библиотеке она называется
 face_locations = face_recognition.face_locations(image, number_of_times_to_upsample=0, model="cnn")
 

в порту C# это должно быть

 _FaceRecognition.FaceLocations(image, 0, Model.Cnn)
 

Это должно дать вам более точную ограничивающую рамку для лица, которую вы затем сможете сравнить с ограничительной рамкой ориентиров. Если вы сделаете то же самое для перевернутой копии изображения, вы можете «подражать» уверенности, о которой я упоминал ранее, и принять ориентацию, в которой поля лучше совпадают. Затем вы можете определить ориентацию с помощью теста «глаза поверх рта».

  • насколько я заметил, библиотека не предоставляет предварительно обученных данных, поэтому для того, чтобы использовать Cnn модель, вам нужно обучить ее самостоятельно. Выбор набора данных для обучения, конечно, очень важен. Если вы уже провели обучение, больше/лучшие данные обучения могут повысить точность.

Комментарии:

1. Я попробовал эту CNN Модель. Но использование этой модели приводит к сбою библиотеки. Вы пробовали это сделать ?

2. Нет, я этого не делал, извини, что не могу с этим помочь.