Adaptador de modelos locais do RapidOCR

Para inferência ONNX em cache e em processo, use o adaptador nativo de DLL do RapidOCR com HPDFCreateRapidOCRDLLOCREngine e THPDFRapidOCRDLLOptions

O adaptador nativo disponibiliza predefinições THPDFRapidOCRDLLOptions.ForLanguage para chinês simplificado e tradicional, inglês, línguas latinas, japonês, coreano, línguas cirílicas incluindo o russo, línguas árabes e línguas devanágari

O HPDFRapidOCRRecognition disponibiliza um adaptador de processo para Windows que implementa IHPDFOCREngine em builds Delphi, C++Builder e FPC/Lazarus Win32 e Win64

Aprovisione o Python com rapidocr e onnxruntime, a ponte tools/OCR/rapidocr_tsv.py fornecida e modelos ONNX locais compatíveis; o adaptador não instala pacotes nem descarrega modelos, dicionários ou fontes

O Python corre num processo oculto separado, pelo que a arquitetura pode diferir da aplicação chamadora; o respetivo pacote ONNX Runtime tem de corresponder à arquitetura do próprio Python

Overloads da 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;

A overload original com timeout continua compatível com o protocolo existente da ponte e usa os três nomes de ficheiro predefinidos dos modelos PP-OCRv4; verifica os caminhos do executável, do script e do diretório na construção, e a disponibilidade dos modelos no worker

A overload com opções verifica todos os modelos necessários, um dicionário opcional e a fonte local antes de devolver o adaptador; ficheiros em falta ou opções inválidas geram EArgumentException antes de o reconhecimento começar

Caminhos relativos de modelos, dicionários e fontes resolvem-se contra ModelDirectory; caminhos absolutos podem apontar para ficheiros aprovisionados separadamente

Use modelos compatíveis com o pipeline de deteção, classificação e reconhecimento CTC do RapidOCR; um modelo de outro pipeline de OCR pode exigir pré-processamento diferente e não pode ser selecionado apenas por usar o formato ONNX

Seleção de modelos por idioma

O adaptador de processo Python continua a usar caminhos explícitos de THPDFRapidOCROptions; o ForLanguage pertence ao registo de opções da DLL nativa e não é um método do adaptador Python

Aprovisione modelos e dicionários locais de idiomas com tools/Install-RapidOCRModels.ps1 -Destination C:/OCR/models -Language ch,cyrillic, ou selecione -Language All para os nove perfis de idioma

O helper verifica hashes SHA256 fixados e coloca cada reconhecedor em <profile>/recognition.onnx com o respetivo <profile>/dictionary.txt correspondente; o reconhecimento em runtime continua offline, sem descargas automáticas

Para russo, use cyrillic/recognition.onnx e cyrillic/dictionary.txt; o chinês simplificado usa o perfil ch e o chinês 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';

Os nomes de ficheiro de raiz do detetor e do classificador acima correspondem aos modelos partilhados do helper de aprovisionamento; forneça em conjunto o modelo de reconhecimento e o dicionário correspondentes, e escolha um motor separado para páginas ou regiões que precisem de outro script

Opções e predefinições

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;

Inicialize o registo com THPDFRapidOCROptions.Default antes de sobrepor campos

CampoPredefiniçãoSignificado
DetectionModelch_PP-OCRv4_det_mobile.onnxModelo de deteção local
RecognitionModelch_PP-OCRv4_rec_mobile.onnxModelo de reconhecimento local
ClassificationModelch_ppocr_mobile_v2.0_cls_mobile.onnxNecessário apenas quando a classificação de ângulo está ativada
CharacterDictionaryVazioUsa os metadados de carateres incorporados do modelo de reconhecimento; forneça um dicionário local quando o modelo não tiver esses metadados
FontPathVazioResolve para %WINDIR%\Fonts\arial.ttf para o contentor de resultados do RapidOCR
UseAngleClassifierTrueAtiva a classificação de ângulo do texto; quando desativada, nenhum modelo de classificação é exigido ou passado
IntraOpThreads1Threads ONNX intra-operação, de 1 a 64, limitadas à contagem de CPUs lógicos do worker
InterOpThreads1Threads ONNX inter-operação com os mesmos limites
MaxPixels16777216Orçamento de píxeis de entrada, de 1 a 67,108,864
TimeoutMilliseconds60000Prazo total do pedido, de 1 a 3,600,000 milissegundos

A ponte seleciona explicitamente o backend CPU do ONNX Runtime para todas as fases e desativa as descargas automáticas; um dicionário de carateres incorporado em falta exige um CharacterDictionary local aprovisionado

Exemplo com modelos explicitamente selecionados

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, orçamentos e cancelamento

Cada pedido serializa o bitmap emprestado para um diretório temporário privado, arranca um worker Python local e limpa os handles de processo e os ficheiros temporários quando o pedido termina

A overload com opções verifica MaxPixels antes da serialização do bitmap; o worker também verifica as dimensões de entrada antes de carregar os modelos e recebe os limites MaxWords e MaxTextCodeUnits do pedido

A ponte pede coordenadas de carateres e valida a geometria, a confiança e a cobertura de texto de cada carater; depois emite cada linha reconhecida completa, com os espaços internos originais e a pontuação, os limites no espaço de píxeis da imagem original e a confiança média no intervalo de 0 a 1

Cada linha emitida consome um lugar de MaxWords; os espaços internos contam para MaxTextCodeUnits, e publicar a linha por inteiro impede que a camada de texto confunda o espaçamento entre letras com espaçamento entre palavras

O espaçamento é preservado a partir do texto de linha do reconhecedor; texto que a deteção divida em caixas separadas continua a depender da inferência espacial de intervalos entre palavras, e os leitores PDF externos podem reconstruir ou colapsar espaços repetidos durante a extração

Os carateres suplementares consomem duas unidades UTF-16; coordenadas, confiança, carateres de controlo inválidos ou orçamentos esgotados fazem o reconhecimento falhar e limpam os resultados parciais

Uma página vazia conclui com sucesso e um array de palavras vazio; nenhuma linha de base nativa é fornecida, pelo que a camada de texto usa o respetivo fallback de geometria existente

Cancelamento, timeout e tamanhos de saída são consultados a cada 25 milissegundos; um job do Windows contém o worker e quaisquer processos filhos do interpretador, e a terminação espera até mais cinco segundos pela limpeza dos processos

ApplyLoadedOCRTextLayer publica todas as páginas selecionadas atomicamente depois de o reconhecimento ter sucesso

A saída TSV está limitada a 64 MiB e a saída de diagnóstico a 1 MiB; os orçamentos de entrada e de saída não impõem um teto rígido ao uso de memória dos modelos ONNX ou da inferência

A inicialização dos modelos ocorre num novo processo Python para cada pedido e conta para o prazo

Validação

Os runners partilhados de adaptadores Delphi e FPC cobrem preflight de modelos, caminhos personalizados, classificação opcional, Unicode, orçamentos, falha do worker, cancelamento e timeout; os respetivos parâmetros opcionais do RapidOCR ativam verificações reais de reconhecimento e de round-trip de PDF pesquisável

Use Tests/Delphi/Run-TesseractRecognitionTests.ps1 ou Tests/Delphi/Run-TesseractFPCRecognitionTests.ps1 com -RapidOCRPython, -RapidOCRModelDirectory, -RapidOCRDetectionModel e -RapidOCRRecognitionModel

Veja Camadas de texto OCR pesquisáveis para opções de renderização, mapeamento de texto Unicode para PDF, agrupamento em conteúdo opcional e limites de conformidade