Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FlowLogix OCR Service FlowVision

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

доступен по адресу: http://95.214.63.194:8000/

🚀 Возможности

  • Распознавание русского языка
  • Извлечение структурированных данных:
    • Номер накладной
    • Дата
    • Отправитель/получатель
    • Описание груза
    • Масса и сумма
  • Поддержка форматов: JPEG, PNG, PDF
  • Высокая точность (>85% для стандартных накладных)

📋 Требования

  • 3.11 <= Python < 3.13 критично!
  • Docker (опционально)
  • 2 ГБ оперативной памяти

🛠️ Установка

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

может понадобиться подключиться к зеркалу

export HF_ENDPOINT=https://hf-mirror.com
pip 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.py

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

copy .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.py

Тестирование (локальный smoke-test)

python scripts/test_ocr.py --path static/image.jpg --doc-type waybill

Запуск API

uvicorn app.main:app --reload

🧠 Как работает программа (в целом)

Ниже описан основной синхронный “путь данных”, который используется и в scripts/test_ocr.py, и в API эндпоинте app.main.

  1. Вход: байты файла + MIME-тип (image/jpeg, image/png, application/pdf) + document_type (например, waybill).
  2. Preprocess (app/ocr/preprocess.py):
    • JPEG/PNG: декодирование через PIL → numpy → BGR (OpenCV-формат)
    • PDF: рендер первой страницы (PyMuPDF) → BGR
    • Улучшение изображения (enhance_image) для OCR
  3. OCR backend (app/ocr/pipeline.py):
    • easyocr (по умолчанию): Reader.readtext() на RGB-изображении
    • paddleocr (legacy): PaddleOCR.predict() на BGR-изображении
  4. Postprocess (app/ocr/postprocess.py):
    • Приведение raw-результата backend'а к единому формату: {"full_text": str, "lines": [{"text","confidence","bbox"}], "blocks": [...] }
  5. Processor (app/processors/*.py):
    • Логика конкретного типа документа (например, WaybillProcessor) извлекает структурированные поля регулярками/эвристиками.
  6. Выход: OCRResponse (app/base_models/response.py) со статусом, уверенностью, временем обработки и extracted_data.

🐳 Docker

docker-compose up -d

📡 API

Health Check

GET /health

Обработка документа

POST /api/v1/ocr/process

Форма:

  • file: изображение или PDF
  • document_type: waybill|invoice|act|upd

About

OCR для обработки накладных и других транспортных документов

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages