Проект: Делаем лучшие фото для визы  Публичный пост
30 октября 2025  1574
ОХУЕННО ⨯2
Делаем лучшие фото для визы
https://t.me/photovisa_bot

Делали ли вы электронную визу в Индию? А, может, в Южную Корею? Или подавались на лотерею Green Card в США? Если да, то вы точно знаете, что для заявки на все эти документы надо прикрепить фотографию определённого размера с целым набором требований...

А такое ну просто необходимо автоматизировать!

И, как можно догадаться, сайтов для автоматизации фотографий на документы просто куча. Только вот есть одна проблема: все эти сайты хотят много денег - от 5 до 12 долларов за приведение фото к нужным требованиям.

Терпеть такое я, конечно же, не стал и написал своего бота в Телеграме, который делает это всё бесплатно.

С чего всё началось

Сидел я одним зимним вечером на диване. А моя девушка планировала поезду с подругами в Китай и в это время заполняла анкету на визу (да-да, тогда еще нужны были визы!).

Когда она всё заполнила, я подошёл поинтересоваться, как все прошло. И вдруг обнаружил, что для подачи заявки она с подругами купила создание фото на визу за 400 рублей. Тогда я подумал про себя: "А отличный бизнес можно сделать - удаляем задний фон, выравниваем лицо на фото - и ко мне потекут горы денег. Богатство и слава! АХАХАХАХАХ!" И благополучно забыл об этом.

И вот, спустя почти год, мне на работе стало скучно, и я решил, что пора приниматься за дело (естественно, в рабочее время). Получилось сделать бота быстро и хорошо (в течении одной недели), поэтому решил оставить его бесплатным для всех.

Я после продажи фото на визу (на самом деле бот бесплатный!)
Я после продажи фото на визу (на самом деле бот бесплатный!)

Придумываем архитектуру

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

Я люблю Телеграм-ботов - их просто и быстро делать, поэтому будем делать свой собственный Телеграм-миниапп для обработки фото на визы.

Вот такая будет архитектура
Вот такая будет архитектура

Чтобы сделать Телеграм-миниапп, у нас будут следующие компоненты:
Bot server
Обычный сервер на питоне, который:

  • обрабатывает сообщения от пользователя в чате

  • дает ему ссылку на фронтенд

  • принимает от фронтенда запрос на обработку фото и кладет его в очередь

  • когда фото готово, отправляет его пользователю в чат

Frontend miniapp
А вот это у нас будет сайт на React!
Если давать юзеру интерфейс через чат Телеграма, то это неудобно (как из огромного списка стран для документов найти нужную?) и не очень красиво (хочется показать приятный лоадер, пока генерируем фото). А миниаппы в Телеграме позволяют нам открыть свой сайт и избавиться от всех этих проблем.
Этот сайт будет:

  • давать пользователю возможность выбрать страну, выбрать тип документа и загрузить фото

  • показывать красивый лоадер, пока мы генерируем для пользователя фото

Photo processing worker

Это будет простенький сервис на питоне, который:

  • принимает фото из очереди

  • обрабатывает его и передает нашему Bot Server'у

Что ж, архитектура спланирована, пора приступать к реализации.

Займемся скраппингом данных

У каждой страны и у каждого документа есть свои требования к:

  • размерам (в пикселях, мм или дюймах)
  • расположению лица на фото (какой размер лицо занимает по высоте, размер отступа от верха фото до макушки и т.д.)
  • размеру файла (у некоторых документов в Китае максимальный размер 40кб)
  • цвету заднего фона (некоторые просят голубой фон вместо белого)

Так как же нам их получить? Все просто - украсть с других сайтов. Вместо тысячи слов вот вам ссылка на репозиторий со скриптами для скраппинга и нормализации данных с одного известного сайта для виз + готовые JSON-файлы.

Создаем worker для обработки фото

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

Удаление заднего фона - задача очень известная и решений опубликовано куча. Но не все они нам подойдут - тот же rembg довольно старый и плохо работает с волосами (а у нас их планируется много). Я решил взять свежую модельку ZhengPeng7/BiRefNet для поиска маски заднего фона.

