Обзор
Оценка позы человека может быть достигнута с помощью подхода на основе скелета, который определяет ключевые точки, такие как колени, локти и плечи, а также связи между ними на изображениях или видео. Я создал этот побочный проект, чтобы поэкспериментировать с предварительно обученными моделями компьютерного зрения на Raspberry Pi с Intel Neural Compute Stick. Приложение выполняет двухмерную оценку позы человека для нескольких человек и обнаружение человека в видеопотоках с использованием модели оценки позы человека и модели обнаружения человека, развернутых с помощью набора инструментов OpenVINO.
Модель оценки позы определяет до 18 точек: уши, глаза, нос, шея, плечи, локти, запястья, бедра, колени и лодыжки. Результаты оценки позы и предсказания обнаружения человека отображаются в приложении в режиме реального времени на видео с камеры или предварительно записанном видео. В дополнение к оценке позы на видео накладываются время вывода, количество людей в видео и порядок вывода для каждого человека.
Люди, входящие и выходящие из видеопотока, сохраняются в базе данных как серия событий, доступ к которым можно получить через JSON API. Приложение можно запустить на ЦП, графическом процессоре или Intel Neural Compute Stick 2 через командную строку или веб-приложение на основе Flask. Веб-интерфейс позволяет конечным пользователям переключаться между трансляцией с камеры в режиме реального времени и предварительно записанным демо-видео. Приложение можно развернуть на Raspberry Pi с камерой и Intel Neural Compute Stick 2, чтобы ускорить время логического вывода, или запустить на обычном настольном или портативном компьютере.
Код
Код доступен на https://github.com/pahurlocker/pose-estimation с инструкциями о том, как запустить его локально или на Raspberry Pi с Intel Neural Compute Stick. Ключевые библиотеки в приложении включают OpenCV, Numpy, OpenVINO Inference Engine, Flask, SqlAlchemy и Click. Обнаружение человека и оценка позы выполняются в классе PoseEstimator, показанном ниже. Оценка выполняется для каждого кадра видео с использованием двух разных моделей. OpenCV используется для управления кадром и выполнения наложений.
Развертывание оборудования: Raspberry Pi и Intel Neural Compute Stick 2
Я развернул приложение на Raspberry Pi с Intel Neural Compute Stick 2. Вывод выполнялся с некоторым мерцанием, вероятно, из-за того, что к каждому кадру применялись две модели, несмотря на ускорение, обеспечиваемое вычислительным стиком.
Видео ниже представляет собой снимок экрана приложения, работающего с тремя людьми. Оценка позы работает очень хорошо, но обнаружение людей иногда затруднено, особенно когда они стоят близко друг к другу. Как я уже упоминал ранее, в видео есть небольшая, но заметная задержка.
Модели глубокого обучения
Модель обнаружения позы человека представляет собой сеть оценки 2D-позы нескольких человек, которая использует настроенный MobileNetV1 в качестве экстрактора признаков. Модель основана на подходе OpenPose и изначально была построена с использованием фреймворка Caffe. OpenPose — первая модель в реальном времени, которая совместно обнаруживает несколько частей тела. Модель имеет два выхода: PAF и тепловую карту ключевых точек. Координаты на тепловой карте масштабируются и используются для наложения позы кадр за кадром.
Модель обнаружения человека разработана для обнаружения пешеходов в розничной торговле. Он основан на магистральной сети, подобной MobileNetV2, которая включает свертки по глубине (один фильтр свертки на входной канал) для сокращения вычислений для блока свертки 3x3. Он также изначально был построен с использованием фреймворка Caffe. Модель выводит достоверность прогноза и координат ограничивающей рамки. Приложение считает любой результат выше значения достоверности 0,4 как человека.
Заключение
Надеюсь, вам понравится играть с этим приложением! Это был интересный способ поэкспериментировать с этими моделями на Raspberry Pi. Репозиторий кода содержит инструкции по его запуску через командную строку или веб-интерфейс https://github.com/pahurlocker/pose-estimation.