Adaptador de modelos locales de RapidOCR
Para inferencia ONNX en proceso y en caché, use el adaptador de DLL nativa de RapidOCR con HPDFCreateRapidOCRDLLOCREngine y THPDFRapidOCRDLLOptions
El adaptador nativo ofrece presets THPDFRapidOCRDLLOptions.ForLanguage para chino simplificado y tradicional, inglés, lenguas latinas, japonés, coreano, lenguas cirílicas incluido el ruso, lenguas árabes y lenguas devanágari
HPDFRapidOCRRecognition provee un adaptador de proceso de Windows que implementa IHPDFOCREngine en builds Win32 y Win64 de Delphi, C++Builder y FPC/Lazarus
Aprovisione Python con rapidocr y onnxruntime, el bridge tools/OCR/rapidocr_tsv.py suministrado y modelos ONNX locales compatibles; el adaptador no instala paquetes ni descarga modelos, diccionarios o fuentes
Python corre en un proceso oculto separado, así que su arquitectura puede diferir de la de la aplicación que llama; su paquete de ONNX Runtime debe coincidir con la arquitectura de su propio Python
Overloads de la factory
function HPDFCreateRapidOCREngine(const PythonExecutable, BridgeScript,
ModelDirectory: string; TimeoutMilliseconds: Cardinal = 60000): IHPDFOCREngine; overload;
function HPDFCreateRapidOCREngine(const PythonExecutable, BridgeScript,
ModelDirectory: string; const Options: THPDFRapidOCROptions): IHPDFOCREngine; overload;
El overload original de timeout sigue siendo compatible con el protocolo existente del bridge y usa los tres nombres de archivo por defecto de los modelos PP-OCRv4; comprueba las rutas del ejecutable, del script y del directorio en la construcción, y comprueba la disponibilidad de los modelos en el worker
El overload con opciones comprueba cada modelo requerido, un diccionario opcional y la fuente local antes de devolver el adaptador; los archivos faltantes o las opciones inválidas lanzan EArgumentException antes de que empiece el reconocimiento
Las rutas relativas de modelos, diccionarios y fuentes se resuelven contra ModelDirectory; las rutas absolutas pueden apuntar a archivos aprovisionados por separado
Use modelos compatibles con el pipeline de detección, clasificación y reconocimiento CTC de RapidOCR; un modelo de otro pipeline de OCR puede requerir un preprocesamiento distinto y no se puede elegir solo porque use el formato ONNX
Selección de modelos por idioma
El adaptador de proceso de Python sigue usando rutas explícitas de THPDFRapidOCROptions; ForLanguage pertenece al record de opciones de la DLL nativa y no es un método del adaptador de Python
Aprovisione modelos y diccionarios de idiomas locales con tools/Install-RapidOCRModels.ps1 -Destination C:/OCR/models -Language ch,cyrillic, o elija -Language All para los nueve perfiles de idioma
El helper comprueba hashes SHA256 fijados y coloca cada reconocedor en <profile>/recognition.onnx con su <profile>/dictionary.txt correspondiente; el reconocimiento en runtime sigue siendo fuera de línea, sin descargas automáticas
Para ruso, use cyrillic/recognition.onnx y cyrillic/dictionary.txt; el chino simplificado usa el perfil ch y el chino tradicional usa chinese_cht
Models := THPDFRapidOCROptions.Default;
Models.DetectionModel := 'ch_PP-OCRv3_det_infer.onnx';
Models.RecognitionModel := 'cyrillic/recognition.onnx';
Models.CharacterDictionary := 'cyrillic/dictionary.txt';
Models.ClassificationModel := 'ch_ppocr_mobile_v2.0_cls_infer.onnx';
Los nombres raíz del detector y del clasificador de arriba coinciden con los modelos compartidos del helper de aprovisionamiento; suministre juntos el modelo de reconocimiento y el diccionario correspondientes, y elija un engine separado para las páginas o regiones que necesiten otro script
Opciones y valores por defecto
THPDFRapidOCROptions = record
DetectionModel: string;
RecognitionModel: string;
ClassificationModel: string;
CharacterDictionary: string;
FontPath: string;
UseAngleClassifier: Boolean;
IntraOpThreads: Integer;
InterOpThreads: Integer;
MaxPixels: Integer;
TimeoutMilliseconds: Cardinal;
class function Default: THPDFRapidOCROptions; static;
end;
Inicialice el record con THPDFRapidOCROptions.Default antes de sobrescribir campos
| Campo | Valor predeterminado | Significado |
|---|---|---|
DetectionModel | ch_PP-OCRv4_det_mobile.onnx | Modelo de detección local |
RecognitionModel | ch_PP-OCRv4_rec_mobile.onnx | Modelo de reconocimiento local |
ClassificationModel | ch_ppocr_mobile_v2.0_cls_mobile.onnx | Requerido solo cuando la clasificación de ángulo está habilitada |
CharacterDictionary | Vacío | Usa los metadatos de caracteres embebidos del modelo de reconocimiento; suministre un diccionario local cuando el modelo no tenga esos metadatos |
FontPath | Vacío | Se resuelve a %WINDIR%\Fonts\arial.ttf para el contenedor de resultados de RapidOCR |
UseAngleClassifier | True | Habilita la clasificación del ángulo del texto; al deshabilitarla no se requiere ni se pasa ningún modelo de clasificación |
IntraOpThreads | 1 | Threads intra-operación de ONNX, de 1 a 64, con tope en la cantidad de CPUs lógicas del worker |
InterOpThreads | 1 | Threads inter-operación de ONNX con los mismos límites |
MaxPixels | 16777216 | Presupuesto de píxeles de entrada, de 1 a 67,108,864 |
TimeoutMilliseconds | 60000 | Plazo total de la solicitud, de 1 a 3,600,000 milisegundos |
El bridge elige explícitamente el backend CPU de ONNX Runtime para todas las etapas y deshabilita las descargas automáticas; un diccionario de caracteres embebido faltante requiere un CharacterDictionary local aprovisionado
Ejemplo con modelos elegidos explícitamente
uses SysUtils, HPDFDoc, HPDFRapidOCRRecognition;
procedure AddLocalRapidOCRText(PDF: THotPDF);
var
Engine: IHPDFOCREngine;
Models: THPDFRapidOCROptions;
Layer: THPDFOCRTextLayerOptions;
Info: THPDFOCRTextLayerInfo;
begin
Models := THPDFRapidOCROptions.Default;
Models.DetectionModel := 'PP-OCRv6_det_small.onnx';
Models.RecognitionModel := 'PP-OCRv6_rec_small.onnx';
Models.UseAngleClassifier := False;
Engine := HPDFCreateRapidOCREngine(
'C:\OCR\Python\python.exe',
'C:\HotPDF\tools\OCR\rapidocr_tsv.py',
'C:\OCR\models', Models);
Layer := THPDFOCRTextLayerOptions.Default;
if not PDF.ApplyLoadedOCRTextLayer([0], Engine, Layer, Info) then
raise Exception.Create('Local RapidOCR text layer was not added');
end;
Resultados, presupuestos y cancelación
Cada solicitud serializa el bitmap prestado a un directorio temporal privado, arranca un worker local de Python y limpia sus handles de proceso y archivos temporales cuando la solicitud termina
El overload con opciones comprueba MaxPixels antes de serializar el bitmap; el worker también comprueba las dimensiones de entrada antes de cargar los modelos y recibe los límites de MaxWords y MaxTextCodeUnits de la solicitud
El bridge solicita las coordenadas de caracteres y valida la geometría, la confianza y la cobertura de texto de cada carácter; después emite cada línea reconocida completa con sus espacios internos y su puntuación originales, los bounds que la encierran en píxeles de la imagen original y la confianza media en el rango 0 a 1
Cada línea emitida consume un slot de MaxWords; los espacios internos cuentan para MaxTextCodeUnits, y publicar la línea completa evita que la capa de texto confunda el espaciado de letras con el espaciado de palabras
El espaciado se preserva del texto de línea del reconocedor; el texto que la detección divide en cajas separadas aún depende de la inferencia espacial de huecos entre palabras, y los lectores de PDF externos pueden reconstruir o colapsar los espacios repetidos durante la extracción
Los caracteres suplementarios consumen dos unidades UTF-16; coordenadas o confianza inválidas, caracteres de control o presupuestos agotados hacen fallar el reconocimiento y limpian los resultados parciales
Una página vacía tiene éxito con un arreglo de palabras vacío; no se suministra baseline nativa, así que la capa de texto usa su fallback geométrico existente
La cancelación, el timeout y los tamaños de salida se sondean cada 25 milisegundos; un job de Windows contiene al worker y a cualquier proceso hijo del intérprete, y la terminación espera hasta cinco segundos adicionales por la limpieza de procesos
ApplyLoadedOCRTextLayer publica todas las páginas seleccionadas atómicamente después de que el reconocimiento tenga éxito
La salida TSV se limita a 64 MiB y la de diagnóstico a 1 MiB; los presupuestos de entrada y salida no imponen un tope duro al uso de memoria de modelo o de inferencia de ONNX
La inicialización de modelos ocurre en un proceso nuevo de Python para cada solicitud y queda incluida en el plazo
Validación
Los runners compartidos de adaptadores de Delphi y FPC cubren preflight de modelos, rutas custom, clasificación opcional, Unicode, presupuestos, fallo del worker, cancelación y timeout; sus parámetros opcionales de RapidOCR habilitan reconocimiento real y comprobaciones de round-trip de PDF buscable
Use Tests/Delphi/Run-TesseractRecognitionTests.ps1 o Tests/Delphi/Run-TesseractFPCRecognitionTests.ps1 con -RapidOCRPython, -RapidOCRModelDirectory, -RapidOCRDetectionModel y -RapidOCRRecognitionModel
Consulte Capas de texto OCR buscables para las opciones de renderizado, el mapeo de texto Unicode a PDF, la agrupación de optional content y los límites de conformidad