Skip to content

NiksKSS/TRPP_Project_Bot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ILOVEIMAGE❤️ Bot

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

Установка

1. Клонирование репозитория

git clone <репозиторий>
cd TRPP_Project_Bot

2. Установка poetry

# Linux/macOS
curl -sSL https://install.python-poetry.org | python3 -

# Windows (PowerShell)
(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | python -

# Проверка
poetry --version

3. Установка зависимостей

poetry install

4. Установка Tesseract OCR

macOS:

brew install tesseract

Linux (Ubuntu):

sudo apt-get install tesseract-ocr tesseract-ocr-rus

Windows: Скачайте и установите Tesseract с официального сайта.

Настройка

1. Создание Telegram-бота

  1. Откройте @BotFather в Telegram
  2. Отправьте команду /newbot
  3. Следуйте инструкциям для создания бота
  4. Скопируйте полученный токен

2. Настройка переменных окружения

Создайте файл .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 Отменить текущую операцию

Использование

Распознавание текста с фото

  1. Отправьте команду /photo_to_text
  2. Загрузите фотографию с текстом
  3. Бот распознает и отправит текст

Генерация изображения

  1. Отправьте команду /text_to_photo
  2. Опишите, какое изображение нужно сгенерировать (например: "кот на подоконнике")
  3. Ожидайте генерации (около 5 минут)
  4. Бот отправит сгенерированное изображение

Вопросы по изображению

  1. Отправьте команду /ask_from_image
  2. Загрузите фотографию
  3. Задайте вопрос о содержимом (например: "что изображено?", "какого цвета кошка?")
  4. Бот ответит на вопрос

Модели и их размеры

Бот использует следующие 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                      # Документация

Особенности реализации

FSM (Finite State Machine)

Бот использует конечные автоматы для управления состояниями диалога. Это позволяет:

  • Корректно обрабатывать последовательность действий (фото → вопрос)
  • Избегать конфликтов между разными командами
  • Очищать состояние после завершения операции

Временные файлы

Все загруженные и сгенерированные изображения сохраняются в папку temp/ и автоматически удаляются после завершения операции. Это предотвращает накопление мусора.

Асинхронность

Все операции с ML-моделями выполняются в отдельных потоках (asyncio.to_thread), чтобы не блокировать основной цикл обработки сообщений бота.

Устранение проблем

Ошибка "Can't load image processor"

Убедитесь, что модели Hugging Face загружены. При первом запуске они скачиваются автоматически.

Медленная генерация изображений

Генерация на CPU/MPS может занимать 5-10 минут. Для ускорения рекомендуется использовать GPU.

OCR не распознаёт текст

  • Убедитесь, что Tesseract установлен и путь в .env верный
  • Проверьте, что на изображении чёткий текст
  • Попробуйте другое изображение

Разработчики

  • NiksKSS — ML разработчик
  • vettta06 — Backend разработчик

Лицензия

MIT License

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors