- PVSM.RU - https://www.pvsm.ru -

Когда-то Стив Джобс и Стив Возняк закрылись в гараже и выкатили первый Mac. Было бы классно, если всегда можно было закрыть программистов в гараже и получить MVP с большим потенциалом. Однако, если добавить к программистам пару людей, готовых оценивать пользовательский опыт и искать что-то инновационное, то шансы на успех растут.
У нашей команды из 5 человек появилась определённая идея, ради которой мы решили слегка захватить мир похакатонить.
Приложение для HR-менеджеров, позволяющее определять психотип соискателя и паттерны поведения.
Обязательные составляющие:
MVP для нас — это островок безопасности между самой идеей и большим проектом "Anne", к которому мы держим путь.
Чтобы при разработке не было отвлекающих факторов, было решено снимать квартиру в ближайшем городе-курорте с обеспечением питания. Приехав туда в воскресенье и устроив свои рабочие места, мы сразу сели за обсуждение. В первую же ночь были определены кирпичики, которые однозначно должны быть в итоговом MVP. И пока ребята шлифовали идею, ездили в город за консультациями к HR-менеджерам, разработчики(я в их числе) уже во всю готовили фундамент.
Определение эмоций решено было делать строго через FACS [1], поскольку данный способ имеет достаточную научную обоснованность по сравнению с, например, таким [2] грубым подходом. Соответственно, задача разбилась на
Обучение, к слову, производилось на Radeon RX580 с помощью PlaidML, про который я уже рассказывал в своей предыдущей статье [3]. Большое спасибо здесь нужно сказать библиотеке imgaug [4], которая позволяет применять аффинные преобразования одновременно к изображениям и точкам на нём (в нашем случае, к лэндмаркам).
Немного аугментированных изображений:

Для определения направления взгляда изначально использовался алгоритм на классическом компьютерном зрении, ищущий зрачок на области глаза на HOGах. Но вскоре пришло понимание, что зачастую зрачок не видно и направление взгляда может описываться не только им, но и расположением век. В связи с данными сложностями, решение было переведено на нейросетевой подход. Датасет мы нарезали и размечали сами, прогоняя через первый алгоритм, и далее вручную правили места его ошибок.
Первые наработки начались еще летом и существовали грязным скриптом на Python'e:

Определение частоты моргания следовало из агрегации частей двух вышеописанных алгоритмов — сближения лэндмарков век и направления взгляда вниз.
Определение пульса по видеопотоку основывалось на идее поглощения зеленой составляющей света частицами крови [5] и дополнилось алгоритмами трекинга и извлечения областей интереса (кожного покрова).
Жутковатая маска выходит, конечно:

На самом деле, создание вышеописанных кирпичиков свелось к реализации State Of The Art алгоритмов с доработками, позволяющими повысить точность в нашем частном случае. Благо, что существует arxiv.org [6].
Сложности появились при создании логики нормализации изображения лица и алгоритмов оценки полученных данных. Например, при распознавании лиц активно используются Active Appearance Model [7] — лицо по найденным точкам натягивается на общую текстуру лица. Но нам важно взаимное расположение точек! Как вариант — фильтровать слишком повернутые лица, либо же натягивать на текстуру только по "якорям", ключевым точкам, которые не отображают движение мышц(например, точка на переносице и края лица). Данная проблема сейчас является одной основной и не позволяет получать достоверные данные, если лицо слишком повернуто(угол поворота мы тоже умеем считать!). Допустимые рамки на сегодня — +-20° по обеим осям. Иначе, лицо просто не обрабатывается.
Конечно, есть и другие проблемы:
Ах, да, а что такое "Базовая линия поведения" [8]? Фундаментальное понятие при обработке эмоций методами FACS. Алгоритм извлечения базовой линии, наверное, является одним из важнейших ноу-хау по итогам нашего хакатона.
Помимо алгоритмов существует и ещё один важный момент, про который мы не могли забывать — производительность. Причём потолок производительности — это даже не ПК, а обычный ноутбук. Вследствие чего, все алгоритмы максимально облегчались, а сети подверглись итерационному уменьшению в размерах с сохранением приемлемой точности.
Итог — 30-40% на Intel i5 при 15-20 fps. Понятно, что есть определенный запас, который будет исчезать по мере добавления дополнительных модулей.
В планах определять:
Я, как любитель компьютерного зрения и ML, рассказал вам немного про использованные алгоритмы в нашем ПО. Но в силу своей незавершенности, для данного приложения вышеописанные возможности являются, скорее, приятным дополнением. Важнейшая же часть — это разработанная система определения психотипа человека. В чем суть? К сожалению, этим занимались мои коллеги(друзья!) и разъяснить, что и откуда, я не смогу. Но для минимального понимания можно рассмотреть порядок работы с полученным ПО:
HR задает качества, которые особенно необходимы для рассматриваемой вакансии:

HR проводит собеседование, задавая часть вопросов подготовленной базы данных (во время собеседования HR имеет перед собой дополнительную информацию о проявляемых эмоциях и уровне стресса)
Во время или после собеседования HR заполняет ответы на вопросы и проявленные паттерны поведения:

Через разработанные матрицы ПО строит инфографику, отображающую совпадение заданных и определенных качеств:

После собеседования имеется запись, позволяющая в любое время вернуться к собеседованию и оценить тот или иной момент

14 дней x 12 часов + 3 разработчика + 2 специалиста в области определения лжи = готовый MVP. Погружение было максимальным — вплоть до того, что в обеденное время мы смотрели сериал Обмани меня [9] — очень советую.
Чтобы не быть голословным, прикладываю пример [10] того, как работает приложение сейчас:
А также промо-ролик [11] большого решения "Anne", к которому мы шагаем.

Автор: pagin
Источник [12]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/301197
Ссылки в тексте:
[1] FACS: https://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BB%D0%B8%D1%86%D0%B5%D0%B2%D1%8B%D1%85_%D0%B4%D0%B2%D0%B8%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9
[2] таким: https://arxiv.org/pdf/1805.00326.pdf
[3] статье: https://habr.com/post/420989/
[4] imgaug: https://imgaug.readthedocs.io/en/latest/
[5] поглощения зеленой составляющей света частицами крови: https://arxiv.org/pdf/1710.08369.pdf
[6] arxiv.org: https://arxiv.org
[7] Active Appearance Model: https://habr.com/post/155759/
[8] "Базовая линия поведения": https://arxiv.org/pdf/1612.05038.pdf
[9] Обмани меня: https://www.kinopoisk.ru/film/obmani-menya-2009-428930
[10] пример: https://www.youtube.com/watch?v=9ye3RblDADE
[11] промо-ролик: https://www.youtube.com/watch?v=5RoD8LLa3Co
[12] Источник: https://habr.com/post/432030/?utm_campaign=432030
Нажмите здесь для печати.