RapidOCR адаптер за локални модели

За кеширано ONNX inference в рамките на процеса използвайте RapidOCR Native DLL адаптера с HPDFCreateRapidOCRDLLOCREngine и THPDFRapidOCRDLLOptions

Нативният адаптер предлага THPDFRapidOCRDLLOptions.ForLanguage преднастройки за опростен и традиционен китайски, английски, латински езици, японски, корейски, кирилски езици включително руски, арабски езици и езици с деванагари

HPDFRapidOCRRecognition предлага Windows process адаптер, имплементиращ IHPDFOCREngine в Delphi, C++Builder и FPC/Lazarus Win32 и Win64 компилации

Подгответе Python с rapidocr и onnxruntime, доставения tools/OCR/rapidocr_tsv.py bridge и съвместими локални ONNX модели; адаптерът не инсталира пакети и не тегли модели, речници или шрифтове

Python се изпълнява в отделен скрит процес, така че архитектурата му може да се различава от тази на повикващото приложение; ONNX Runtime пакетът му трябва да съответства на собствената Python архитектура

Фабрични претоварвания

function HPDFCreateRapidOCREngine(const PythonExecutable, BridgeScript,
  ModelDirectory: string; TimeoutMilliseconds: Cardinal = 60000): IHPDFOCREngine; overload;
function HPDFCreateRapidOCREngine(const PythonExecutable, BridgeScript,
  ModelDirectory: string; const Options: THPDFRapidOCROptions): IHPDFOCREngine; overload;

Оригиналното timeout претоварване остава съвместимо със съществувалия bridge протокол и използва трите имена на PP-OCRv4 модели по подразбиране; то проверява пътищата до изпълнимия файл, script-а и директорията при конструиране, а наличността на моделите — в worker-а

Претоварването с options проверява всеки необходим модел, опционален речник и локалния шрифт, преди да върне адаптера; липсващи файлове или невалидни options хвърлят EArgumentException, преди разпознаването да започне

Релативните пътища към модели, речник и шрифт се тълкуват спрямо ModelDirectory; абсолютните пътища могат да сочат към отделно подготвени файлове

Използвайте модели, съвместими с detection, classification и CTC recognition pipeline-а на RapidOCR; модел от друг OCR pipeline може да изисква различна предобработка и не може да бъде избран само защото използва ONNX формата

Избор на модели по език

Python process адаптерът продължава да използва изрични THPDFRapidOCROptions пътища; ForLanguage принадлежи на options record-а на native DLL-а и не е метод на Python адаптера

Подгответе локални езикови модели и речници с tools/Install-RapidOCRModels.ps1 -Destination C:/OCR/models -Language ch,cyrillic, или изберете -Language All за всичките девет езикови profile-а

Помощният script проверява закачените SHA256 хешове и поставя всеки recognizer в <profile>/recognition.onnx със съответстващия му <profile>/dictionary.txt; разпознаването по време на работа остава офлайн, без автоматични тегления

За руски използвайте cyrillic/recognition.onnx и cyrillic/dictionary.txt; опростеният китайски използва profile ch, а традиционният китайски — 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';

Основните имена на файлове на detector-а и classifier-а по-горе съвпадат със споделените модели на помощния script; подавайте съответстващите recognition модел и речник заедно, и изберете отделен engine за страници или области, които имат нужда от друга писменост

Options и стойности по подразбиране

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;

Инициализирайте record-а с THPDFRapidOCROptions.Default, преди да презапишете полетата

FieldDefaultMeaning
DetectionModelch_PP-OCRv4_det_mobile.onnxЛокален detection модел
RecognitionModelch_PP-OCRv4_rec_mobile.onnxЛокален recognition модел
ClassificationModelch_ppocr_mobile_v2.0_cls_mobile.onnxНеобходим само когато класификацията на ъглите е включена
CharacterDictionaryПразноИзползва вградените метаданни за символи на recognition модела; подайте локален речник, когато моделът няма такива метаданни
FontPathПразноСочи към %WINDIR%\Fonts\arial.ttf за контейнера с резултати на RapidOCR
UseAngleClassifierTrueВключва класификация на текстовия ъгъл; когато е изключена, не се изисква и не се подава classification модел
IntraOpThreads1ONNX intra-operation нишки, от 1 до 64, ограничени до броя логически CPU на worker-а
InterOpThreads1ONNX inter-operation нишки със същите лимити
MaxPixels16777216Бюджет на входните пиксели, от 1 до 67,108,864
TimeoutMilliseconds60000Общ краен срок на заявката, от 1 до 3,600,000 милисекунди

Bridge-ът изрично избира ONNX Runtime CPU backend-а за всички етапи и забранява автоматичните тегления; липсващ вграден речник със символи изисква подготвен локален CharacterDictionary

Пример с изрично избрани модели

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;

Резултати, бюджети и отмяна

Всяка заявка сериализира заетия bitmap в лична временна директория, стартира локален Python worker и почиства process handle-ите и временните файлове, когато заявката приключи

Претоварването с options проверява MaxPixels преди сериализацията на bitmap-а; worker-ът също проверява входните размери, преди да зареди моделите, и получава лимитите MaxWords и MaxTextCodeUnits на заявката

Bridge-ът иска координати на символите и валидира геометрията, confidence и текстовото покритие на всеки символ, след което издава всеки завършен разпознат ред с оригиналните му вътрешни интервали и пунктуация, обхващащите граници в пиксели на оригиналното изображение и средна confidence в диапазона 0 до 1

Всеки издаден ред консумира един слот от MaxWords; вътрешните интервали се броят към MaxTextCodeUnits, а публикуването на цели линии попречва на текстовия layer да обърка междубуквеното разстояние с разстояние между думи

Разстоянията се запазват от текста на реда на recognizer-а; текст, който detection-ът раздели на отделни кутии, все още зависи от пространственото предполагане на интервали между думи, а външни PDF четци може да възстановят или свият повтарящи се интервали при извличане

Допълнителните знаци консумират по две UTF-16 единици; невалидни координати, confidence, control знаци или изчерпани бюджети провалят разпознаването и изчистват частичните резултати

Празна страница приключва успешно с празен масив от думи; не се подава native baseline, така че текстовият layer използва съществуващия си geometry fallback

Отмяната, timeout-ът и размерите на изхода се анкетират на всеки 25 милисекунди; Windows job обхваща worker-а и евентуалните child процеси на интерпретатора, а терминирането изчаква до пет допълнителни секунди за почистване на процесите

ApplyLoadedOCRTextLayer публикува всички избрани страници атомично, след като разпознаването успее

TSV изходът е ограничен до 64 MiB, а диагностичният изход до 1 MiB; входните и изходните бюджети не налагат твърд таван върху паметта на ONNX модела или inference-а

Инициализацията на моделите става в нов Python процес за всяка заявка и влиза в крайния срок

Валидация

Споделените Delphi и FPC adapter runner-и обхващат model preflight, персонализирани пътища, опционална класификация, Unicode, бюджети, провал на worker-а, отмяна и timeout; техните опционални RapidOCR параметри включват истинско разпознаване и проверки за търсим PDF round-trip

Използвайте Tests/Delphi/Run-TesseractRecognitionTests.ps1 или Tests/Delphi/Run-TesseractFPCRecognitionTests.ps1 с -RapidOCRPython, -RapidOCRModelDirectory, -RapidOCRDetectionModel и -RapidOCRRecognitionModel

Вижте Searchable OCR Text Layers за options на рендирането, Unicode PDF text mapping, групиране в optional content и лимити на съответствието