Как видно, rembg оставляет артефакты на волосах Роберта Паттинсона
Как видно, rembg оставляет артефакты на волосах Роберта Паттинсона

Моделька довольно большая и на CPU работает медленно, поэтому пришлось взять тачку с RTX 3060 чтобы работало быстрее.

Для поиска лица и ключевых точек мы возьмем dlib. Он старенький, но в этой задаче нам ювелирная точность не понадобится.

Работает просто прекрасно
Работает просто прекрасно

Создаем сервер для нашего бота

Мы сделали worker, но чтобы отпралять туда запросы нам нужно обрабатывать запросы от пользователей в чате Телеграма. Давайте напишем бота!

Для создания бота я взял библиотечку python-telegram-bot, чтобы обрабатывать сообщения в чате Телеграма от пользователей и давать им ссылку на наш миниапп. И добавил FastAPI для двух роутов - один чтобы пользователь отправлял свою картинку и мы слали её в очередь, второй - чтобы принимать готовое фото от worker'а и слать его юзеру в чат.

Готовим фронтенд для миниаппа

Для frontend'а мы делаем все максимально просто - берем create-react-app и копируем дизайн текстов и кнопок как у бота @BotFather. И все, наш фронтенд готов!

Обходим ограничения Роскомнадзора

Наши три компонента системы готовы, и если мы их успешно задеплоили, то приложение должно работать без проблем. Так ведь?

Если вы, как и я, выбрали для деплоя фронтенда AWS, то у вас возникнут некоторые сложности... У ребят из России, когда они пользовались мобильным интернетом от МТС, фронтенд моего миниаппа просто не открывался (получается МТС блочат весь трафик на AWS?).

У меня как раз был сервер в Германии на хостинге hosting-russia.ru, к которому Роскомнадзор, похоже, относится более лояльно. Сделаем его прокси-сервером!

Делаем небольшую настройку NGINX для переадресации трафика с нашего сервера на AWS и Роскомнадзор перестал быть нам страшен. Пользователи из России спокойно смогут сгенерировать себе любые фотографии для виз!

Финальный результат

Посмотреть результат и сгенерировать себе фото на документы можно в photovisa_bot - абсолютно бесплатно и без регистрации.

Примеры работ
Примеры работ

Спасибо, что дочитали пост до конца! Думаю, теперь у вас не возникнет никаких проблем с созданием фото себе на визу ;)

Аватар Андрей Аникин
Андрей Аникин @andreasCaG
Computer vision engineerSportradar
📍Пафос, Кипр

Тг @andreascag

Разработчик с 7+ годами опыта. Разрабатывал несколько лет фронтенд для букмекерской компании, последние 4 года работаю Computer Vision инженером в спортивной сфере

27 комментариев 👇

Бро, это просто великолепно!
Это спасение от головняка с фотографиями на Госуслугах!
Спасибо огромное!

  Развернуть 1 комментарий

@djbelyak, Спасибо за отзыв!

В боте действительно есть поддержка фоток для Госуслуг, но я особо об этом кейсе применения не задумывался 😅

  Развернуть 1 комментарий
Olga Paquette M365 / Azure / Power Platform 4 ноября в 14:13

В закладки !

.... и вы еще спрашиваете, в чем ценность Клуба и почему я тут остаюсь

  Развернуть 1 комментарий

по делу:
я печатаю все фото на доки на формате 9х12 матовой, тк это самый распространенный и дешевый формат. что бы оптимально было замосчаю фоткой весь кадр с отступами от краёв по 8мм, сохраняюю 150-300dpi, сохраняю *.tiff (без опций), *.pdf (1.3), по-моему сохраняю в CMYK пространстве, но в целом в печати могут и за меня и это бесплатно. разделяю фотки 1мм и перекрестья свеееееетло-серые, где резать (свыше 4см стоит поставить ещё полоску самую тонкую 0,1мм где резать, что бы не скривить самыми плохими ножницами . маникюрные справятся скривить на 2см шаге)

