Исходники открыты на GitHub: github.com/konstantinkozhin/SmileFace
От идеи до смеха в коридоре
Ко Дню программиста в университете нужно было сделать интерактивный стенд — что-то весёлое, но с технологическим смыслом.
Квиз или чат-бот казались скучными, хотелось чего-то с человеческим лицом — буквально.
Я вспомнил о библиотеках, которые умеют распознавать эмоции по видео, и подумал: а что, если превратить это в игру?
Так появилась идея SmileFace — мини-игры, где человек перед камерой старается изобразить смайлик, показанный на экране, а система оценивает, насколько хорошо получилось.
На всё даётся минута и пять эмоций — радость, удивление, злость, страх и грусть. Экран показывает смайлик-цель и «градусник» совпадения. За точные эмоции начисляются очки, а в конце — финальный счёт.
Простая механика, но эффект оказался мгновенным: через десять минут возле стенда уже стояла очередь и слышался смех.
Когда играешь лицом
Мы запустили SmileFace на двух компьютерах.На одном — основное окно игры: камера, счётчик эмоций и панель результатов. Игрок видит себя, рядом — смайлик, который нужно повторить. Внизу — «температура» совпадения, показывающая, насколько эмоция похожа на целевую.
Справа — экран для зрителей: счёт, текущая эмоция и прогресс. Стоило игроку улыбнуться — градусник начинал расти. Если улыбка становилась достаточно «убедительной», появлялся звуковой сигнал и игра моментально переключала эмоцию.
За минуту можно было успеть показать десяток разных выражений лица: от счастливой до мрачной, от удивления до гнева. А потом — увидеть внизу галерею своих эмоций: что-то между фотосессией и стендапом.
На стенде было шумно — люди смеялись, комментировали результаты, спорили с компьютером («ну это же точно радость, как ты не понял?!») и пытались побить рекорд соседей.
Что скрывается за смайликом
Под капотом у SmileFace — минимум сложностей и максимум веселья. Браузер через камеру снимает видео и каждые пару сотен миллисекунд отправляет кадры на сервер.
Сервер написан на Python с помощью FastAPI и общается с браузером по WebSocket — так игра реагирует в реальном времени, без перезагрузок и задержек.
Главная «магия» происходит в библиотеке FER (Face Emotion Recognition). Она анализирует лицо и возвращает набор вероятностей вроде:
радость — 0.92, удивление — 0.05, злость — 0.03
Из этих чисел формируется «градусник» эмоции на экране — чем ближе выражение к целевому, тем выше столбик. Если совпадение достаточно сильное, игрок слышит звуковой сигнал — и на экране тут же появляется новый смайлик.
Вся логика умещается в несколько десятков строк кода, но эффект создаёт ощущение, будто компьютер в самом деле понимает человека.
На деле это всего лишь OpenCV, немного Python, да капля терпения — но вместе они превращаются в живой интерактив, который реагирует на улыбку.
Почему это сработало
Главный секрет успеха оказался прост: эмоции — универсальны. Не нужно объяснять правила, не нужно вводных инструкций. Улыбнись — и игра началась.
А ещё сама идея соревноваться с нейросетью вызывает улыбку. Даже когда она ошибается — это не раздражает, а наоборот, делает процесс забавнее.
Например, FER часто путал удивление со страхом, а серьёзное лицо с прищуром мог принять за злость. Поэтому победа зависела не только от модели, но и от артистизма игрока: кто убедительнее сыграет эмоцию, тот и набирает больше очков. Получился редкий случай, когда технология и человек не конкурируют, а играют вместе.
Маленькие сложности
Без неожиданностей, конечно, не обошлось.
-
Освещение оказалось критичным — стоило появиться тени, и «радость» превращалась в «грусть».
-
Очки сбивали модель с толку: отражения и бликующие линзы мешали детектору видеть глаза.
-
При слабом интернете видео начинало лагать, и игроку казалось, что «градусник» реагирует с задержкой.
Но эти мелочи только добавляли реализма. Нейросеть ошибалась по-человечески — и от этого казалась ближе. Когда игрок смеялся, а игра в ответ «путала» эмоции, создавалось ощущение диалога — как будто ИИ тоже немножко смущается.
Когда ИИ становится игрой
SmileFace начинался как университетский стенд к Дню программиста, но быстро превратился в способ показать, что ИИ может быть весёлым и человечным.
Он не просто распознаёт эмоции — он играет вместе с человеком, ошибается, «удивляется» и тем самым вызывает ответную реакцию.
Было интересно собрать такой стенд и увидеть, как студенты смеются, спорят с нейросетью и стараются «переиграть» её лицом.
Теперь делимся проектом — вдруг кому-то пригодится: можно доработать идею, улучшить модель или просто поставить у себя как готовый интерактив.
Исходники открыты на GitHub: github.com/konstantinkozhin/SmileFace
Автор: konstantin_kozhin


