В течение последних недель я работал над системой, которая может помочь анализировать эмоциональное состояние людей, глядя на их позы, выражения лиц и их речевые сигналы. В серии из двух статей я рассмотрю методы и наборы инструментов, которые используются для создания подобной системы. В первом посте серии мы рассмотрим часть компьютерного зрения. Это включает в себя распознавание позы тела и мимики.
Отказ от ответственности: я никоим образом не утверждаю, что эта система безупречна. Это просто доказательство концепции, в которой исследуются текущие возможности алгоритмов машинного обучения, которые на данный момент считаются «стандартами» в этой области.
Введение в проект
Первоначальная идея этого проекта заключалась в создании системы, которая могла бы помочь людям подготовиться к собеседованию при приеме на работу. Поскольку язык тела считается важнейшим фактором в нашем общении, интересно получить работающую систему, которая может анализировать вашу позу и давать некоторую обратную связь по этому поводу в течение определенного периода времени (например, в течение всего собеседования). Если вам интересно почитать язык тела и получить несколько советов о том, как улучшить свой язык, я бы посоветовал эту статью.
Помимо положения тела, которое принимает человек, выражение его лица также многое говорит о том, как он себя чувствует. Имея систему, которая может распознавать выражения лица, а также позы тела, мы стремимся создать продукт, распознающий более конкретные эмоции.
Распознавание осанки: продуманные подходы
Нейронные сети
Для распознавания позы тела были рассмотрены разные подходы. Классификатор, основанный на сверточной нейронной сети (CNN), казался возможным решением. Сети CNN доказали очень высокую точность распознавания объектов на изображениях (поскольку мы работаем с видео, мы можем рассматривать каждый кадр видео как изображение). Идея заключалась в том, что различные позы тела будут рассматриваться как «объекты», которые система должна распознавать и различать. Однако здесь была загвоздка ... Обучение CNN требует огромных объемов данных. Хорошего набора данных, который соответствовал бы потребностям этого проекта, не удалось найти после нескольких интенсивных сеансов работы с Google, поэтому мы подумали о создании собственного набора данных, в котором разные позы «действовали» разными людьми.
Из некоторых моих предыдущих работ я выяснил, что действующие наборы данных - это не лучший вариант. Как правило, используемые наборы данных не отражают тонких, но важных функций, которые могли бы содержаться в реальных данных. Это означало, что мы поместили идею использования CNN в морозильную камеру 🥶❄️.
Система на основе правил
Одним из методов, для которого не требовался большой набор данных и который казался разумным кандидатом, была система, основанная на правилах. Дополнительное примечание: системы на основе правил были популярным методом в области ИИ, но были побеждены увлечением машинным обучением, которое возникло в последние годы.
Распознавание осанки: реализованный подход
Чтобы реализовать основанную на правилах систему, которая может распознавать позы тела, используется набор инструментов PoseNet. Этот набор инструментов основан на платформе TensorFlow-Lite, которая позволяет обрабатывать данные в реальном времени на легких устройствах (например, смартфонах). Используя легкие устройства, систему можно использовать практически в любой среде. Однако он имеет некоторые недостатки, о которых мы поговорим позже. Правила в нашей системе основаны на положении различных суставов тела человека, которое появляется в камере.
Как видно из изображения выше, PoseNet может извлекать в общей сложности 17 различных суставов. В свою очередь, расположение каждого сустава (координаты x и y) сохраняются в памяти для каждого нового кадра. То, как мы это делаем, показано в следующем блоке кода:
Изначально в этом проекте мы хотели узнать как минимум 4 различные позы тела. А именно; открытый, закрытый, расслабленный и контролируемый. Для каждой позы мы проверяли, как расположены суставы и есть ли между ними связь. Затем мы представили наши выводы в виде правил, которые можно было запрограммировать в системе.
В течение всего сеанса работы камеры / веб-камеры мы подсчитываем количество времени, в течение которого человек принимает определенную позу. Делая это, мы можем дать пользователю представление о впечатлении, которое он передает своему окружению.
Выражение лица: реализованный подход
Поскольку методы распознавания позы тела используют tf-js, в идеале система выражения лица также будет использовать tf-js. Это для создания хорошей согласованной системы.
К счастью для нас, есть face-api. Это api, созданный для tf-js, который позволяет обнаруживать лица, распознавать лица, определять ориентиры лица и даже готовую функцию для классификации выражений лиц в реальном времени.
Модель face-api для распознавания выражений лица использует разделимые по глубине свертки и плотно связанные блоки. Несмотря на то, что у разделимых сверток есть свои ограничения, они могут быть очень мощными. Одним из основных преимуществ является то, что они позволяют выполнять вычисления намного быстрее. Чтобы подробнее узнать, что такое (по глубине) разделяемые свертки, я предлагаю эту статью.
Актуальные вопросы
Одним из недостатков использования легких устройств является невозможность измерения глубины. Камера глубины, такая как Kinect, может различать людей, которые держат руки перед собой или держат руки за их телом. Обычные камеры не могут этого сделать, хотя для этого есть решение с машинным обучением (здесь).
Согласно разным источникам, это действительно имеет значение, когда мы строго следим за языком тела. Первая позиция, руки скрещены перед телом, означает, что человек закрывается от окружающей среды. Напротив, когда человек держит руки за спиной, он, как правило, занимает больше места, имеет прямые плечи и вперед грудь. Обычно это считается доминирующей позой.
Краткий обзор PoseNet и его реализаций:
Поскольку язык тела считается важнейшим элементом человеческого общения, в наших интересах иметь возможность анализировать и классифицировать различные позы тела.
Чтобы фиксировать и различать различные позы тела, которые принимают люди, применяется система, основанная на правилах.
PoseNet - это технология, используемая для настройки системы на основе правил, которая также позволяет запускать систему локально на легких устройствах.
В настоящее время распознаются 4 различные позы тела. Позы, реализованные в системе, как правило, отражают эмоциональные состояния, которые сильно меняются.
Face-API позволяет нам распознавать в общей сложности 7 различных выражений лица.
Отсутствие камеры глубины в системе приводит к некоторым недостаткам. Однако, поскольку эта система является экспериментальной, в настоящее время мы принимаем эти недостатки.
Кроме того, PoseNet можно использовать многими другими способами. Его можно использовать для создания интерактивных игр, для создания системы «распознавания жестов», для обучения людей определенному танцу (где их движения сравниваются с предварительно записанным видео) и для многих других возможностей.
Комбинация Face-API и PoseNet позволяет нам узнать совокупность выражений лица и положений тела человека. Глядя на комбинацию этих двух функций, мы можем получить более точное представление об эмоции.
Fritskee - Обзор
У Fritskee есть 7 доступных репозиториев. Следите за их кодом на GitHub. github.com