я помню глаза одного чела из фото на документы, когда я ему принес на печать фотки 9х12 самую дешевую позицию в их спектре услуг, но по сути дела мне была нужна французкая виза, которая у них бы обошлась в 55 раз дороже, а нож одолжил у сотрудника, а может и его попросил :)

__

контекст:
я дизайнер, был фотографом, и были времена, когда автоматизировал внутренними скриптами фотошоп (технический дизайн), а ещё стажировался в мастерской где печатли фото, в том числе и на документы :)) ретушировал себе фото на гос паспорт, из тех пор печатаю на все эти штуки одну и ту же фотографию уже лет 12

  Развернуть 1 комментарий

Просто шикарная работа, спасибо за такой классный инструмент! Подскажи пожалуйста, как обстоят дела с конфиденциальностью? Хранишь ли ты какие-либо материалы у себя или они удаляются сразу после обработки и сохраняются только в чате с Телеграмом?

  Развернуть 1 комментарий

@wheatlugin, привет!

После обработки все фото удаляются и хранятся только в вашем чате с ботом. У себя я храню только язык, который выбрал пользователь для интерфейса

  Развернуть 1 комментарий

Шикарный сервис! Проверил две фото для грин карты кропнутые ботом в Astar Photo validator. Все проходят!
Фича реквест: вообще убрать галочку включающую удаление фона и по умолчанию не удалять фон (чтобы никто не ошибся не удалил случайно)

  Развернуть 1 комментарий

@rostislaved, Спасибо!

Фича реквест: вообще убрать галочку включающую удаление фона и по умолчанию не удалять фон (чтобы никто не ошибся не удалил случайно)

Я думал о такой логике:

  • Если юзер выбирает грин карту, то галочка будет по дефолту отключена
  • Если юзер выбирает что-то другое, то галочка будет включена

Меня остановило то, что все популярные сайты (типа visafoto.com и photoaid.com) удаляют бекграунд для гринкарды по дефолту. Они поднимают на этом деньги, поэтому должны шарить что да как.

Создалось впечатление, что на практике фотки с удаленным фоном на гринкарту все-равно принимают. Поэтому сайты по дефолту делают максимально удобно для юзера, чтобы фон удалился и он был рад 🤔

  Развернуть 1 комментарий

@andreasCaG, описанная логика норм.

Про то, шарят ли сайты сложно сказать. Я вижу это так:

  • На сайте лотереи написано, что нельзя редактировать фото. А дальше уже могут быть разные ситуации, вроде "сдал фото с обрезанным фото и она прошла" отсюда сделали вывод, что такие фото проходят и стали использовать, как универсальное правило. Но, если какая-то фотка не прошла из-за удаленного фона, то мы не узнаем о причине и списать можно на просто "не повезло", а не то, что фотка не подошла. Это возможный способ мышления сайтов.
  Развернуть 1 комментарий

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

При подаче-то заявки почти не проверяются, емнип, это уже всё чуть ли не на рассмотрении визы для выигрывшей заявки всплывает.

  Развернуть 1 комментарий

@rostislaved, Я году в 2016 делал фото на доки — всегда фотошопом открывали снимок, как минимум что бы выбрать формат, и пара ньюансов, и направляли на печать. Сохраняли этот файл на флешку по запросу. Можно сохранять без exif data (в свойствах файла пишется)

  Развернуть 1 комментарий

@asurikov, возможно кстати exif не влияет. Как они там проверяют - неясно. Может реально визуально смотрят на фото только.

  Развернуть 1 комментарий
Polina Greskova психолог, консультирую :) 4 ноября в 18:22

круто!

  Развернуть 1 комментарий
Mark Rudak Machine Learning Product Owner 30 октября в 14:26

Круто, спасибо!

Как ни приду в фото студию, постоянно говорят то сядь ровно,т о подбородок выше, то рот закрыть и т.д.
Однако не знаю насколько поза и т.д на фотке важны

Планируешь ли как-то над этим поработать?

  Развернуть 1 комментарий

