Legan Studio
Все статьи
~ 6 мин чтения

Распознавание изображений в боте MAX

Как добавить компьютерное зрение в бота MAX: от приёма фото до классификации, OCR и модерации. Архитектура, модели и подводные камни.

  • MAX
  • AI
  • сценарии

Бот в MAX принимает фото так же, как Telegram-бот: апдейт приходит на webhook, файл скачивается по ID. Дальше — задача компьютерного зрения: классификация, детекция, OCR или сравнение лиц. Разберём, как собрать такой пайплайн без лишней сложности и где он реально окупается.

Когда визуальное распознавание окупается

Computer vision в боте — не игрушка, а способ срезать ручной труд. Типичные сценарии:

  • Приём заявок по фото: пользователь шлёт скан паспорта, чека, накладной — бот извлекает текст через OCR и заполняет CRM.
  • Модерация UGC: классификатор отсеивает запрещённый контент до того, как менеджер увидит сообщение.
  • Классификация дефектов: фото товара или объекта прогоняется через модель, бот возвращает категорию проблемы.
  • Поиск по фото: эмбеддинг изображения сравнивается с базой каталога, возвращаются похожие позиции.

Если объём — менее 50 фото в день, обычно дешевле оставить ручную обработку. Выше — алгоритм окупается за месяц-два.

Как принять и обработать фото в MAX

Bot API в MAX повторяет логику Telegram: апдейт message_with_photo содержит массив размеров; берём самый крупный, запрашиваем getFile, скачиваем по file_path. Дальше — стандартный путь:

  1. Кладём файл во временное хранилище (S3-совместимое — Yandex Object Storage, MinIO).
  2. Отправляем задачу в очередь (Redis Streams, RabbitMQ) — синхронно ML-модель в webhook не зовём, иначе MAX отвалит таймаут.
  3. Воркер забирает задачу, прогоняет через модель, пишет результат.
  4. Бот отправляет ответ пользователю по chat_id, как только результат готов.

Такая схема выдерживает всплески нагрузки и даёт контролируемую задержку.

Какие модели использовать

Выбор зависит от задачи и бюджета:

  • OCR: Tesseract для простых сканов, EasyOCR для русского рукописного, Yandex Vision OCR — если нужна точность на чеках и документах.
  • Классификация: дообученный ResNet или EfficientNet — лёгкие модели, работают на CPU при объёме менее 1000 фото в день.
  • Детекция: YOLOv8 или RT-DETR — если нужно найти объекты на фото и обвести bbox.
  • Эмбеддинги для поиска: CLIP или DINOv2, индекс — Qdrant или pgvector в Postgres.
  • LLM-зрение: GigaChat Vision, YandexGPT Vision — для свободных вопросов по картинке без обучения собственной модели.

Архитектура продакшен-решения

Минимальный стек, который мы используем для проектов от 15 000 ₽: Go или Python на стороне бота, FastAPI-микросервис с моделью, Redis для очереди, Postgres для логов и истории, Object Storage для файлов. Всё в Docker, разворачивается через docker-compose на одной VPS или в Yandex Cloud.

Для GPU-моделей выгоднее арендовать спот-инстанс или использовать managed-сервис вроде YC ML Platform — собственная карта окупается только при потоке более 5000 запросов в сутки. CPU-инференс хорошо тюнится через ONNX Runtime или OpenVINO: на простых классификаторах latency падает в 2–4 раза.

Что важно учесть

  • Размер файлов: MAX ограничивает скачивание; крупные изображения сжимаем перед инференсом.
  • Приватность: если на фото — персональные данные, обработка попадает под 152-ФЗ. Нужны согласие пользователя и аудит хранения.
  • Качество входа: пользователи присылают перевёрнутые, размытые, плохо освещённые фото. Перед моделью ставим препроцессинг: автоповорот по EXIF, ресайз, бинаризацию для OCR.
  • Метрики: логируем confidence модели и долю отказов. Если уверенность ниже порога — бот вежливо просит переснять или передаёт оператору.
  • Стоимость инференса: при использовании облачных API считаем стоимость на 1000 запросов и закладываем в юнит-экономику.

Итого

