Введение
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() |
Настройка цвета, толщины и радиуса рисуемых точек. |
Пример: обнаружение рук
Формат координат
Особенность | Описание |
---|---|
.landmark[x] |
Доступ к точке: имеет x , y , z в относительных координатах (от 0 до 1). |
normalized_landmark.x * image_width |
Преобразование относительных координат в пиксели. |
results.multi_hand_landmarks |
Список рук, где каждая содержит 21 точку. |
Установка
Примеры модулей и задач
Модуль | Возможности |
---|---|
Hands |
Жесты, счёт пальцев, управление интерфейсом. |
FaceMesh |
Трекинг выражений, маски, AR-фильтры. |
Pose |
Распознавание поз, фитнес-трекинг, скелетная анимация. |
Holistic |
Комплексный анализ всего тела. |
Selfie Segmentation |
Удаление/замена фона. |
Face Detection |
Обнаружение лица (быстрее, но менее детально). |
Заключение
MediaPipe
— одна из самых мощных и простых в использовании библиотек для трекинга в реальном времени. Она позволяет разрабатывать приложения с компьютерным зрением уровня Google всего за несколько строк кода. Благодаря высокой точности, скорости и кроссплатформенности, MediaPipe
становится отличным инструментом для разработки проектов в сфере AR/VR, анализа движений и взаимодействия человек-компьютер.