Отслеживание учеников с помощью MediaPipePython

Программы на Python
Ответить
Anonymous
 Отслеживание учеников с помощью MediaPipe

Сообщение Anonymous »

Я пытаюсь создать код, использующий сетку лица из MediaPipe и отслеживающий зрачки.
Однако я получаю сообщение об ошибке следующего содержания:
Traceback (последний вызов — последний):
Файл «c:\Users\since\Desktop\coding mediapipe\mainy2.py», строка 29, в
left_pupil = face_landmarks.landmark[LEFT_PUPIL_LANDMARK]
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ ^^^^^
IndexError: индекс списка выходит за пределы диапазона

Я ожидал, что CV2 откроет камеру и покажет отслеживание зрачка.
Однако это привело к ошибке, указанной ранее.
Вот код, который я написал, вместе с несколькими комментариями:
import cv2
import mediapipe as mp

mp_face_mesh = mp.solutions.face_mesh
face_mesh = mp_face_mesh.FaceMesh(max_num_faces=1)

LEFT_PUPIL_LANDMARK = 468
RIGHT_PUPIL_LANDMARK = 473

capture = cv2.VideoCapture(0)

while capture.isOpened():
ret, frame = capture.read()
if not ret:
break

frame = cv2.flip(frame, 1)
rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) #RGB frame for the face mesh because Mediapipe expects RGB and not BGR

results = face_mesh.process(rgb_frame)

if results.multi_face_landmarks: # Checking if any face landmarks were detected via Webcam
for i in results.multi_face_landmarks: # i can be renamed to face_landmarks. Loops through each detected face, in this case the maximum number of faces is 1

left_pupil = i.landmark[LEFT_PUPIL_LANDMARK] # Creates variable name, goes through the face_landmarks group to landmark our other variables that have the FaceMesh IDs
right_pupil = i.landmark[RIGHT_PUPIL_LANDMARK]

##########################################################

h, w, _ = frame.shape # Takes the height and width of the frame. _ represents the # of color channels
left_pupil_x = int(left_pupil.x * w) # This is done because Mediapipe uses x,y,z values between 0,1 and OpenCV expects pixel coordinates in order to display the face_mesh correctly and accurately.
left_pupil_y = int(left_pupil.y * h)
right_pupil_x = int(right_pupil.x * w)
right_pupil_y = int(right_pupil.y * h)

cv2.circle(frame, (left_pupil_x, left_pupil_y), 5, (0, 255, 0), -1)
cv2.circle(frame, (right_pupil_x, right_pupil_y), 5, (0, 255, 0), -1)

cv2.imshow("Eye Tracking", frame)

if cv2.waitKey(1) & 0xFF == ord('q'):
break

capture.release()
cv2.destroyAllWindows()


Подробнее здесь: https://stackoverflow.com/questions/791 ... -mediapipe
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»