Микросервис для распознавания накладных и других документов в логистике.
доступен по адресу: http://95.214.63.194:8000/
- Распознавание русского языка
- Извлечение структурированных данных:
- Номер накладной
- Дата
- Отправитель/получатель
- Описание груза
- Масса и сумма
- Поддержка форматов: JPEG, PNG, PDF
- Высокая точность (>85% для стандартных накладных)
- 3.11 <= Python < 3.13 критично!
- Docker (опционально)
- 2 ГБ оперативной памяти
может понадобиться подключиться к зеркалу
export HF_ENDPOINT=https://hf-mirror.compip install -r requirements.txtесли с некоторыми пакетами ошибки,то:
pip install -r requirements.txt --trusted-host pypi.org --trusted-host files.pythonhosted.org --trusted-host download.pytorch.orgили использовать зеркало для установки оставшихся зависимостей
pip install --default-timeout=1000 sentencepiece albumentations pytorch-lightning fastapi uvicorn python-multipart -i https://pypi.tuna.tsinghua.edu.cn/simpleпроверка установки python -c "import torch; import transformers; import fastapi; print('✅ Все библиотеки установлены успешно!')"
donut-base
python scripts/download_model.pycopy .env.example .envДальше отредактируйте .env при необходимости.
загрузка конфигурации
scripts\load_env.ps1проверка python конфигурации
python -c "from configs.config import BASE_DIR, API_PORT, LOG_LEVEL; print(f'BASE_DIR: {BASE_DIR}'); print(f'API_PORT: {API_PORT}'); print(f'LOG_LEVEL: {LOG_LEVEL}')"для обучения данные переводятся к .jsonl
python scripts/prepare_data.pypython scripts/test_ocr.py --path static/image.jpg --doc-type waybilluvicorn app.main:app --reloadНиже описан основной синхронный “путь данных”, который используется и в scripts/test_ocr.py, и в API эндпоинте app.main.
- Вход: байты файла + MIME-тип (
image/jpeg,image/png,application/pdf) +document_type(например,waybill). - Preprocess (
app/ocr/preprocess.py):- JPEG/PNG: декодирование через PIL → numpy → BGR (OpenCV-формат)
- PDF: рендер первой страницы (PyMuPDF) → BGR
- Улучшение изображения (
enhance_image) для OCR
- OCR backend (
app/ocr/pipeline.py):easyocr(по умолчанию):Reader.readtext()на RGB-изображенииpaddleocr(legacy):PaddleOCR.predict()на BGR-изображении
- Postprocess (
app/ocr/postprocess.py):- Приведение raw-результата backend'а к единому формату:
{"full_text": str, "lines": [{"text","confidence","bbox"}], "blocks": [...] }
- Приведение raw-результата backend'а к единому формату:
- Processor (
app/processors/*.py):- Логика конкретного типа документа (например,
WaybillProcessor) извлекает структурированные поля регулярками/эвристиками.
- Логика конкретного типа документа (например,
- Выход:
OCRResponse(app/base_models/response.py) со статусом, уверенностью, временем обработки иextracted_data.
docker-compose up -dHealth Check
GET /healthОбработка документа
POST /api/v1/ocr/processФорма:
file: изображение или PDFdocument_type:waybill|invoice|act|upd