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

CampoValor predeterminadoSignificado
DetectionModelch_PP-OCRv4_det_mobile.onnxModelo de detección local
RecognitionModelch_PP-OCRv4_rec_mobile.onnxModelo de reconocimiento local
ClassificationModelch_ppocr_mobile_v2.0_cls_mobile.onnxRequerido solo cuando la clasificación de ángulo está habilitada
CharacterDictionaryVacíoUsa los metadatos de caracteres embebidos del modelo de reconocimiento; suministre un diccionario local cuando el modelo no tenga esos metadatos
FontPathVacíoSe resuelve a %WINDIR%\Fonts\arial.ttf para el contenedor de resultados de RapidOCR
UseAngleClassifierTrueHabilita la clasificación del ángulo del texto; al deshabilitarla no se requiere ni se pasa ningún modelo de clasificación
IntraOpThreads1Threads intra-operación de ONNX, de 1 a 64, con tope en la cantidad de CPUs lógicas del worker
InterOpThreads1Threads inter-operación de ONNX con los mismos límites
MaxPixels16777216Presupuesto de píxeles de entrada, de 1 a 67,108,864
TimeoutMilliseconds60000Plazo 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