Orquesta PP-OCRv6 medium: carga del engine escena, predict por imagen/página, parsing, rescate de texto vertical/diagonal (imágenes) y PNG anotado sin re-OCR.
main.py— entorno PaddleX, lifespan, CORS, FastAPIroutes.py— endpoints HTTP; upload documento → N páginas pending (OCR vía/infer)schemas.py— Pydantic (InferOptions,OCRResultconpage_index/page_count)storage.py— formatos (imagen + PDF/TIFF), PNG, raster PDF (pypdfium2) / TIFF (Pillow), topeMAX_PAGES=50ocr.py— device,get_ocr/get_recognizer, predict escena, warmupparsing.py— normaliza salida Paddle →OCRResultorientation.py— segundo pase vertical/diagonal (rescue)annotate.py— dibuja boxes/texto sobre el PNG desde elOCRResultguardado
Un solo engine escena (get_ocr): use_doc_orientation_classify=False, use_doc_unwarping=False, use_textline_orientation=True.
PDF/TIFF: raster en storage.py → cada página es un PNG que pasa por el mismo /infer.
Paddle solo clasifica línea 0°/180° y endereza crops muy altos. El rescate estima ángulo en el crop (minAreaRect), barre ±7.5/15 (y fallback de grilla) y reemplaza el texto solo si mejora la confianza (margen 0.02 en diagonales).
Se aplica solo a imágenes (no a páginas cuyo source_format es pdf/tiff), por coste CPU.
No expone selectores tiny/small ni HPI; no usa Official API cloud; no hace predict nativo multipágina Paddle sobre el PDF crudo.