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

CampoValor por defectoSignificado
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.onnxNecesario solo cuando la clasificación de ángulo está habilitada
CharacterDictionaryVacíoUsa los metadatos de caracteres incrustados 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 de ángulo del texto; cuando está deshabilitada, no se requiere ni se pasa ningún modelo de clasificación
IntraOpThreads1Hilos ONNX intraoperación, de 1 a 64, limitados al recuento de CPU lógicas del worker
InterOpThreads1Hilos ONNX interoperación 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 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