Pose detection (распознавание позы человека) — это широко используемая задача компьютерного зрения, которая позволяет предсказывать позы людей на изображениях или видео, локализуя ключевые точки тела (суставы), также называемые ориентирами — локти, плечи, колени и т. д.
Оценка позы человека по видео играет решающую роль в решении различных задач:
— оценка техники безопасности;
— фитнес-приложения;
— анализ нестандартных ситуаций на производстве;
— распознавание жестов;
— автоматическое управление с помощью жестов и т. д.
В данной статье мы рассмотрим уже существующие решения, такие как MediaPipe, OpenPose и AlphaPose. Проведем сравнительный анализ производительности и оценку качества алгоритмов, и на самом эффективном из них реализуем несложный, но достаточно эффективный метод распознавания позы человека при занятии йогой [1].
Существующие решения
MediaPipe
MediaPipe Pose — это ML-решение (Machine Learning) для высокоточного отслеживания позы тела, определяющее 33 3D-ориентира (рис. 1), полученные на основе карт признаков, а также сегментационную карту фона из видеокадров RGB с использованием исследования под названием BlazePose, которое также поддерживает ML Kit Pose Detection API.
В решении используется двухступенчатый конвейер детектор-трекер ML (рис. 2). Используя детектор, конвейер сначала определяет местоположение интересующей области человека/позы (person/pose region-of-interest — ROI) в кадре, а затем трекер прогнозирует ориентиры позы (landmarks) и маску сегментации в пределах ROI, используя кадр с обрезкой ROI в качестве входных данных, в итоге получая сегментированное изображение [2].
Рис. 1. Ключевые точки тела в MediaPipe
Рис. 2. Алгоритм распознавания позы MediaPipe
OpenPose
OpenPose представляет собой одну из первых многопользовательских систем реального времени, позволяющую совместно определять ключевые точки человеческого тела, рук, лица и стоп (всего 135 ключевых точек) на отдельных изображениях.
Рис. 3. Алгоритм распознавания позы OpenPose
На первом этапе изображение передается через базовую сеть CNN для извлечения карт объектов, содержащихся в изображении (рис. 3). Здесь авторы использовали первые 10 слоев сети VGG-19. Затем карта объектов обрабатывается в многоступенчатом конвейере CNN для создания карт достоверности деталей (Part Confidence Maps) и поля сродства деталей (Part Affinity Field). На последнем шаге карты достоверности и поля сродства деталей, сгенерированные выше, обрабатываются алгоритмом жадного двудольного сопоставления (greedy bipartite matching algorithm) для получения поз для каждого человека на изображении [1].
AlphaPose
AlphaPose — это еще одна система определения позы человека в режиме реального времени для нескольких человек, состоящая из трех компонентов:
— Symmetric Spatial Transformer Network (SSTN);
— Parametric Pose Non-Maximum-Suppression (NMS);
— Pose-Guided Proposals Generator (PG).
Сначала берется ограничивающая рамка (bounding box) (рис. 4), полученная детектором обнаружения человека. Эти изображения в рамках затем подаются в модуль Symmetric STN (Spatial Transformer Network) + SPPE. На этом шаге генерируются предположение по позе. Также на рисунке 4 показан параллельный модуль SPPE. Этот модуль используется во время обучения, чтобы избежать локальных минимумов.
Рис. 4. Алгоритм распознавания позы AlphaPose
Обнаруженные позы также могут содержать множество избыточных обнаружений. Чтобы уменьшить их, авторы использовали parametric pose-NMS для устранения избыточных поз. Кроме того, чтобы дополнить обучающие выборки, авторы использовали Pose Guided Proposals Generator (PGPG) во время обучения [3].
Сравнительный анализ решений
Эксперимент будем проводить, задействуя GPU, на одном тестовом изображении (рис. 5), замеряя время и анализируя полученные данные [4, 5, 6].
Рис. 5. Тестовое изображение
Используемая операционная система: Manjaro Linux, GNOME 43.1. CPU: Intel® Core™ i5–8300H × 8. GPU: Mesa Intel® UHD Graphics 630 (CFL GT2)
Таблица 1
Сравнительный анализ решений
Решение |
Время работы, секунды |
Результат работы алгоритма |
MediaPipe |
0.311094 |
|
OpenPose |
4.617454 |
|
AlphaPose |
13.312542 |
|
Как видно из таблицы 1, все алгоритмы, с качественной точки зрения, справились с задачей почти одинаково отлично, чего нельзя сказать о временной составляющей: тут явным лидером является MediaPipe, превосходя конкурентов в десятки раз.
Таким образом, учитывая проделанные опыты, реализовывать исходный метод будем, используя MediaPipe.
Распознавание позы человека при занятии йогой
Если мы внимательно посмотрим на позы в йоге, то заметим, что между отдельными частями тела четко вырисовываются определенные углы. И правда, если взять, к примеру, позу воина (рис. 6), то легко заметить, что в локтях четко прослеживается угол в 180 градусов, в плечах — 90 градусов и так далее.
Тем самым, определив координаты ключевых точек тела с помощью MediaPipe, мы с легкостью можем найти и необходимые нам углы в разных частях тела. К примеру, чтобы найти углы в локтях, необходимо взять ключевые точки суставов — кисть, локоть и плечо, а затем, зная их координаты, посчитать угол. Таким образом можно найти любой из нужных нам углов.
Рис. 6. Углы в ключевых точках в позе воина
Найдя углы между отдельными частями тела, необходимо вогнать их в некоторые рамки, которые будут соответствовать определенным позам. Так, если брать все ту же позу воина, то угол в локте должен быть ни меньше, скажем, 165 и ни больше 195 градусов. Конечно, рамки могут варьироваться, однако четкого равенства быть не должно по понятным причинам.
В итоге, определив координаты ключевых точек, вычислив углы, сравних их с эталонными, мы можем, передав тестовое изображение, распознать, в какой позе находится человек (рис. 7).
Теперь перейдем к более сложной задаче — распознаванию позы человека в реальном времени: используя библиотеку OpenCV, подключаем веб-камеру и покадрово передаем изображение в MediaPipe, выводя полученные данные в реальном времени (рис. 8) [4].
Как видно, поза определяется корректно. Более того, замеряя среднее значение FPS (frames per second), получаем около 30 кадров в секунду, что является достаточно неплохим результатом.
Рис. 7. Распознавание позы человека на тестовых изображениях
Рис. 8. Распознавание позы человека в реальном времени
Выводы
Подводя итоги, следует сказать, что распознавание позы человека — одна из важнейших задач компьютерного зрения. Она является началом другой, более сложной задачи — Action Recognition (распознавание действий человека), которая, в свою очередь, решает проблемы более глобальные. Так, распознавание действий человека может быть полезно для отслеживания подозрительных или опасных действий, что, несомненно, может помочь федеральным службам в борьбе с преступностью.
Однако, даже на более «бытовом» уровне, распознавание позы человека автоматизирует множество повседневных задач, начиная от рассмотренной нами — распознавание позы в йоге, — заканчивая тем, что может быть использовано в приложениях, связанных с помощниками для людей с ограниченными возможностями.
Литература:
- Калина Д. А., Голованов Р. В., Воротнев Д. В. Алгоритм распознавания статических жестов руки на основе скелетизации // Вестник компьютерных и информационных технологий. 2020. Т. 17, № 5. С. 13–22. doi: 10.14489/vkit.2020.05.pp.013–022
- Camillo Lugaresi, Jiuqiang Tang, Hadon Nash, Chris McClanahan et al. MediaPipe: A Framework for Building Perception Pipelines // Cornell University. 2020. P. 5–7
- Hao-Shu Fang, Jiefeng Li, Hongyang Tang, Chao Xu, Haoyi Zhu. AlphaPose: Whole-Body Regional Multi-Person Pose Estimation and Tracking in Real-Time // Cornell University. 2022. P. 2–3
- MediaPipe Pose (2022). Available at: https://google.github.io/mediapipe/solutions/pose.html (accessed 19 December 2022), Python Solution API
- OpenPose (2022). Available at: https://github.com/CMU-Perceptual-Computing-Lab/openpose (accessed 19 December 2022), Getting Started
- AlphaPose (2022). Available at: https://github.com/MVIG-SJTU/AlphaPose (accessed 19 December 2022), Quick Start