Адаптер локальних моделей 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 перед перевизначенням полів

ПолеТиповоЗначення
DetectionModelch_PP-OCRv4_det_mobile.onnxЛокальна модель виявлення
RecognitionModelch_PP-OCRv4_rec_mobile.onnxЛокальна модель розпізнавання
ClassificationModelch_ppocr_mobile_v2.0_cls_mobile.onnxПотрібна лише тоді, коли увімкнено класифікацію кутів
CharacterDictionaryПорожньоВикористовує вбудовані метадані символів моделі розпізнавання; подайте локальний словник, коли модель не має таких метаданих
FontPathПорожньоЗводиться до %WINDIR%\Fonts\arial.ttf для контейнера результатів RapidOCR
UseAngleClassifierTrueУвімкнути класифікацію кутів тексту; коли вимкнено, модель класифікації не потрібна й не передається
IntraOpThreads1Внутрішньоопераційні потоки ONNX, від 1 до 64, з обмеженням кількістю логічних CPU робочого процесу
InterOpThreads1Міжопераційні потоки ONNX з тими самими обмеженнями
MaxPixels16777216Бюджет пікселів входу, від 1 до 67 108 864
TimeoutMilliseconds60000Загальний дедлайн запиту, від 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, групування за необов'язковим вмістом та межі конформності