Preprocesamiento de escaneos y OCR estructurado
HPDFScanPreprocess acepta un Graphics.TBitmap propiedad del caller y devuelve una imagen corregida privada más geometría invertible; HPDFScanOCRWorkflow usa un IHPDFOCREngine existente para devolver palabras mapeadas y layout semántico
El perfil de aceptación incluido usa Delphi y Windows FPC/Lazarus; el adaptador de proceso OSD de Tesseract usa APIs de Windows y no forma parte del perfil nativo de documentos headless de Linux
Correcciones y evidencia
El orden de corrección es el quad de perspectiva aportado por el caller, la orientación horaria y el deskew de ángulo continuo, con muestreo inverso bilineal y relleno blanco fuera de la región fuente 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 evidencia insuficiente o malformada
HPDFScanOrientationTesseract provee un adaptador real del OSD de Tesseract en Windows usando un ejecutable explícito y un directorio tessdata que contenga osd.traineddata; lanza --psm 0 -l osd --dpi 300 directamente en un proceso oculto sin shell
El umbral de margen de orientación raw por defecto es 15; LastOrientationScore conserva el score real de Tesseract y la confianza normalizada es el score dividido por 15, recortada a [0, 1]; esta normalización es una escala de evidencia, no una probabilidad calibrada
El deskew automático muestrea píxeles oscuros reales y compara la concentración de proyección por filas sobre un rango de ángulos acotado; el rango por defecto es ±10 grados en pasos de 0.25 grados, con umbral de evidencia de 0.2; con evidencia insuficiente se conserva el ángulo explícito y se 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 arriba-izquierda, arriba-derecha, abajo-derecha, abajo-izquierda dentro del raster fuente y dimensiones objetivo explícitas; no se provee detección automática de quads
Limpieza y presupuestos finitos
Los valores por defecto normalizan sombras locales por tile, eliminan filas y columnas de bordes oscuros contiguos y conservan la salida en escala de grises; se pueden activar el denoising de mediana 3 por 3 y la salida binaria
La limpieza pone en blanco los píxeles de borde sin cambiar el origen de coordenadas; RemovedBorderPixels reporta los píxeles afectados y los rasters uniformes en blanco 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; los píxeles fuente deben además caber en un índice entero con signo
La estimación cubre clones de raster propios, arreglos en escala de grises, almacenamiento de salida, muestras e histogramas; no limita el bitmap fuente del caller, las asignaciones de gráficos del sistema operativo ni un motor OCR externo arbitrario
El OSD de Tesseract limita por separado los píxeles y el stdout/stderr combinado, consulta la cancelación y el tamaño de salida cada 25 milisegundos y termina el proceso hijo ante timeout, cancelación o desborde 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 fuente; en éxito el caller libera OutputBitmap, mientras que en fallo devuelve nil y un status con evidencia de diagnóstico
Un detector recibe una copia privada; la cancelación es cooperativa en los límites de fila, ángulo candidato, espera de proceso y procesamiento de palabras; un motor OCR suministrado debe honrar el token de la petición y sus propios límites de proceso y salida
El workflow limpia palabras, layout semántico y quads de línea tras cada fallo; el adaptador mantiene estado mutable de último reporte y debe usarse en serie
Geometría y OCR estructurado
Las coordenadas del raster usan origen arriba-izquierda y centros de píxel; la matriz homogénea actúa sobre el vector columna (X, Y, 1), con división por su tercera coordenada; la multiplicación de transformaciones A × B aplica B primero
SourceToOutput y OutputToSource preservan la operación afín o proyectiva completa; mapea records de entrada y salida separados cuando uses los helpers públicos
El wrapper de OCR entrega al motor el raster corregido con bounds temporales de PDF sin rotar, valida rectángulos de palabras UTF-16 y finitos, descarta las palabras con confianza insuficiente o no mapeables y mapea rectángulos, líneas base y las cuatro esquinas de vuelta al raster original
PageQuad y los bounds semánticos consideran el page box del PDF entrante, el DPI y la rotación de página de 0, 90, 180 o 270 grados; el orden de lectura se analiza en el frame corregido y derecho antes de mapear la geometría de vuelta
Los intervalos de caracteres se interpolan desde los boxes de palabras del OCR y siguen siendo aproximados; los cuadriláteros de línea preservan la rotación y perspectiva que los bounds alineados a ejes no pueden representar
HPDFScanOCRLayoutToDOM crea un stack editable propio en 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
// Consume the editable semantic output here
finally
DOM.Free;
end;
end;
Verificación
La suite Delphi sin GUI comprueba la orientación explícita, ángulos continuos reversibles hasta ±179.25 grados, orientación automática real 0/90/180/270 con Tesseract y rechazo de páginas en blanco, corrección real de skew automático de cinco grados, limpieza de ruido y sombras, esquinas de perspectiva, presupuestos, cancelación, inmutabilidad de la fuente y 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 OCR reales se mapea de vuelta por 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 en blanco, y layout de OCR real en inglés
Los headers públicos generados compilan bajo C++Builder Win32 y Win64x, incluidos los reportes OCR administrados, argumentos de interfaz por defecto, transforms de geometría y ownership del DOM
Configura HOTPDF_TESSERACT_EXE, HOTPDF_TESSDATA para el modelo OSD y HOTPDF_OCR_TESSDATA para el modelo de inglés para activar la verificación con motor externo; los ajustes opcionales de runtime ausentes no establecen aceptación real de OCR