Telegram-бот, который принимает PDF с QR-кодами и возвращает его с каждой страницей, обрезанной по квадрату вокруг QR-кода и текстовой подписи.
qr_crop_bot/
├── .env.example - шаблон переменных окружения
├── .gitignore
├── Dockerfile
├── docker-compose.yml
├── requirements.txt
├── main.py - точка входа
├── bot/
│ ├── handlers.py - Telegram-хэндлеры
│ └── messages.py - тексты сообщений
└── processing/
├── qr_detector.py - детект QR контурным методом
├── text_detector.py - OCR подписи через pytesseract
├── cropper.py - квадратная обрезка
└── pipeline.py - основной пайплайн обработки PDF
- Написать @BotFather ->
/newbot - Скопировать полученный
BOT_TOKEN
Минимальные требования: 2 CPU / 2 GB RAM (OCR при 300 DPI - ресурсоёмкая операция).
# Ubuntu/Debian - установка Docker
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp dockerВариант A - через git:
git clone <your-repo-url> qr_crop_bot
cd qr_crop_botВариант B - через scp (загрузить архив):
# На локальной машине:
scp qr_crop_bot.zip user@your-server-ip:~/
# На сервере:
unzip qr_crop_bot.zip
cd qr_crop_botcp .env.example .env
nano .env # вставить BOT_TOKEN и при необходимости изменить параметрыСодержимое .env:
BOT_TOKEN=123456789:AAXXXXXXXXXXXXXXXXXXXXXX
DPI=300
PADDING=20
BATCH_SIZE=50
docker compose up -d --buildБот запустится в фоне и будет автоматически перезапускаться при перезагрузке сервера
(restart: unless-stopped).
# Статус контейнера
docker compose ps
# Логи в реальном времени
docker compose logs -f
# Логи из файла (ротируются, хранятся в ./logs/bot.log)
tail -f logs/bot.log
# Остановить
docker compose down
# Пересобрать и перезапустить после изменений в коде
docker compose up -d --build
# Обновить только .env без пересборки образа
docker compose up -d| Переменная | По умолчанию | Описание |
|---|---|---|
BOT_TOKEN |
- | Токен от @BotFather, обязателен |
DPI |
300 |
Разрешение растеризации. Меньше 200 — QR может не найтись |
PADDING |
20 |
Отступ в пикселях от контента до края кропа |
BATCH_SIZE |
50 |
Страниц за один батч (уменьшить при нехватке RAM) |