image


Когда-то Стив Джобс и Стив Возняк закрылись в гараже и выкатили первый Mac. Было бы классно, если всегда можно было закрыть программистов в гараже и получить MVP с большим потенциалом. Однако, если добавить к программистам пару людей, готовых оценивать пользовательский опыт и искать что-то инновационное, то шансы на успех растут.


У нашей команды из 5 человек появилась определённая идея, ради которой мы решили слегка захватить мир похакатонить.


Описание MVP


Приложение для HR-менеджеров, позволяющее определять психотип соискателя и паттерны поведения.


Обязательные составляющие:


  1. База данных вопросов, видов реакций и система приведения этих вещей к психотипу
  2. Определение эмоций человека, основанное на проявлениях AU — определенных движениях мышц лица.
  3. Бесконтактное определение пульса
  4. Определение направления взгляда
  5. Определение частоты моргания
  6. Система агрегирования вышеописанных извлекаемых данных в график стресса и другие полезные метаданные.

MVP для нас — это островок безопасности между самой идеей и большим проектом "Anne", к которому мы держим путь.


Как всё было


Чтобы при разработке не было отвлекающих факторов, было решено снимать квартиру в ближайшем городе-курорте с обеспечением питания. Приехав туда в воскресенье и устроив свои рабочие места, мы сразу сели за обсуждение. В первую же ночь были определены кирпичики, которые однозначно должны быть в итоговом MVP. И пока ребята шлифовали идею, ездили в город за консультациями к HR-менеджерам, разработчики(я в их числе) уже во всю готовили фундамент.


Техническая часть


Определение эмоций решено было делать строго через FACS, поскольку данный способ имеет достаточную научную обоснованность по сравнению с, например, таким грубым подходом. Соответственно, задача разбилась на


  1. Обучение сети, предсказывающей 68 лэндмарков лица
  2. Нормализация / фильтрация изображения лица
  3. Алгоритм, детектирующий лицевые движения в динамике

Обучение, к слову, производилось на Radeon RX580 с помощью PlaidML, про который я уже рассказывал в своей предыдущей статье. Большое спасибо здесь нужно сказать библиотеке imgaug, которая позволяет применять аффинные преобразования одновременно к изображениям и точкам на нём (в нашем случае, к лэндмаркам).


Немного аугментированных изображений:


image


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


Первые наработки начались еще летом и существовали грязным скриптом на Python'e:


image


Определение частоты моргания следовало из агрегации частей двух вышеописанных алгоритмов — сближения лэндмарков век и направления взгляда вниз.


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


Жутковатая маска выходит, конечно:


image


На самом деле, создание вышеописанных кирпичиков свелось к реализации State Of The Art алгоритмов с доработками, позволяющими повысить точность в нашем частном случае. Благо, что существует arxiv.org.


Сложности появились при создании логики нормализации изображения лица и алгоритмов оценки полученных данных. Например, при распознавании лиц активно используются Active Appearance Model — лицо по найденным точкам натягивается на общую текстуру лица. Но нам важно взаимное расположение точек! Как вариант — фильтровать слишком повернутые лица, либо же натягивать на текстуру только по "якорям", ключевым точкам, которые не отображают движение мышц(например, точка на переносице и края лица). Данная проблема сейчас является одной основной и не позволяет получать достоверные данные, если лицо слишком повернуто(угол поворота мы тоже умеем считать!). Допустимые рамки на сегодня — +-20° по обеим осям. Иначе, лицо просто не обрабатывается.


Конечно, есть и другие проблемы:


  • Определение лэндмарков, если человек в очках
  • Извлечение базовой линии, если человек кривляется
  • Определение пульса при сильно мерцающем освещении

Ах, да, а что такое "Базовая линия поведения"? Фундаментальное понятие при обработке эмоций методами FACS. Алгоритм извлечения базовой линии, наверное, является одним из важнейших ноу-хау по итогам нашего хакатона.


Помимо алгоритмов существует и ещё один важный момент, про который мы не могли забывать — производительность. Причём потолок производительности — это даже не ПК, а обычный ноутбук. Вследствие чего, все алгоритмы максимально облегчались, а сети подверглись итерационному уменьшению в размерах с сохранением приемлемой точности.


