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