посчитайте Зевок и перекатывание в позе головы Питона оценка MTCNN

#python #opencv #neural-network

Вопрос:

Я столкнулся с реализацией MTCNN сети,которая способна обнаруживать движение нашей головы по 3-м осям, называемым рысканием, креном и шагом.

Вот важнейшие элементы:

 bbox, points = detector.detect_faces(frame)
 

points
дает мне список ключевых точек из предустановки сети, таких как:

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

Функция рисования:

 def draw_landmarks(frame, bb, points):
    # draw rectangle and landmarks on face
    cv2.rectangle(frame,(int(bb[0]),int(bb[1])),(int(bb[2]),int(bb[3])),green,2)
    cv2.circle(frame, (points[0], points[5]), 2, (255,0,0), 2)# eye
    cv2.circle(frame, (points[1], points[6]), 2, (255,0,0), 2)
    cv2.circle(frame, (points[2], points[7]), 2, (255,0,0), 2)# nose
    cv2.circle(frame, (points[3], points[8]), 2, (255,0,0), 2)# mouth
    cv2.circle(frame, (points[4], points[9]), 2, (255,0,0), 2)
 

Теперь для обнаружения некоторого движения головы по другой оси были определены функции рыскания и крена.

 def Roll(points):
    return points[6] - points[5]

def Yaw(points):
    le2n = points[2] - points[0]
    re2n = points[1] - points[2]
    return le2n - re2n
 

Теперь, сказав, что:

"Roll is the rotation about the x axis (between -180 and 180 deg)
Yaw is the rotation about the z axis (between -180 and 180)."

Как именно здесь работает функция рыскания?
Github: https://github.com/fisakhan/Face_Pose/blob/master/pose_detection_mtcnn.py

Ответ №1:

Рыскание, крен и тангаж являются углами Эйлера — на изображении ниже показан более простой для понимания пример, важно отметить, что повороты не связаны с глобальной осью, а фактически связаны с осью объектов, поэтому о плоскости стоит подумать. Также существует несколько различных форматов углов Эйлера, чтобы лучше понять, посмотрите на вики

просмотрев ссылку на github, которую вы предоставили, я нашел следующее:

  1. точки содержат координаты различных черт лица в кадре, где:

    X=очки[0:5] Y=очки[5:10]

  2. они не измеряют эти углы в градусах:

Бросок: -от x до x (0 — фронтальный, положительный — по часовой стрелке, отрицательный-против часовой стрелки)

Рыскание: -от x до x (0-фронтальное, положительное смотрит вправо, отрицательное смотрит влево)

Шаг: от 0 до 4 (0 смотрит вверх, 1 смотрит прямо, >1 смотрит вниз)

  1. функция рыскания, крена и тангажа не возвращает угол наклона:

то, что возвращается Roll , — это координата Y левого глаза минус координата y правого глаза

Yaw по сути, вычисляется, к какому глазу ближе шум по оси x — когда вы поворачиваете голову, нос кажется ближе к одному глазу наблюдателя

  1. find_pose возможно, у вас есть то, что вы ищете, но мне нужно провести дальнейшее исследование того, что подразумевается под xfrontal и yfrontal — возможно, вам придется задать вопрос непосредственно человеку на github

http://www.chrobotics.com/library/understanding-euler-angles

Обновление: после того, как вы задали вопрос непосредственно разработчику, они ответили следующим:

Крен, рыскание и шаг указаны в пикселях и дают представление о том, куда смотрит лицо. В случае крена mtcnn (от -50 до 50), рыскание (от -100 до 100). Шаг от 0 до 4, потому что вы можете разделить расстояние между глазами и губами на 4 единицы, где одна единица находится между губами и кончиком носа, а 3 единицы-между кончиком носа и глазами.

Xfontal и Yfontal обеспечивают позу (только рыскание и шаг) с точки зрения углов (в градусах) вдоль оси X и Y соответственно. Эти значения получаются после компенсации крена (выравнивания обоих глаз по горизонтали).

https://github.com/fisakhan/Face_Pose/issues/2

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

1. Я не получаю диапазон высоты тона, который составляет от 0 до 4, почему это 4 как максимальное значение?

2. похоже, причина в том, что то, что он определил, похоже, что его проект предназначен для оценки позы, которую вы затем можете передать другим алгоритмам распознавания лиц, чтобы получить лучшее соответствие, в отличие от точного расчета

3. Репо, о котором вы упомянули, предоставляет два метода оценки крена, тангажа и рыскания. Первый метод вычисляет крен, тангаж и рыскание в пикселях по ориентирам/точкам mtcnn. Второй метод вычисляет крен, тангаж и рыскание в терминах ангелов (градусов). Второй метод реализован в функции find_pose (). X-Фронтальная и Y-фронтальная — это рыскание и высота тона. угол в функции find_pose () — это крен. Максимальное значение, которое вы можете получить для любого из них, составляет 90 градусов (грань профиля). Я автор этого репо.