Итог — 30-40% на Intel i5 при 15-20 fps. Понятно, что есть определенный запас, который будет исчезать по мере добавления дополнительных модулей.


В планах определять:


  • Пересыхание в горле
  • Изменение цвета лица
  • Частоту дыхания
  • Интенсивность движений тела
  • Паттерны поз человека
  • Дрожь в голосе

А что мы умеем еще?


Я, как любитель компьютерного зрения и ML, рассказал вам немного про использованные алгоритмы в нашем ПО. Но в силу своей незавершенности, для данного приложения вышеописанные возможности являются, скорее, приятным дополнением. Важнейшая же часть — это разработанная система определения психотипа человека. В чем суть? К сожалению, этим занимались мои коллеги(друзья!) и разъяснить, что и откуда, я не смогу. Но для минимального понимания можно рассмотреть порядок работы с полученным ПО:


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


image


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


Во время или после собеседования HR заполняет ответы на вопросы и проявленные паттерны поведения:


image


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


image


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


Итого


image


14 дней x 12 часов + 3 разработчика + 2 специалиста в области определения лжи = готовый MVP. Погружение было максимальным — вплоть до того, что в обеденное время мы смотрели сериал Обмани меня — очень советую.


Чтобы не быть голословным, прикладываю пример того, как работает приложение сейчас:


А также промо-ролик большого решения "Anne", к которому мы шагаем.


image