@markrudak, 100% хочу побольше всяких проверок накидать, которые критичны для фото на визу.

У меня в беклоге такие проверки на качество лежат:

  • поза анфас, смотрит в камеру
  • рот закрыт, глаза открыты, подбородок виден
  • фото загружено норм качества
  • волосы не растрёпанные
  • хорошее освещение

Надо только в руки себя взять и сделать их 😁

  Развернуть 1 комментарий

@andreasCaG, отсутствие очков, волосы не закрывают уши… Это в США.

  Развернуть 1 комментарий

Привет!
Вообще офигенная тема, спасибо что поделился. Однозначно буду пользоваться

Но есть фича-реквест: показывать что ты будешь делать с фотографией и возможность выключать какие-то навороты

Например, фото на гринку (лотерею), если мне не изменяет память, имеет требование - БЕЗ программной замены фона. У тебя же бот фон заменяет, что влечёт к непригодности фотографии для лотереи

Кто-то может упустить из виду этот момент, загрузить такое фото в анкету, после чего анкету молча забреют:(

  Развернуть 1 комментарий

@Disanger, спасибо, не знал!
Сделаю в ближайшее время возможность отключения удаления фона

  Развернуть 1 комментарий

@Disanger, добавил возможность отключить удаление фона чекбоксом

  Развернуть 1 комментарий
Юлия Козина Помогаю большим компаниям тратить их деньги aka стратегический консалтинг 7 ноября в 08:39

🩷🩷🩷🩷🩷

  Развернуть 1 комментарий

Спасибо. Можно будет снести "Фото на документы" скачанную с торрентов сто лет назад.

Один момент важный: фото на лотерею грин-кард должны быть без обработки, только с обрезкой (так они всегда требовали). Не знаю насколько там умный парсер фоток с их стороны, но возможно будет блочить те, у которых фон убран, например. Возможно, это стоит сделать маленькой незаметной опцией

  Развернуть 1 комментарий

@spiridonov, Ку, добавил такую опцию в бота)

  Развернуть 1 комментарий

@andreasCaG, спасибо

Всей семье сделал фотки на DV, а вот мою обрабатывает странно - появляется какой-то артефакт на футболке и добавляются белые поля

  Развернуть 1 комментарий

@spiridonov,

появляется какой-то артефакт на футболке и добавляются белые поля

Такая проблема может произойти если на загруженной фотографии лицо слишком близко сфоткано. Я пытаюсь привести размер лица к требованиям визы и если на оригинальном фото слишком мало туловища или справа/слева не хватает плеча, то будут артефакты/белые поля

Пример плохого фото (сейчас сфоткался :D):

Тут вот внизу и справа белые полосы на фото, т.к. лицо сфоткано слишком близко
Тут вот внизу и справа белые полосы на фото, т.к. лицо сфоткано слишком близко

Вот пример хорошего (относительно :)) фото:

лицо далеко и белых полосок нет
лицо далеко и белых полосок нет

Я хочу добавить предупреждение в таком случае, но руки пока не дошли

  Развернуть 1 комментарий
Sergey Dolgov Продуктолог, Директор по цифровой трансформации, Продюсер проектов 4 ноября в 16:02

Очень круто! Только у меня на десктопной телеге обрезается по правому краю почему-то...

  Развернуть 1 комментарий

@sergeydolgovcom, Ого, прикольно..

Мне один фотосалон писал с похожей проблемой... У некоторых десктопов на винде есть какая-то проблема с webview, в котором открывается вебапп

Фотосалон решил свою проблему установкой "MicrosoftEdgeWebView2RuntimeInstallerX64":
https://developer.microsoft.com/en-us/Microsoft-edge/webview2/?form=MA13LH

  Развернуть 1 комментарий

@sergeydolgovcom, чисто ради интереса, а другие webapp (типо http://t.me/wallet) у вас норм работают?

  Развернуть 1 комментарий

😎

Автор поста открыл его для большого интернета, но комментирование и движухи доступны только участникам Клуба

Что вообще здесь происходит?


Войти  или  Вступить в Клуб