- BrainTools - https://www.braintools.ru -
Исходники открыты на GitHub: github.com/konstantinkozhin/SmileFace [1]
Ко Дню программиста в университете нужно было сделать интерактивный стенд — что-то весёлое, но с технологическим смыслом.
Квиз или чат-бот казались скучными, хотелось чего-то с человеческим лицом — буквально.
Я вспомнил о библиотеках, которые умеют распознавать эмоции [2] по видео, и подумал: а что, если превратить это в игру?
Так появилась идея SmileFace — мини-игры, где человек перед камерой старается изобразить смайлик, показанный на экране, а система оценивает, насколько хорошо получилось.
На всё даётся минута и пять эмоций [3] — радость, удивление, злость, страх [4] и грусть. Экран показывает смайлик-цель и «градусник» совпадения. За точные эмоции начисляются очки, а в конце — финальный счёт.
Простая механика, но эффект оказался мгновенным: через десять минут возле стенда уже стояла очередь и слышался смех.
Мы запустили SmileFace на двух компьютерах.На одном — основное окно игры: камера, счётчик эмоций и панель результатов. Игрок видит себя, рядом — смайлик, который нужно повторить. Внизу — «температура» совпадения, показывающая, насколько эмоция похожа на целевую.
Справа — экран для зрителей: счёт, текущая эмоция и прогресс. Стоило игроку улыбнуться — градусник начинал расти. Если улыбка становилась достаточно «убедительной», появлялся звуковой сигнал и игра моментально переключала эмоцию.
За минуту можно было успеть показать десяток разных выражений лица: от счастливой до мрачной, от удивления до гнева. А потом — увидеть внизу галерею своих эмоций: что-то между фотосессией и стендапом.
На стенде было шумно — люди смеялись, комментировали результаты, спорили с компьютером («ну это же точно радость, как ты не понял?!») и пытались побить рекорд соседей.
Под капотом у SmileFace — минимум сложностей и максимум веселья. Браузер через камеру снимает видео и каждые пару сотен миллисекунд отправляет кадры на сервер.
Сервер написан на Python с помощью FastAPI и общается с браузером по WebSocket — так игра реагирует в реальном времени, без перезагрузок и задержек.
Главная «магия» происходит в библиотеке FER (Face Emotion Recognition). Она анализирует лицо и возвращает набор вероятностей вроде:
радость — 0.92, удивление — 0.05, злость — 0.03
Из этих чисел формируется «градусник» эмоции на экране — чем ближе выражение к целевому, тем выше столбик. Если совпадение достаточно сильное, игрок слышит звуковой сигнал — и на экране тут же появляется новый смайлик.
Вся логика [5] умещается в несколько десятков строк кода, но эффект создаёт ощущение, будто компьютер в самом деле понимает человека.
На деле это всего лишь OpenCV, немного Python, да капля терпения — но вместе они превращаются в живой интерактив, который реагирует на улыбку.
Главный секрет успеха оказался прост: эмоции — универсальны. Не нужно объяснять правила, не нужно вводных инструкций. Улыбнись — и игра началась.
А ещё сама идея соревноваться с нейросетью вызывает улыбку. Даже когда она ошибается — это не раздражает, а наоборот, делает процесс забавнее.
Например, FER часто путал удивление со страхом, а серьёзное лицо с прищуром мог принять за злость. Поэтому победа зависела не только от модели, но и от артистизма игрока: кто убедительнее сыграет эмоцию, тот и набирает больше очков. Получился редкий случай, когда технология и человек не конкурируют, а играют вместе.
Без неожиданностей, конечно, не обошлось.
Освещение оказалось критичным — стоило появиться тени, и «радость» превращалась в «грусть».
Очки сбивали модель с толку: отражения и бликующие линзы мешали детектору видеть глаза.
При слабом интернете видео начинало лагать, и игроку казалось, что «градусник» реагирует с задержкой.
Но эти мелочи только добавляли реализма. Нейросеть ошибалась по-человечески — и от этого казалась ближе. Когда игрок смеялся, а игра в ответ «путала» эмоции, создавалось ощущение диалога — как будто ИИ тоже немножко смущается.
SmileFace начинался как университетский стенд к Дню программиста, но быстро превратился в способ показать, что ИИ может быть весёлым и человечным.
Он не просто распознаёт эмоции — он играет вместе с человеком, ошибается, «удивляется» и тем самым вызывает ответную реакцию [6].
Было интересно собрать такой стенд и увидеть, как студенты смеются, спорят с нейросетью и стараются «переиграть» её лицом.
Теперь делимся проектом — вдруг кому-то пригодится: можно доработать идею, улучшить модель или просто поставить у себя как готовый интерактив.
Исходники открыты на GitHub: github.com/konstantinkozhin/SmileFace
Автор: konstantin_kozhin
Источник [7]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/21246
URLs in this post:
[1] github.com/konstantinkozhin/SmileFace: https://github.com/konstantinkozhin/SmileFace
[2] эмоции: http://www.braintools.ru/article/9540
[3] эмоций: http://www.braintools.ru/article/9387
[4] страх: http://www.braintools.ru/article/6134
[5] логика: http://www.braintools.ru/article/7640
[6] реакцию: http://www.braintools.ru/article/1549
[7] Источник: https://habr.com/ru/articles/961178/?utm_campaign=961178&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.