Комментарии (24)


  1. fivehouse
    04.12.2018 19:07

    Если хотите чтобы взлетело, упростите все в 100 раз и дайте действительно интересные ответы. Никому не нужно ни направление взгляда, ни коррупция, ни даже наркотики. Ваше ПО должно давать 1-2 четких ответа-рекомендации на уровне да-нет. Как детектор лжи. И тогда появится шанс выбраться из этой хрущевки.


    1. SADKO
      04.12.2018 20:24

      1-2 четких ответа-рекомендации на уровне да-нет. Как детектор лжи.

      Угу, в кино! Реальные полиграфы это устройства регистрации не более, а определением лжи занимается оператор, которому в большинстве случаев прибор не очень и нужен, он больше для протокола…



      1. psman
        05.12.2018 12:38

        Мало того что фуфлометр, так еще и ошибки недопсихолога добавить?


        1. tvr
          05.12.2018 18:18

          Эхх, если бы просто прибавляли, так нет, умножают или в степень возводят.


          1. SADKO
            06.12.2018 12:21

            Степень не компетентности оператора и\или заказчика исследования…
            … и думаю что попытка снизить порок вхождения не самая лучшая идея


  1. eugene_bb
    04.12.2018 19:44

    Посмотрите на софт от группы из MIT, если еще не видели.


  1. Piskov
    05.12.2018 02:34

    На рынке уже несколько лет несколько компаний, включая русских http://nostradamus.ai/


  1. dim2r
    05.12.2018 11:43

    интересно было бы иметь мониторинг усталости оператора ПК


  1. epishman
    05.12.2018 12:49

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


    1. Diordna
      05.12.2018 17:27

      Танк превосходит тело человека в живучести, мощности, вооруженности, почему бы это не признать?

      Более гиковские пример компьютер, калькулятор, они ведь гораздо быстрее считают чем человек.


      1. epishman
        05.12.2018 19:43

        Вы таки не понимаете. ИИ будет решать — жить вам интересно, или на заправке телом зарабатывать. И если решение человека вы можете обжаловать, обратившись например к другому человеку — решение ИИ будет выполнятся автоматически — дернул бровью не вовремя — и теперь зарплата у вас в полтора раза меньше. А самое главное — при общении с человеком вы сразу получаете обратную связь, если конечно не совсем бревно, а в случае ИИ вам даже не объяснят почему вы Г.


        1. Diordna
          06.12.2018 10:46

          Ну такой мрачный сценарий… такой ии не станет спрашивать наше мнение о собственном превосходстве над людьми.


        1. Vinchi
          07.12.2018 03:18

          Конкуренция между системами приведет к победе ИИ которые будт больше похожи в общении на людей.


          1. epishman
            07.12.2018 09:19

            Знаешь, смотря где. На низовке, при поиске кассира для супермаркета — да, будет рулить ИИ, а если ты захочешь управляющим в банк — тут только люди будут смотреть. В итоге мир будет разделен — ИИ-роботы будут управлять человеко-роботами, а Люди — Людьми.


    1. tvr
      05.12.2018 18:20

      лучше буду фрилансить за жалкие центы


      Интересно, а что вы скажете, когда выяснится, что на фрилансе вы выполняли заказы ИИ?


  1. EWG21
    05.12.2018 12:49

    Дмитрий, сам продукт и его идея очень нужны рынку сегодня. Приведу суть одно исследования. Кандидаты на работу проходили собеседование, но после его окончания им сообщали, что они участвовали в эксперименте и оплачивали-компенсировали это самое участие. Одновременно с этим предлагали продолжить эксперимент и получить еще одно вознаграждение. Вторая часть эксперимента предполагала указание обследуемыми участков интервью где они лгали и раскрытие сути этой лжи. Оказалось, что 81 процент обследуемых лгали во время интервью. Лгали по направлениям — преувеличение своих профессиональных компетенция и умолчание негативных фактов биографии и особенностей личности. Вывод — большая часть кандидатов (почти все) лгут во время кадровых собеседований и это естественно как показал эксперимент. Ваш продукт должен отбраковать всех как лгущих, а кто тогда будет работать?)
    Законодателями мод в англоязычной периодике (научной) давно произошел отход от всего «невербального» как тупиковой ветви в диагностике лжи. Основной вектор другой.


    1. psman
      05.12.2018 14:02

      Детектор лжи не работает. Этот прибор работает как нечто региструющее нечто. У оператора нет даже научной базы что бы хоть как то показатели чего то там связать хоть во что-то.


      1. SADKO
        06.12.2018 12:32

        Почему не работает, работает, просто народное понимание «детектора лжи» бесконечно далеко от реальных кейсов использования полиграфа…


        1. psman
          06.12.2018 12:42

          Есть научное понимание принципов работы детектора лжи. «Реальный кейс» -это регистрация «чего то там». Как это связано с ложью или иными эмоциями триггерящими в мозгу — нет исследований. Если человека спросить «воровал ли он на работе», а он не воровал, но его ложно обвинили в этом (привет любым работникам сферы торговли и общепита), то будут некие реакции. Как по этим реакциям понять ложь или правда — ни кто не знает.
          Оператор фактически менталист и прибор лишь усиливает его собственные наблюдения. В случае при приеме на работу, когда вот абсолютно нет никаких последствий за результат (вакансий полно и это место с проверкой самим фактом говорит зачастую только о не совсем адекватах в в руководстве компании) — можно врать без напряга. Особенно когда спрашивают некую хрень вроде «вы изменяли своей жене?» (интересно как свингеры отвечают и что регистрирует прибор) — всегда отвечаю «регулярно» или «да». вообще всегда отвечайте «да».


    1. timoteo_cirkulera
      06.12.2018 13:40

      Уже кучу раз доказывали, что полиграф можно обмануть. Также и обратное: человек может не врать, но детектор и оператор скажут, что человек врал. А всё по причине того, что одно и тоже состояние может быть как и во время лжи, так и просто от волнения, неустойчивого эмоционального состояния.


  1. xitt
    05.12.2018 18:23

    Так это же тест для ловли репликантов.


  1. SADKO
    06.12.2018 12:54

    So, guys… Хактон у вас получился суперский, результат впечатлят, а вот практическая применимость оного вызывает вопросы, тут слишком много важных деталей, ну и чисто теоретически, мимика как таковая, плохой канал утечки, ибо люди сознательно или нет но используют её и весьма эффективно. Она полезна для машинных интерфейсов, что бы понимать контекст общения, на уровне человека, со всеми его погрешностями…
    … если говорить про не вербальные признаки, то посмотрите корреляцию межу ЭКГ и пульсом из видео потока в динамике, узнаете много чего интересного, кроме того невербалка не работает в лоб


  1. Vinchi
    07.12.2018 03:21

    Да и насчет того сериала. Эмоции не коррелируют с мимикой. Как и ложь. Это не врожденная схема, мимика тренируется социумом. Так что сериал — ненаучная фантастика.