Все мы любим спорт и хоть раз в жизни хотим пройти профессиональную подготовку у тренеров. Не всем по карману такие гонорары тренеров. Итак, мы пришли к следующей идее.

В каждом виде спорта основное внимание уделяется углам спортсмена, какими должны быть углы между руками и ногами при выполнении той или иной деятельности. Итак, как это будет, если мы сможем определить ракурсы на видео или фото во время выполнения конкретной деятельности, и эти ракурсы мы сможем отправить тренерам, и они смогут указать спортсмену на его ошибку, и это поможет ему улучшиться.

Для применения вышеупомянутой идеи нам сначала нужно идентифицировать человека, а затем нам нужно идентифицировать руку и ноги, а затем мы можем найти углы между ними.

Наборы данных

Прежде всего, для реализации любого проекта глубокого обучения или машинного обучения нам требуется набор данных. Для оценки позы человека у нас есть много наборов данных, которые широко используются всеми, некоторые из них:

  1. COCO Keypoints Challenge
  2. Набор данных позы человека в формате MPII
  3. Набор данных позы VGG

Модель COCO дает 18 ключевых точек, а модель MPII — 15 ключевых точек. Выходные данные, нанесенные на человека, показаны на изображении ниже. Эти точки генерируются, когда набор данных обрабатывается и тщательно обучается с помощью CNN.

Ключевые моменты

Из приведенного выше обсуждения у вас должен возникнуть вопрос: Что такое ключевые точки и почему нам нужны ключевые точки?

Таким образом, ключевые точки — это пространственные местоположения или точки на изображении. Для оценки позы человека основными ключевыми точками являются суставы нашего тела (например, лодыжки, плечи, колени и т. д.).

Как работает определение позы?

Предварительная обработка

Как я уже говорил выше, нам сначала нужно идентифицировать человека, чтобы идентифицировать человека, который мы используем ниже, методы, которые называются предварительной обработкой.

  • Удаление фона: нам нужно применить эту технику, потому что на фоне любого изображения или видео будет шум, или для отделения человека от фона.
  • Создание ограничительной рамки: нам нужна ограничительная рамка, чтобы отличать одного человека от другого, и мы можем легко определить, в какой области нам нужно работать. С помощью этого мы уменьшаем дальность поиска признаков объекта и тем самым экономим вычислительные ресурсы.

Подход "снизу вверх": подход "снизу вверх" включает в себя сначала обнаружение частей или суставов одного или нескольких людей на изображении, а затем сборку частей вместе и связывание их с конкретным человеком.
Проще говоря, алгоритм сначала предсказывает все части тела/суставы, присутствующие на изображении. Обычно за этим следует составление графика на основе модели тела, который соединяет суставы, принадлежащие одному и тому же человеку. Двумя распространенными методами создания этого графа являются целочисленное линейное программирование (ILP) или двудольное сопоставление.

Подход "сверху вниз":подход "сверху вниз" включает этап сегментации в начале, когда каждый человек сначала сегментируется в ограничивающую рамку, после чего оценка позы выполняется индивидуально для каждой ограничивающей рамки.
Оценка позы сверху вниз может быть разделена на подходы, основанные на генеративной модели тела и на основе глубокого обучения. Подход, основанный на генеративной модели тела, включает в себя попытку подогнать модель тела к изображению, что позволяет окончательному прогнозу быть похожим на человека. Подход, основанный на глубоком обучении, напрямую прогнозирует расположение суставов, поэтому окончательный прогноз не гарантирует, что он будет похож на человеческий.

Теперь давайте посмотрим на некоторые реализации нашей работы.

Выполнение

Во-первых, мы вставили прото-файл и файл весов. Итак, теперь у вас наверняка возникнет вопрос Что такое прото-файл и что такое файл весов? Файл Proto содержит сведения о слое CNN и информацию о нем для набора данных, который вы использовали. Где в файле Weights есть начальные веса для CNN.

elif MODE is "MPI":
    protoFile = r"D:\IDA\PROJECT\Video_Image_Pose\mpi\pose_deploy_linevec.prototxt"
    weightsFile = r"D:\IDA\PROJECT\Video_Image_Pose\mpi\pose_iter_160000.caffemodel"

После вышеуказанной части для части обнаружения мы должны преобразовать фрейм в blob. Итак, теперь у вас снова возникнет вопрос, что такое блоб? BLOB означает большие двоичные объекты. Неформально клякса — это область изображения, в которой некоторые свойства, такие как интенсивность или цвет, приблизительно постоянны. Мы часто используем здесь термин «связанный».

Теперь об отслеживании модели. После того, как изображение передано модели, прогнозы можно сделать с помощью одной строки кода. Метод forward для класса DNN в OpenCV выполняет прямой проход по сети, что является еще одним способом сказать, что он делает прогноз.

вывод = net.forward()

На выходе будет сгенерирована 4D-матрица:

  1. Первым параметром является идентификатор изображения (если вы передаете в сеть более одного изображения).
  2. Второе измерение указывает индекс ключевой точки.
  3. Третье измерение — это высота выходной карты.
  4. Четвертое измерение — это ширина выходной карты.

После завершения обратного прохода система имеет 2D-карту достоверности, содержащую предсказанные глобальные максимумы на изображении целевой части тела.

Теперь, когда у нас есть расположение точек, нам просто нужно нанести их на изображение. Итак, осталось нарисовать скелет предсказания позы. который будет выглядеть как видео, которое я разместил выше.

Вы можете найти полный исходный код в моем репозитории Github.

https://github.com/Japan199/Athlete-Pose-Detection-using-openCV-and-deep-learning

Надеюсь, вы нашли информацию полезной :)