Исходники открыты на GitHub

От идеи до смеха в коридоре

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

Я вспомнил о библиотеках, которые умеют распознавать эмоции по видео, и подумал: а что, если превратить это в игру?

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

На всё даётся минута и пять эмоций — радость, удивление, злость, страх и грусть. Экран показывает смайлик-цель и «градусник» совпадения. За точные эмоции начисляются очки, а в конце — финальный счёт.

Простая механика, но эффект оказался мгновенным: через десять минут возле стенда уже стояла очередь и слышался смех.

Когда играешь лицом

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

Интерфейс веб-приложения
Интерфейс веб-приложения

Слева отображалось видео с камеры — игрок видит себя и следит за мимикой. Справа — смайлик, который нужно повторить, и «градусник», показывающий, насколько выражение совпадает с целевым. Стоило улыбнуться — температура начинала расти. Если эмоция угадывалась достаточно точно, звучал короткий сигнал и появлялся новый смайлик.

За минуту можно было успеть пройти серию эмоций: от радости до гнева, от удивления до грусти. В конце на экране появлялась галерея выражений лица — самый смешной момент игры, где участники рассматривали свои «эмоции в динамике».

В коридоре быстро собралась толпа: кто-то пробовал играть всерьёз, кто-то — с гримасами, а вокруг было много смеха, криков «ну это точно радость!» и попыток побить рекорд соседа.

Что скрывается за смайликом

Под капотом у SmileFace — минимум сложностей и максимум веселья. Браузер через камеру снимает видео и каждые пару сотен миллисекунд отправляет кадры на сервер.

Сервер написан на Python с помощью FastAPI и общается с браузером по WebSocket — так игра реагирует в реальном времени, без перезагрузок и задержек.

Главная «магия» происходит в библиотеке FER (Face Emotion Recognition). Она анализирует лицо и возвращает набор вероятностей вроде:

радость — 0.92, удивление — 0.05, злость — 0.03

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

Вся логика умещается в несколько десятков строк кода, но эффект создаёт ощущение, будто компьютер в самом деле понимает человека.

На деле это всего лишь OpenCV, немного Python, да капля терпения — но вместе они превращаются в живой интерактив, который реагирует на улыбку.

Почему это сработало

Главный секрет успеха оказался прост: эмоции — универсальны. Не нужно объяснять правила, не нужно вводных инструкций. Улыбнись — и игра началась.

А ещё сама идея соревноваться с нейросетью вызывает улыбку. Даже когда она ошибается — это не раздражает, а наоборот, делает процесс забавнее.

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

Маленькие сложности

Без неожиданностей, конечно, не обошлось.

  • Освещение оказалось критичным — стоило появиться тени, и «радость» превращалась в «грусть».

  • Очки сбивали модель с толку: отражения и бликующие линзы мешали детектору видеть глаза.

  • При слабом интернете видео начинало лагать, и игроку казалось, что «градусник» реагирует с задержкой.

Но эти мелочи только добавляли реализма. Нейросеть ошибалась по-человечески — и от этого казалась ближе. Когда игрок смеялся, а игра в ответ «путала» эмоции, создавалось ощущение диалога — как будто ИИ тоже немножко смущается.

Когда ИИ становится игрой

SmileFace начинался как университетский стенд к Дню программиста, но быстро превратился в способ показать, что ИИ может быть весёлым и человечным.
Он не просто распознаёт эмоции — он играет вместе с человеком, ошибается, «удивляется» и тем самым вызывает ответную реакцию.

Было интересно собрать такой стенд и увидеть, как студенты смеются, спорят с нейросетью и стараются «переиграть» её лицом.

Теперь делимся проектом — вдруг кому-то пригодится: можно доработать идею, улучшить модель или просто поставить у себя как готовый интерактив.

Исходники открыты на GitHub

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