Telegram-бот для работы с изображениями с использованием технологий машинного обучения. Бот умеет распознавать текст с изображений, генерировать картинки по текстовому описанию и отвечать на вопросы по загруженному фото.
- 🔍 Распознавание текста (OCR) — извлечение текста с фотографий на русском и английском языках
- 🖼️ Генерация изображений — создание изображений по текстовому описанию с помощью Stable Diffusion XL
- 💡 Вопросы по изображению (VQA) — задавание вопросов о содержимом изображения и получение ответов
- aiogram 3.x — асинхронный фреймворк для Telegram-ботов
- PyTorch — библиотека для машинного обучения
- Transformers (Hugging Face) — модели для VQA (ViLT)
- Diffusers — библиотека для генерации изображений (Stable Diffusion XL)
- Tesseract OCR — движок оптического распознавания текста
- Pillow — работа с изображениями
- Pydantic — валидация настроек
- Python 3.11+
- macOS / Linux / Windows
- Telegram-аккаунт для создания бота через @BotFather
git clone <репозиторий>
cd TRPP_Project_Bot# Linux/macOS
curl -sSL https://install.python-poetry.org | python3 -
# Windows (PowerShell)
(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | python -
# Проверка
poetry --versionpoetry installmacOS:
brew install tesseractLinux (Ubuntu):
sudo apt-get install tesseract-ocr tesseract-ocr-rusWindows: Скачайте и установите Tesseract с официального сайта.
- Откройте @BotFather в Telegram
- Отправьте команду
/newbot - Следуйте инструкциям для создания бота
- Скопируйте полученный токен
Создайте файл .env в корне проекта:
TELEGRAM_BOT_TOKEN=your_bot_token_from_botfather
TESSERACT_PATH=/usr/local/bin/tesseract # путь к tesseract (macOS/Linux)
# или C:\Program Files\Tesseract-OCR\tesseract.exe (Windows)- Локально через poetry
# Вариант 1: одноразовый запуск
poetry run python -m bot.main
# Вариант 2: активация окружения
poetry shell
python -m bot.main- Через Docker
# Сборка образа
docker build -t telegram-ml-bot .
# Запуск
docker run -d --name telegram-ml-bot --env-file .env telegram-ml-botБот начнёт polling и будет готов к работе.
| Команда | Описание |
|---|---|
/start |
Запуск бота, приветственное сообщение |
/help |
Показать справку по командам |
/photo_to_text |
Распознать текст с загруженного фото |
/text_to_photo |
Сгенерировать изображение по текстовому описанию |
/ask_from_image |
Задать вопрос о содержимом изображения |
/cancel |
Отменить текущую операцию |
- Отправьте команду
/photo_to_text - Загрузите фотографию с текстом
- Бот распознает и отправит текст
- Отправьте команду
/text_to_photo - Опишите, какое изображение нужно сгенерировать (например: "кот на подоконнике")
- Ожидайте генерации (около 5 минут)
- Бот отправит сгенерированное изображение
- Отправьте команду
/ask_from_image - Загрузите фотографию
- Задайте вопрос о содержимом (например: "что изображено?", "какого цвета кошка?")
- Бот ответит на вопрос
Бот использует следующие ML-модели:
| Модель | Назначение | Примерный размер |
|---|---|---|
| Stable Diffusion XL Base 1.0 | Генерация изображений по тексту | ~6-7 GB |
| ViLT-B32 Finetuned VQA (dandelin/vilt-b32-finetuned-vqa) | Ответы на вопросы по изображению | ~1 GB |
| Tesseract OCR | Распознавание текста | Языковые данные: ~2-20 MB |
Модели загружаются автоматически при первом использовании соответствующей команды.
TRPP_Project_Bot/
├── bot/
│ ├── main.py # Точка входа, запуск бота
│ ├── router.py # Регистрация всех обработчиков
│ ├── handlers/ # Обработчики команд
│ │ ├── __init__.py
│ │ ├── start.py # Команда /start
│ │ ├── help.py # Команда /help
│ │ ├── photo_to_text.py # OCR функционал (/photo_to_text)
│ │ ├── text_to_photo.py # Генерация изображений (/text_to_photo)
│ │ ├── ask_from_image.py # VQA функционал (/ask_from_image)
│ │ └── cancel.py # Отмена операций (/cancel)
│ ├── states/ # FSM состояния (новая папка!)
│ │ ├── __init__.py
│ │ └── states.py # Состояния для диалогов
│ └── core/
│ ├── config.py # Настройки бота
│ ├── logging.py # Логирование
│ ├── ml_service.py # Сервис для работы с ML моделями
│ ├── session_manager.py # Управление временными файлами
│ └── ml_models/ # ML модели (код напарницы)
│ ├── ocr.py # Tesseract OCR
│ ├── text_to_image.py # Stable Diffusion XL
│ └── ask_from_image.py # ViLT VQA
├── temp/ # Временные файлы (автоочистка)
├── vilt-model/ # Локальная модель ViLT
├── .env # Переменные окружения
├── pyproject.toml # Зависимости Poetry
├── poetry.lock # Зафиксированные версии
├── Dockerfile # Сборка образа
├── docker-compose.yml # Оркестрация (опционально)
├── .gitignore # Исключения для git
└── README.md # Документация
Бот использует конечные автоматы для управления состояниями диалога. Это позволяет:
- Корректно обрабатывать последовательность действий (фото → вопрос)
- Избегать конфликтов между разными командами
- Очищать состояние после завершения операции
Все загруженные и сгенерированные изображения сохраняются в папку temp/ и автоматически удаляются после завершения операции. Это предотвращает накопление мусора.
Все операции с ML-моделями выполняются в отдельных потоках (asyncio.to_thread), чтобы не блокировать основной цикл обработки сообщений бота.
Убедитесь, что модели Hugging Face загружены. При первом запуске они скачиваются автоматически.
Генерация на CPU/MPS может занимать 5-10 минут. Для ускорения рекомендуется использовать GPU.
- Убедитесь, что Tesseract установлен и путь в
.envверный - Проверьте, что на изображении чёткий текст
- Попробуйте другое изображение
- NiksKSS — ML разработчик
- vettta06 — Backend разработчик
MIT License