Я пытаюсь создать код, использующий сетку лица из 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
Отслеживание учеников с помощью MediaPipe ⇐ Python
Программы на Python
1732043582
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()
Подробнее здесь: [url]https://stackoverflow.com/questions/79103349/tracking-pupils-using-mediapipe[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия