Mediapipe – отслеживание лиц, рук и позы

онлайн тренер по питону
Онлайн-тренажер Python 3 для начинающих

Теория без воды. Задачи с автоматической проверкой. Подсказки на русском языке. Работает в любом современном браузере.

начать бесплатно

Введение

MediaPipe — это мощная библиотека от Google, предназначенная для построения мультимодальных ML-пайплайнов. Она предоставляет готовые решения для компьютерного зрения в реальном времени: отслеживание рук, распознавание лиц, детекция поз, жестов, объектов и многого другого. С помощью Python-обёртки вы можете легко интегрировать эти технологии в свои проекты, включая игры, управление жестами, дополненную реальность и анализ поведения.


Установка MediaPipe

pip install mediapipe opencv-python

Основные модули MediaPipe

Модуль Назначение
Hands Трекинг 21 ключевой точки руки
FaceMesh 468 точек на лице
Pose 33 точки человеческого тела
Holistic Объединённый трекинг лица, рук и тела
SelfieSegmentation Разделение переднего и заднего фона
Objectron 3D-обнаружение объектов

Работа с трекингом рук (Hands)

import cv2
import mediapipe as mp

mp_hands = mp.solutions.hands
hands = mp_hands.Hands()
mp_draw = mp.solutions.drawing_utils

cap = cv2.VideoCapture(0)

while cap.isOpened():
    success, frame = cap.read()
    frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    results = hands.process(frame_rgb)

    if results.multi_hand_landmarks:
        for hand_landmarks in results.multi_hand_landmarks:
            mp_draw.draw_landmarks(frame, hand_landmarks, mp_hands.HAND_CONNECTIONS)

    cv2.imshow("Hands", frame)
    if cv2.waitKey(1) & 0xFF == 27:
        break

Распознавание лица (FaceMesh)

mp_face = mp.solutions.face_mesh
face = mp_face.FaceMesh(static_image_mode=False)
  • 468 точек: глаза, брови, губы, нос и т.д.

  • Идеально подходит для фильтров, отслеживания эмоций и AR


Отслеживание позы (Pose)

mp_pose = mp.solutions.pose
pose = mp_pose.Pose()
  • 33 ключевые точки: суставы, плечи, колени, стопы

  • Применимо в фитнесе, физиотерапии, анализе движений


Объединённая модель (Holistic)

mp_holistic = mp.solutions.holistic
holistic = mp_holistic.Holistic()

Позволяет одновременно отслеживать:

  • 33 точки тела

  • 21 точку на каждой руке

  • 468 точек лица


Применение SelfieSegmentation

mp_selfie = mp.solutions.selfie_segmentation
segmenter = mp_selfie.SelfieSegmentation(model_selection=1)

Можно отделять человека от фона (замена фона, блюр и пр.).


Визуализация и отрисовка

mp_drawing.draw_landmarks(image, results.pose_landmarks, mp_pose.POSE_CONNECTIONS)

Настройка стиля отрисовки:

mp_drawing.DrawingSpec(color=(0,255,0), thickness=2, circle_radius=2)

Практические проекты с MediaPipe

  • Управление компьютером жестами

  • Захват эмоций и мимики в играх

  • Анализ позы при занятиях спортом

  • Замена фона в видеозвонках

  • Распознавание ASL/жестов


Частые ошибки

  • NoneType в results: объект не найден

  • Проблемы с камерой: убедитесь, что VideoCapture(0) работает

  • Отсутствие cv2.imshow() в некоторых окружениях (например, Google Colab)

Описание всех ключевых функций и модулей библиотеки MediaPipe для Python

Инициализация и структура

Компонент Описание
import mediapipe as mp Базовый импорт. Все подсистемы (руки, лицо, поза и т.д.) доступны как модули mp.solutions.
mp.solutions.<module> Подключение нужного детектора: hands, face_mesh, pose, selfie_segmentation, holistic и т.п.

Основные модули

Модуль Назначение
mp.solutions.hands Обнаружение и трекинг рук (21 точка).
mp.solutions.face_mesh Высокоточное определение 468 точек лица.
mp.solutions.pose Распознавание скелета тела (33 ключевых точки).
mp.solutions.holistic Комплексное решение (лицо + руки + тело).
mp.solutions.selfie_segmentation Сегментация человека от фона.
mp.solutions.face_detection Обнаружение лица (в отличие от face_mesh, только прямоугольник и ключевые точки).

Общие классы и методы

Элемент Описание
<Module>.Solution() Инициализация модели (Hands(), FaceMesh(), Pose() и др.).
.process(image) Основной метод обработки изображения (в формате RGB).
.results Результаты обработки (ключевые точки, уверенность и др.).
.draw_landmarks() Отображение точек и связей с помощью mp.solutions.drawing_utils.

Работа с изображением

Компонент Описание
cv2.cvtColor(image, cv2.COLOR_BGR2RGB) MediaPipe требует изображение в RGB.
drawing_utils.draw_landmarks(image, results, connections) Отрисовка точек на изображении.
mp_drawing.DrawingSpec() Настройка цвета, толщины и радиуса рисуемых точек.

Пример: обнаружение рук

python
import cv2 import mediapipe as mp mp_hands = mp.solutions.hands hands = mp_hands.Hands() mp_draw = mp.solutions.drawing_utils cap = cv2.VideoCapture(0) while True: ret, frame = cap.read() rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) results = hands.process(rgb) if results.multi_hand_landmarks: for hand_landmarks in results.multi_hand_landmarks: mp_draw.draw_landmarks(frame, hand_landmarks, mp_hands.HAND_CONNECTIONS) cv2.imshow("Hands", frame) if cv2.waitKey(1) & 0xFF == 27: break cap.release() cv2.destroyAllWindows()

Формат координат

Особенность Описание
.landmark[x] Доступ к точке: имеет x, y, z в относительных координатах (от 0 до 1).
normalized_landmark.x * image_width Преобразование относительных координат в пиксели.
results.multi_hand_landmarks Список рук, где каждая содержит 21 точку.

Установка

bash
pip install mediapipe opencv-python

Примеры модулей и задач

Модуль Возможности
Hands Жесты, счёт пальцев, управление интерфейсом.
FaceMesh Трекинг выражений, маски, AR-фильтры.
Pose Распознавание поз, фитнес-трекинг, скелетная анимация.
Holistic Комплексный анализ всего тела.
Selfie Segmentation Удаление/замена фона.
Face Detection Обнаружение лица (быстрее, но менее детально).

Заключение

MediaPipe — одна из самых мощных и простых в использовании библиотек для трекинга в реальном времени. Она позволяет разрабатывать приложения с компьютерным зрением уровня Google всего за несколько строк кода. Благодаря высокой точности, скорости и кроссплатформенности, MediaPipe становится отличным инструментом для разработки проектов в сфере AR/VR, анализа движений и взаимодействия человек-компьютер.