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

Известныйпроект OpenPose сделал возможным многое.
Он также вдохновил на другие интересные проекты, такие как эта игра в позы
Быстрый всплеск вычислительной мощности мобильных устройств сделал возможным даже запуск оценки позы на них.

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

Но после того, как я потратил некоторое время на изучение Распознавания действий, мне кажется, что выполнить такую ​​операцию с приемлемой скоростью и точностью крайне сложно.
В своем блоге есть прекрасная статья, написанная Рохитом Гошем. действительно в Распознавании действий, я также рекомендую вам просмотреть этот список на Github.
Вскоре я понял, что распознавание действий на самом деле слишком мощное и ненужное.
В системе нет чтобы иметь возможность понимать, что пользователь только что сделал: отжимание, выпад или поворот туловища.
Что мне действительно нужно, так это просто:
Система, которая может определить движение пользователя, правильно или неправильно и показать пользователю, где он сделал что-то не так.

Помня об этом, я вскоре начал несколько проектов.
Сначала я записал набор данных, содержащий координаты ключевых точек и время захвата кадра (хранится как значение отношения от 0 до 1).
Набор данных каждого кадра был помечен, чтобы указать его производительность. (Хорошо или плохо)

Сначала я попробовал простую модель Sofmax.
В качестве входных данных рассматриваются 18 наборов (x, y) координат ключевых точек и значение отношения времени.
Результатом будет метка (хорошо или плохо).
К сожалению, обучение результат был совсем нехорошим.
Его точность никогда не превышала 50%.
Затем я попробовал SVM и K-nn и получил аналогичный результат.

Так что я наивно думаю, что это было вызвано отсутствием информации на входе.
В следующем проекте я использовал 18 ключевых точек и значение отношения времени текущего кадра, а также еще один набор из 18 ключевых точек и значение отношения времени из предыдущего кадра.< br /> Я попробовал этот ввод с помощью SVM, softmax и k-nn.
Все они с треском провалились.
Я даже попробовал странную нейронную сеть, содержащую 3 слоя полностью связанного слоя и один слой softmax.< br /> И это тоже не удалось.

Разочарованный предыдущими неудачами, я остановился и начал пересматривать свои подходы.
Что я сделал, так это попытался создать «Единую» модель, которая может проверить «все» временные позы упражнения.
Может быть, это слишком «умно». ” для меня.
Как насчет группы моделей, которые могут проверять временные позы определенных соотношений времени?

Это может показаться глупым, но вполне практично.
В отличие от спортивных и других сложных действий человека, упражнения имеют очень простую и регулярную схему движений.
На одних и тех же этапах упражнения позы должны быть совершенно одинаковыми, чтобы предотвратить травму и максимизировать результат.
Я установил временное окно каждого этапа на 0,2 секунды. Если общая продолжительность упражнения 4,0 секунды, у меня будет 20 этапов и, следовательно, 20 соответствующих моделей.
Опять же, создавать такое большое количество моделей звучит глупо.
Но поскольку я столько раз терпел неудачу, играя «умно», я хочу попробовать что-нибудь глупое в этот раз.

Новый набор данных был собран в соответствии с этой новой моделью.
Я попробовал это с softmax, и на этот раз ЭТО РАБОТАЕТ!
Вот два демонстрационных видео на YouTube:

Окно справа показывает движения пользователя в реальном времени, а окно слева показывает обработанный результат в замедленном темпе с меткой зеленого или красного цвета. Текстовый терминал в середине показывает общий результат каждой тренировки.

Первый без показа ключевых точек.

Второй с ключевыми точками, нарисованными на изображениях:

https://www.youtube.com/watch?v=TRLYHUn8yJ4

Я назвал эту систему NoNet, так как нейронной сети буквально НЕТ.
Во время теста она по-прежнему имеет приличную частоту кадров, ключевые точки, извлеченные Openpose, достаточно точны, а последующий процесс проверки выполняется в режиме реального времени.< br /> Компьютер, на котором я проводил этот тест, совсем не отличается высокими техническими характеристиками. он имеет:
IntelCore i5–4460 / 4 ГБ DDR3 / GeForce GT 720 /
Текущие мобильные устройства на рынке имеют эквивалентную или более высокую вычислительную мощность, чем этот старый ПК, что означает, что на нем можно запустить мобильные устройства.

Но в системе все еще есть некоторые проблемы.
Во-первых, точность каждой модели неодинакова, у некоторых 80%, а у некоторых выше 95%.
Это приведет к ложноположительным и отрицательным результатам, как показано в демонстрации.
Во-вторых, модель может работать только при определенных условиях (одинаковый размер человеческого тела, одинаковая перспектива и относительное расстояние между человеческим объектом и камерой)
Эти проблемы могут быть решены с помощью адекватные навыки компьютерного зрения, такие как аффинное преобразование.

Итак, это мой путь к проверке движения в реальном времени.
Должен признать, что это не имеет абсолютно никакой ценности для академических исследований, но я думаю, что эта система может помочь улучшить качество жизни человечества.
Если у вас есть мнение или идеи, как сделать его лучше, пожалуйста, оставьте мне комментарий.
Я благодарю вас за ваше время и усилия, чтобы прочитать мой первый пост на Medium.