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, преди да презапишете полетата
| Field | Default | Meaning |
|---|---|---|
DetectionModel | ch_PP-OCRv4_det_mobile.onnx | Локален detection модел |
RecognitionModel | ch_PP-OCRv4_rec_mobile.onnx | Локален recognition модел |
ClassificationModel | ch_ppocr_mobile_v2.0_cls_mobile.onnx | Необходим само когато класификацията на ъглите е включена |
CharacterDictionary | Празно | Използва вградените метаданни за символи на recognition модела; подайте локален речник, когато моделът няма такива метаданни |
FontPath | Празно | Сочи към %WINDIR%\Fonts\arial.ttf за контейнера с резултати на RapidOCR |
UseAngleClassifier | True | Включва класификация на текстовия ъгъл; когато е изключена, не се изисква и не се подава classification модел |
IntraOpThreads | 1 | ONNX intra-operation нишки, от 1 до 64, ограничени до броя логически CPU на worker-а |
InterOpThreads | 1 | ONNX inter-operation нишки със същите лимити |
MaxPixels | 16777216 | Бюджет на входните пиксели, от 1 до 67,108,864 |
TimeoutMilliseconds | 60000 | Общ краен срок на заявката, от 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 и лимити на съответствието