Preprocesado de escaneos y OCR estructurado
HPDFScanPreprocess acepta un Graphics.TBitmap propiedad del llamador y devuelve una imagen corregida privada junto con una geometría invertible; HPDFScanOCRWorkflow usa un IHPDFOCREngine existente para devolver palabras mapeadas y una disposición semántica
El perfil de aceptación incluido cubre Delphi y Windows FPC/Lazarus; el adaptador de proceso OSD de Tesseract usa APIs de Windows y no forma parte del perfil nativo Linux de documentos headless
Correcciones y evidencia
El orden de corrección es el quad de perspectiva suministrado por el llamador, la orientación en sentido horario y el deskew de ángulo continuo, con muestreo inverso bilineal y relleno blanco fuera de la región de origen suministrada
La orientación explícita soporta 0, 90, 180 y 270 grados en sentido horario; la orientación automática exige un detector y rechaza la evidencia insuficiente o malformada
HPDFScanOrientationTesseract aporta un adaptador real de Tesseract OSD para Windows que usa un ejecutable explícito y un directorio tessdata que contiene osd.traineddata; lanza --psm 0 -l osd --dpi 300 directamente en un proceso oculto, sin shell
El umbral de margen de orientación bruta por defecto es 15; LastOrientationScore conserva la puntuación real de Tesseract y la confianza normalizada es la puntuación dividida por 15, recortada a [0, 1]; esta normalización es una escala de evidencia, no una probabilidad calibrada
El deskew automático muestrea los píxeles oscuros reales y compara la concentración de la proyección por filas en un rango de ángulos acotado; el rango por defecto es ±10 grados en pasos de 0,25 grados, con un umbral de evidencia de 0,2; la evidencia insuficiente conserva el ángulo explícito y registra DeskewAccepted = False
El deskew explícito acepta cualquier ángulo continuo de -180 a 180 grados; la búsqueda automática soporta un radio de hasta 45 grados, y el paso debe estar entre 0,1 y 5 grados
La corrección de perspectiva exige un quad convexo finito ordenado como superior-izquierdo, superior-derecho, inferior-derecho, inferior-izquierdo dentro del raster de origen y unas dimensiones objetivo explícitas; no se ofrece detección automática de quads
Limpieza y presupuestos finitos
Los valores por defecto normalizan sombras locales por tile, eliminan filas y columnas de borde oscuras contiguas y conservan la salida en escala de grises; el denoising por mediana de 3 por 3 y la salida binaria son opcionales
La limpieza pone en blanco los píxeles del borde sin cambiar el origen de coordenadas; RemovedBorderPixels informa de los píxeles afectados y los rasters uniformemente en blanco se saltan el OCR
Los límites por defecto son 32768 píxeles por dimensión, 16777216 píxeles de entrada y salida, una estimación conservadora de asignación de trabajo de 512 MiB, 500000000 unidades de trabajo y 20000 muestras de deskew; además, los píxeles de origen deben caber en un índice entero con signo
La estimación cubre los clones de raster propios, los arrays en escala de grises, el almacenamiento de salida, las muestras y los histogramas; no acota el bitmap de origen del llamador, las asignaciones gráficas del sistema operativo ni un motor OCR externo arbitrario
Tesseract OSD acota por su cuenta los píxeles y la salida combinada stdout/stderr, sondea la cancelación y el tamaño de salida cada 25 milisegundos y termina el proceso hijo en caso de timeout, cancelación o desbordamiento de salida; el timeout debe estar entre 1 y 3600000 milisegundos y el límite de salida entre 1024 y 1048576 bytes
Propiedad y rollback
HPDFPreprocessScan nunca edita el bitmap de origen; en caso de éxito el llamador libera OutputBitmap, mientras que el fallo devuelve nil y un estado con evidencia de diagnóstico
Un detector recibe una copia privada; la cancelación es cooperativa en los bordes de fila, de ángulo candidato, de espera de proceso y de procesado de palabras; un motor OCR suministrado debe honrar el token de la petición y sus propios límites de proceso y de salida
El workflow borra palabras, disposición semántica y quads de línea tras cada fallo; el adaptador mantiene un estado mutable de último informe y debe usarse en serie
Geometría y OCR estructurado
Las coordenadas del raster usan un origen superior-izquierdo y centros de píxel; la matriz homogénea actúa sobre el vector columna (X, Y, 1), dividiendo por su tercera coordenada; en el producto de transformaciones A × B se aplica B primero
SourceToOutput y OutputToSource preservan la operación afín o proyectiva completa; usa registros de entrada y salida separados al emplear los helpers públicos
El wrapper de OCR entrega al motor el raster corregido con los bounds temporales del PDF sin rotar, valida los rectángulos UTF-16 y finitos de las palabras, descarta las palabras con confianza insuficiente o no mapeables y mapea de vuelta rectángulos, baselines y las cuatro esquinas al raster original
PageQuad y los bounds semánticos tienen en cuenta el page box del PDF de entrada, el DPI y la rotación de página de 0, 90, 180 o 270 grados; el orden de lectura se analiza en el marco corregido y vertical antes de mapear la geometría de vuelta
Los intervalos de caracteres se interpolan a partir de las cajas de palabras del OCR y siguen siendo aproximados; los cuadriláteros de línea preservan la rotación y la perspectiva que los bounds alineados a ejes no pueden representar
HPDFScanOCRLayoutToDOM crea un stack editable propio en el orden analizado, usando nodos de encabezado para los encabezados detectados y nodos de texto para las demás líneas
Ejemplo
Options := HPDFDefaultScanOCRWorkflowOptions;
Options.Preprocess.AutoOrientation := True;
Detector := HPDFCreateTesseractOrientationDetector(
TesseractExecutable, OSDModelDirectory,
HPDFDefaultTesseractOrientationOptions);
Adapter := HPDFCreateScanPreprocessingOCREngine(
ExistingOCREngine, Options, Detector);
if Adapter.Recognize(Request, Words, Diagnostic) then
begin
Report := Adapter.LastReport;
DOM := HPDFScanOCRLayoutToDOM(Report);
try
// Consumir aquí la salida semántica editable
finally
DOM.Free;
end;
end;
Verificación
La suite Delphi sin GUI comprueba la orientación explícita, los ángulos continuos reversibles hasta ±179,25 grados, la orientación automática real de Tesseract en 0/90/180/270 y el rechazo de páginas en blanco, la corrección real de inclinación de cinco grados, la limpieza de ruido y sombras, las esquinas en perspectiva, los presupuestos, la cancelación, la inmutabilidad del origen y un OCR real en inglés sobre seis variantes de raster, incluido un escaneo de 37,5 grados
Cada esquina de palabra aceptada en los casos de OCR real se mapea de vuelta mediante la transformación inversa y se comprueba dentro de 1e-6 píxeles del raster corregido; la suite smoke de FPC ejecuta además deskew real, cancelación, límites de asignación, OSD de 180 grados y de página en blanco, y disposición de OCR real en inglés
Los headers públicos generados compilan con C++Builder Win32 y Win64x, incluidos los informes OCR gestionados, los argumentos de interfaz por defecto, las transformaciones de geometría y la propiedad del DOM
Configura HOTPDF_TESSERACT_EXE, HOTPDF_TESSDATA para el modelo OSD y HOTPDF_OCR_TESSDATA para el modelo en inglés para habilitar la verificación con motor externo; la ausencia de estos ajustes opcionales de runtime no establece la aceptación del OCR real