Major OCR infrastructure improvements: - Add persistent SQLite-based job queue for OCR tasks - Implement worker pool with process isolation and auto-restart - Add OCR engine selector dropdown (Tesseract/PaddleOCR) in upload zone - Optimize Tesseract preprocessing based on benchmark results (8x faster) - Add recognize_cif_optimized() with multi-strategy CIF extraction - Add Romanian CIF checksum validation - Increase Telegram long polling timeout from 10s to 30s Squashed commits: - feat(ocr): Implement persistent worker pool with SQLite job queue - feat(ocr): Add OCR engine selector dropdown to upload zone - perf(telegram): Increase long polling timeout from 10s to 30s - perf(ocr): Optimize Tesseract preprocessing based on benchmark results 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
4.0 KiB
4.0 KiB
Implementation Prompt: Persistent OCR Worker + Engine Selection + Job Queue
Context
Ești într-un git worktree separat (feature/ocr-persistent-worker-queue) pentru implementarea sistemului OCR îmbunătățit.
Branch: feature/ocr-persistent-worker-queue
Bază: main (commit 77d74a9)
Task Principal
Implementează sistemul OCR cu:
- Worker Persistent - PaddleOCR încărcat O DATĂ la startup (nu 30s per request)
- Engine Selection - Parametru API pentru
paddleocr,tesseract, sauauto - Tesseract Optimizat - Fix inversare imagine + OEM 1 + multi-PSM
- Windows IIS Compatible - Funcționează cu NSSM service management
- SQLite Job Queue - Procesare secvențială cu poziție în coadă și estimare timp
Planul Detaliat
Citește planul complet în:
/home/marius/.claude/plans/serene-growing-newell.md
Fișiere de Creat (Noi)
backend/modules/data_entry/services/ocr/__init__.pybackend/modules/data_entry/services/ocr/ocr_worker_pool.py- Manager ProcessPoolExecutorbackend/modules/data_entry/services/ocr/ocr_worker_process.py- Cod pentru worker processbackend/modules/data_entry/services/ocr/tesseract_engine.py- Tesseract optimizatbackend/modules/data_entry/services/ocr/job_queue.py- SQLite Job Queue Managerbackend/modules/data_entry/services/ocr/job_worker.py- Background worker pentru coadădata/ocr_queue/- Director pentru fișiere în coadă
Fișiere de Modificat
backend/modules/data_entry/schemas/ocr.py- Noi scheme OCRJobResponsebackend/modules/data_entry/routers/ocr.py- Endpoint-uri job queue + engine parambackend/modules/data_entry/services/ocr_service.py- Folosire worker poolbackend/modules/data_entry/services/image_preprocessor.py- Fix inversare Tesseractbackend/main.py- Startup/shutdown hooks pentru worker pool + job worker
Ordine Implementare (Faze)
Faza 1: Infrastructură Worker
- Creare
services/ocr/__init__.py - Creare
ocr_worker_pool.py - Creare
ocr_worker_process.py - Creare
tesseract_engine.py
Faza 2: SQLite Job Queue
- Creare
job_queue.pycu schema SQLite - Creare
job_worker.pybackground task - Creare director
data/ocr_queue/
Faza 3: API Integration
- Update
schemas/ocr.py- adăugare OCRJobResponse, OCRJobStatus - Update
routers/ocr.py- modificare /extract, adăugare /jobs/{id} - Update
main.py- startup job worker
Faza 4: Tesseract Fix
- Fix inversare în
image_preprocessor.py
Faza 5: Frontend (opțional)
- Update componenta OCR pentru polling
- Afișare poziție coadă și estimare timp
Criterii Succes
- Prima cerere OCR după restart: <5s (nu 30s)
- 10 cereri consecutive fără memory leak
?engine=tesseractproduce text lizibil?engine=paddleocrfuncționează independent- POST /extract returnează instant (<100ms) cu job_id
- GET /jobs/{id} returnează poziție corectă în coadă
- Estimare timp ±30% din realitate
- Jobs expiră și se șterg după 24h
- Windows: stop service → no orphan python.exe
Comenzi Utile
# Start backend (development)
cd /mnt/e/proiecte/ab-worktrees/ocr-persistent-worker-queue
./start-test.sh
# Verificare OCR
curl -X POST "http://localhost:8001/api/data-entry/ocr/extract?engine=auto" \
-H "Authorization: Bearer $TOKEN" \
-F "file=@test-receipt.jpg"
# Poll job status
curl "http://localhost:8001/api/data-entry/ocr/jobs/{job_id}" \
-H "Authorization: Bearer $TOKEN"
# Queue status
curl "http://localhost:8001/api/data-entry/ocr/queue/status" \
-H "Authorization: Bearer $TOKEN"
Notă Importantă
Acest worktree este izolat de main. După finalizare, SI DOAR DUPA TOATE TESTELE, OFERA POSIBILITATEA UTILIZATORULUI (NU FACE TU AUTOMAT):
- Commit toate schimbările
- Push branch-ul:
git push -u origin feature/ocr-persistent-worker-queue - Creează PR către main
Start
Începe cu Faza 1 - creează directorul services/ocr/ și primul fișier __init__.py.