Adaptador de modelos locales de RapidOCR
Para inferencia ONNX en proceso con caché, use el adaptador nativo de DLL de RapidOCR con HPDFCreateRapidOCRDLLOCREngine y THPDFRapidOCRDLLOptions
El adaptador nativo proporciona valores preestablecidos THPDFRapidOCRDLLOptions.ForLanguage para chino simplificado y tradicional, inglés, idiomas latinos, japonés, coreano, idiomas cirílicos incluido el ruso, idiomas árabes e idiomas devanagari
HPDFRapidOCRRecognition proporciona un adaptador de proceso de Windows que implementa IHPDFOCREngine en compilaciones Win32 y Win64 de Delphi, C++Builder y FPC/Lazarus
Aprovisione Python con rapidocr y onnxruntime, el puente suministrado tools/OCR/rapidocr_tsv.py y modelos ONNX locales compatibles; el adaptador no instala paquetes ni descarga modelos, diccionarios o fuentes
Python se ejecuta en un proceso oculto separado, de modo que su arquitectura puede diferir de la de la aplicación que llama; su paquete ONNX Runtime debe coincidir con su propia arquitectura de Python
Sobrecargas de factoría
function HPDFCreateRapidOCREngine(const PythonExecutable, BridgeScript,
ModelDirectory: string; TimeoutMilliseconds: Cardinal = 60000): IHPDFOCREngine; overload;
function HPDFCreateRapidOCREngine(const PythonExecutable, BridgeScript,
ModelDirectory: string; const Options: THPDFRapidOCROptions): IHPDFOCREngine; overload;
La sobrecarga original de timeout sigue siendo compatible con el protocolo del puente existente y usa los tres nombres de archivo de modelo PP-OCRv4 por defecto; comprueba las rutas de ejecutable, script y directorio en la construcción, y comprueba la disponibilidad de los modelos en el worker
La sobrecarga de opciones comprueba cada modelo requerido, un diccionario opcional y la fuente local antes de devolver el adaptador; los archivos ausentes o las opciones inválidas lanzan EArgumentException antes de que empiece el reconocimiento
Las rutas relativas de modelo, diccionario y fuente se resuelven contra ModelDirectory; las rutas absolutas pueden apuntar a archivos aprovisionados por separado
Use modelos compatibles con la canalización de detección, clasificación y reconocimiento CTC de RapidOCR; un modelo de otra canalización de OCR puede requerir un preprocesado diferente y no puede elegirse 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 registro de opciones de la DLL nativa y no es un método del adaptador de Python
Aprovisione modelos y diccionarios de idioma locales con tools/Install-RapidOCRModels.ps1 -Destination C:/OCR/models -Language ch,cyrillic, o seleccione -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 tiempo de ejecución sigue siendo sin conexión, 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 de archivo 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 motor separado para las páginas o regiones que necesiten otro sistema de escritura
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 registro con THPDFRapidOCROptions.Default antes de sobrescribir campos
| Campo | Valor por defecto | 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 | Necesario solo cuando la clasificación de ángulo está habilitada |
CharacterDictionary | Vacío | Usa los metadatos de caracteres incrustados 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 de ángulo del texto; cuando está deshabilitada, no se requiere ni se pasa ningún modelo de clasificación |
IntraOpThreads | 1 | Hilos ONNX intraoperación, de 1 a 64, limitados al recuento de CPU lógicas del worker |
InterOpThreads | 1 | Hilos ONNX interoperación 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 puente selecciona explícitamente el backend de CPU de ONNX Runtime para todas las etapas y deshabilita las descargas automáticas; un diccionario de caracteres incrustado ausente exige un CharacterDictionary local aprovisionado
Ejemplo con modelos seleccionados 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 en un directorio temporal privado, arranca un worker local de Python y limpia sus manejadores de proceso y archivos temporales cuando la solicitud termina
La sobrecarga de 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 MaxWords y MaxTextCodeUnits de la solicitud
El puente solicita coordenadas de carácter y valida la geometría, la confianza y la cobertura de texto de cada carácter, y después emite cada línea reconocida completa con sus espacios y puntuación internos originales, los límites que la encierran en píxeles de la imagen original y la confianza media en el rango de 0 a 1
Cada línea emitida consume una plaza de MaxWords; los espacios internos cuentan para MaxTextCodeUnits, y publicar la línea entera evita que la capa de texto confunda el espaciado de las letras con el espaciado de las palabras
El espaciado se preserva del texto de línea del reconocedor; el texto que la detección divide en cajas separadas sigue dependiendo 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, confianza o caracteres de control inválidos, o presupuestos agotados, hacen fallar el reconocimiento y limpian los resultados parciales
Una página vacía tiene éxito con un array de palabras vacío; no se suministra línea base nativa, así que la capa de texto usa su fallback de geometría existente
La cancelación, el timeout y los tamaños de salida se sondean cada 25 milisegundos; un job de Windows contiene el worker y cualquier proceso hijo del intérprete, y la terminación espera hasta cinco segundos adicionales la limpieza de procesos
ApplyLoadedOCRTextLayer publica todas las páginas seleccionadas de forma atómica después de que el reconocimiento tenga éxito
La salida TSV está limitada a 64 MiB y la salida de diagnóstico a 1 MiB; los presupuestos de entrada y salida no imponen un tope duro al uso de memoria de modelos o inferencia ONNX
La inicialización de modelos ocurre en un proceso Python nuevo para cada solicitud y queda incluida en el plazo
Validación
Los runners compartidos de adaptadores Delphi y FPC cubren preflight de modelos, rutas personalizadas, clasificación opcional, Unicode, presupuestos, fallo del worker, cancelación y timeout; sus parámetros RapidOCR opcionales habilitan reconocimiento real y comprobaciones de ida y vuelta de PDF buscable
Use Tests/Delphi/Run-TesseractRecognitionTests.ps1 o Tests/Delphi/Run-TesseractFPCRecognitionTests.ps1 con -RapidOCRPython, -RapidOCRModelDirectory, -RapidOCRDetectionModel y -RapidOCRRecognitionModel
Véase Capas de texto OCR buscables para opciones de renderizado, mapeo de texto PDF Unicode, agrupación de contenido opcional y límites de conformidad