Адаптер локальних моделей RapidOCR
Для кешованого внутрішньопроцесного виводу ONNX використовуйте адаптер нативного DLL RapidOCR з HPDFCreateRapidOCRDLLOCREngine і THPDFRapidOCRDLLOptions
Нативний адаптер надає пресети THPDFRapidOCRDLLOptions.ForLanguage для спрощеної та традиційної китайської, англійської, латинських мов, японської, корейської, кирилічних мов, включно з російською, арабських мов і мов деванагарі
HPDFRapidOCRRecognition надає процесний адаптер Windows, що реалізує IHPDFOCREngine у збірках Delphi, C++Builder та FPC/Lazarus Win32 і Win64
Підготуйте Python з rapidocr і onnxruntime, наданий міст tools/OCR/rapidocr_tsv.py і сумісні локальні моделі 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;
Початкове перевантаження з тайм-аутом лишається сумісним з наявним протоколом моста та використовує три усталені імена файлів моделей PP-OCRv4; під час створення воно перевіряє шляхи виконуваного файла, скрипта й каталогу, а доступність моделей — у робочому процесі
Перевантаження з опціями перевіряє кожну потрібну модель, опційний словник і локальний шрифт перед поверненням адаптера; відсутні файли чи некоректні опції викликають EArgumentException до початку розпізнавання
Відносні шляхи моделей, словників і шрифтів розв'язуються відносно ModelDirectory; абсолютні шляхи можуть вказувати на окремо підготовлені файли
Використовуйте моделі, сумісні з конвеєром виявлення, класифікації та CTC-розпізнавання RapidOCR; модель з іншого OCR-конвеєра може вимагати іншої передобробки, і обирати її лише за фактом використання формату ONNX не можна
Вибір моделей для конкретних мов
Процесний адаптер Python надалі використовує явні шляхи THPDFRapidOCROptions; ForLanguage належить до запису опцій нативного DLL і не є методом адаптера Python
Підготуйте локальні мовні моделі та словники за допомогою tools/Install-RapidOCRModels.ps1 -Destination C:/OCR/models -Language ch,cyrillic або оберіть -Language All, щоб отримати всі дев'ять мовних профілів
Помічник перевіряє закріплені хеші SHA256 і розміщує кожен розпізнавач у <profile>/recognition.onnx з відповідним <profile>/dictionary.txt; розпізнавання під час виконання лишається офлайн без автоматичних завантажень
Для російської використовуйте cyrillic/recognition.onnx і cyrillic/dictionary.txt; спрощена китайська використовує профіль 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';
Наведені вище кореневі імена файлів детектора й класифікатора збігаються зі спільними моделями помічника підготовки; подавайте відповідні модель розпізнавання та словник разом і обирайте окремий рушій для сторінок чи регіонів, що потребують іншої писемності
Опції та усталені значення
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;
Ініціалізуйте запис через THPDFRapidOCROptions.Default перед перевизначенням полів
| Поле | Типово | Значення |
|---|---|---|
DetectionModel | ch_PP-OCRv4_det_mobile.onnx | Локальна модель виявлення |
RecognitionModel | ch_PP-OCRv4_rec_mobile.onnx | Локальна модель розпізнавання |
ClassificationModel | ch_ppocr_mobile_v2.0_cls_mobile.onnx | Потрібна лише тоді, коли увімкнено класифікацію кутів |
CharacterDictionary | Порожньо | Використовує вбудовані метадані символів моделі розпізнавання; подайте локальний словник, коли модель не має таких метаданих |
FontPath | Порожньо | Зводиться до %WINDIR%\Fonts\arial.ttf для контейнера результатів RapidOCR |
UseAngleClassifier | True | Увімкнути класифікацію кутів тексту; коли вимкнено, модель класифікації не потрібна й не передається |
IntraOpThreads | 1 | Внутрішньоопераційні потоки ONNX, від 1 до 64, з обмеженням кількістю логічних CPU робочого процесу |
InterOpThreads | 1 | Міжопераційні потоки ONNX з тими самими обмеженнями |
MaxPixels | 16777216 | Бюджет пікселів входу, від 1 до 67 108 864 |
TimeoutMilliseconds | 60000 | Загальний дедлайн запиту, від 1 до 3 600 000 мілісекунд |
Міст явно обирає процесорний бекенд ONNX Runtime для всіх етапів і вимикає автоматичні завантаження; відсутність вбудованого символьного словника вимагає підготовленого локального 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;
Результати, бюджети та скасування
Кожен запит серіалізує позичений бітмап у приватний тимчасовий каталог, запускає локальний робочий процес Python і прибирає його дескриптори процесу та тимчасові файли після завершення запиту
Перевантаження з опціями перевіряє MaxPixels перед серіалізацією бітмапа; робочий процес також перевіряє розміри входу перед завантаженням моделей і отримує ліміти MaxWords і MaxTextCodeUnits запиту
Міст запитує координати символів і валідує геометрію, довіру та покриття текстом кожного символу, а тоді видає кожен повний розпізнаний рядок з його початковими внутрішніми пробілами та пунктуацією, охоплювальними межами в пікселях початкового зображення і середньою довірою в діапазоні від 0 до 1
Кожен виданий рядок витрачає один слот MaxWords; внутрішні пробіли зараховуються до MaxTextCodeUnits, а публікація цілого рядка запобігає тому, щоб текстовий шар сплутав міжлітерні проміжки з міжсловними
Проміжки зберігаються з тексту рядка розпізнавача; текст, який виявлення розділило на окремі рамки, досі залежить від просторового виведення міжсловних проміжків, а зовнішні читачі PDF можуть відновлювати або згортати повторювані пробіли під час витягання
Додаткові символи витрачають дві одиниці UTF-16; недійсні координати, довіра, керуючі символи чи вичерпані бюджети роблять розпізнавання невдалим і очищають часткові результати
Порожня сторінка завершується успішно з порожнім масивом слів; нативна базова лінія не подається, тому текстовий шар використовує свій наявний геометричний резервний шлях
Скасування, тайм-аут і розміри виводу опитуються кожні 25 мілісекунд; завдання Windows вміщує робочий процес та будь-які дочірні процеси інтерпретатора, а завершення чекає до п'яти додаткових секунд на очищення процесів
ApplyLoadedOCRTextLayer атомарно публікує всі вибрані сторінки після успішного розпізнавання
Вивід TSV обмежений 64 МіБ, а діагностичний вивід — 1 МіБ; бюджети входу й виводу не накладають жорсткої межі на пам'ять моделей ONNX чи виведення
Ініціалізація моделі відбувається в новому процесі Python для кожного запиту та входить у дедлайн
Валідація
Спільні ранери адаптерів Delphi та FPC охоплюють попередню перевірку моделей, користувацькі шляхи, опційну класифікацію, Unicode, бюджети, збій робочого процесу, скасування та тайм-аут; їхні опційні параметри RapidOCR умикають справжнє розпізнавання та перевірки циклу збереження пошукового PDF
Використовуйте Tests/Delphi/Run-TesseractRecognitionTests.ps1 або Tests/Delphi/Run-TesseractFPCRecognitionTests.ps1 з -RapidOCRPython, -RapidOCRModelDirectory, -RapidOCRDetectionModel і -RapidOCRRecognitionModel
Дивіться Пошукові шари тексту OCR, щоб дізнатися про опції рендерингу, відображення тексту PDF у Unicode, групування за необов'язковим вмістом та межі конформності