{"id":14291,"url":"\/distributions\/14291\/click?bit=1&hash=257d5375fbb462be671b713a7a4184bd5d4f9c6ce46e0d204104db0e88eadadd","title":"\u0420\u0435\u043a\u043b\u0430\u043c\u0430 \u043d\u0430 Ozon \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u0442\u0430\u043c \u043d\u0435 \u043f\u0440\u043e\u0434\u0430\u0451\u0442","buttonText":"","imageUuid":""}

face2sticker - бот, который превратит ваше фото в комикс-стикер. С текстом!

Как неудачное приложение из конкурса telegram обрело вторую жизнь. В telegram.

Идея

Этим летом telegram устроил конкурс по разработке мобильного приложения для создания стикеров.

С мобильной разработкой до этого момента я вообще не сталкивался, но у меня уже был другой бот, который делал из фото комиксы. Переделав исходный комикс-алгоритм под новую задачу, я сваял на коленке приложение на react native. Оно просто стучалось на api и позволяло сохранить и пошерить результат.

Приложение это после торжественного запуска утонуло в минусах. Впрочем, сообщество оказалось беспристрастно и заминусовало вообще всех, судя по тому, что максимальный балл там сейчас -1, лол.

¯\_(ツ)_/¯

Не дожидаясь результатов конкурса, я решил завернуть новый алгоритм в бота. И не прогадал, так как результатов конкурса все еще нет, а на дворе уже конец октября. Прием работ, напомню, был завершен в начале июля 😂

face2sticker

В итоге получился telegram бот с одной функцией. Запустил я его еще летом, то есть до того, как это стало мейнстримом 😈

Работает просто:

- отправляете фото и текст @face2stickerbot
- получаете сами стикеры и их .png версии
- отправляете друзьям

Стикеры также можно добавить в стикерпак с помощью официального бота @stickers

.png файлы можно использовать как угодно, хоть в том же instagram - прозрачность там отлично работает.
Правда, это на самом деле не png, а webp, так как телеграм не дает отправить webp файлом :(

Детали

Расскажу немного о реализации.

Сам бот написан на TypeScript/telegraf.js, алгоритм обработки фото - на питоне.
Пример бота в связке с питоном. Ему уже пара лет, но если будет интерес, могу попробовать причесать код текущего бота и тоже выложить на гитхаб.

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

u2net создает маску для отделения ключевых объектов от фона,

RetinaFace обнаруживает лица и их ключевые точки.

Лицо вырезается, улучшается с помощью GPEN, стилизуется unet и вклеивается на фон, который также предварительно улучшается и стилизуется.

Вместе с этим изображения немного блюрятся и шарпятся для большего комикс-эффекта.

По координатам лица определяем, в какой части фото оно находится, и, исходя из этого, рисуем баббл с текстом. Вуаля!

Что дальше

Уже было небольшое обновление, в котором была добавлена минималистичная обработка - улучшение и обводка контуров лица, без комикс-стиля.
Алгоритм постоянно совершенствуется и облегчается, чтобы в будущем запилить поддержку анимированных стикеров.

Также в планах добавить и стикер-менеджмент, чтобы можно было создавать стикерпаки не отходя о кассы.

Если у вас есть какие-то пожелания - не забудьте отписать в комментах.

На этом все, спасибо за ваше время и крутых вам стикеров!
Как говорится, го тыкать, я создал -> @face2stickerbot

0
78 комментариев
Написать комментарий...
Denis

А на сколько ресурсоемка по нагрузке на проц эта обработка фото? И фильтр наложить, и лицо найти чтобы стрелочку в верном месте нарисовать

Ответить
Развернуть ветку
Александр Спирин
Автор

Всю основную нагрузку я вынес на серверлесс хостинг с GPU. В среднем создание стикеров занимает 2-3секунды, основная нагрузка из которых - улучшение фото и стилизация. Поиск лица и альфа-канала занимают 10-25%, в зависимости от размера исходника. А сам бот хостится на самой дешевой виртуалке за $5

Ответить
Развернуть ветку
Denis
серверлесс хостинг с GPU

А что за провайдер?

Ответить
Развернуть ветку
Canis Majoris

Простаивающие китайские мощности пула эфириума

Ответить
Развернуть ветку
Александр Спирин
Автор

Я использовал algorithmia.com, ссылка на небольшой туториал в этой статье есть. Недорого, и для домашних проектов подходит. Если нужно в продакшен и под хайлоад, у них есть бизнес-решения, но их я не проверял, поэтому не знаю, лучше ли они, чем выделенный сервер или тот же амазон)

Ответить
Развернуть ветку
75 комментариев
Раскрывать всегда