Распознавание изображений в боте MAX — это связка приёма фото через Bot API, асинхронной очереди и ML-модели в отдельном сервисе. Технически задача стандартная, ключевое — правильно выбрать модель под объём и качество входных данных. Окупается там, где исключает ручную обработку: OCR документов, модерация, классификация дефектов. Запускается за 2–3 недели вместе со сбором датасета.

Частые вопросы

Когда распознавание изображений в боте MAX окупается?

Computer vision в боте — не игрушка, а способ срезать ручной труд. Типичные сценарии. Приём заявок по фото: пользователь шлёт скан паспорта, чека, накладной — бот извлекает текст через OCR и заполняет CRM. Модерация UGC: классификатор отсеивает запрещённый контент до того, как менеджер увидит сообщение. Классификация дефектов: фото товара или объекта прогоняется через модель, бот возвращает категорию проблемы. Поиск по фото: эмбеддинг изображения сравнивается с базой каталога. Если объём — менее 50 фото в день, дешевле оставить ручную обработку.

Как технически принять фото в боте MAX и обработать?

Bot API в MAX повторяет логику Telegram: апдейт message_with_photo содержит массив размеров; берём самый крупный, запрашиваем getFile, скачиваем по file_path. Дальше: кладём файл во временное хранилище (S3-совместимое — Yandex Object Storage, MinIO). Отправляем задачу в очередь (Redis Streams, RabbitMQ) — синхронно ML-модель в webhook не зовём, иначе MAX отвалит таймаут. Воркер забирает задачу, прогоняет через модель, пишет результат. Бот отправляет ответ пользователю по chat_id, как только результат готов. Схема выдерживает всплески нагрузки.

Какие модели использовать для распознавания изображений?

Зависит от задачи. OCR: Tesseract для простых сканов, EasyOCR для русского рукописного, Yandex Vision OCR — если нужна точность на чеках и документах. Классификация: дообученный ResNet или EfficientNet — лёгкие модели, работают на CPU при объёме менее 1000 фото в день. Детекция: YOLOv8 или RT-DETR — если нужно найти объекты на фото и обвести bbox. Эмбеддинги для поиска: CLIP или DINOv2, индекс — Qdrant или pgvector в PostgreSQL. LLM-зрение: GigaChat Vision, YandexGPT Vision — для свободных вопросов по картинке без обучения собственной модели.

Какой стек для production-распознавания изображений?

Минимальный набор. Go или Python на стороне бота. FastAPI-микросервис с моделью отдельно. Redis для очереди задач. PostgreSQL для логов и истории распознавания. Object Storage для файлов. Всё в Docker, разворачивается через docker-compose на одной VPS или в Yandex Cloud. Для GPU-моделей выгоднее арендовать спот-инстанс или использовать managed-сервис вроде YC ML Platform — собственная карта окупается только при потоке более 5000 запросов в сутки. CPU-инференс хорошо тюнится через ONNX Runtime или OpenVINO: на простых классификаторах latency падает в 2–4 раза.

Какие подводные камни при работе с фото в боте MAX?

Пять основных. Размер файлов — MAX ограничивает скачивание, крупные изображения сжимаем перед инференсом. Приватность — если на фото персональные данные, обработка попадает под 152-ФЗ, нужны согласие пользователя и аудит хранения. Качество входа — пользователи присылают перевёрнутые, размытые, плохо освещённые фото; перед моделью ставим препроцессинг (автоповорот по EXIF, ресайз, бинаризацию для OCR). Метрики — логируем confidence модели и долю отказов; если уверенность ниже порога, бот вежливо просит переснять. Стоимость инференса считаем на 1000 запросов.

Как работать с персональными данными на фото по 152-ФЗ?

Если на фото есть ПДн (паспорт, СНИЛС, лицо человека), обработка попадает под 152-ФЗ. Нужны: явное согласие пользователя на обработку фото с ПДн на отдельном шаге диалога, хранение на серверах в РФ (242-ФЗ), минимальный срок хранения (распознали — выбросили оригинал, оставили только структурированный результат), журнал доступа сотрудников к фото, удаление по запросу пользователя. Биометрия (распознавание лиц) — спец-категория ПДн, требует отдельного согласия. Лучшая практика — не хранить фото вообще, обрабатывать в памяти и удалять после OCR.