Внешний OCR в заданиях JSON и C ABI

Операция ocr.layer принимает builtin-ascii, tesseract-cli, tesseract-dll, rapidocr-cli и rapidocr-dll; если engine не указан, действует встроенный ASCII-вариант по умолчанию

Определение возможностей перечисляет эти поддерживаемые адаптеры, но не утверждает, что внешние программы, библиотеки, языковые данные или ONNX-модели установлены на хосте выполнения

Пример Tesseract

{"schemaVersion":1,"type":"ocr.layer","pages":[0],"dpi":300,
 "minimumConfidence":0.7,"skipPagesWithText":true,"replaceExisting":false,
 "engine":"tesseract-cli",
 "engineOptions":{"executablePath":"C:/OCR/tesseract.exe",
   "tessDataDirectory":"C:/OCR/tessdata","language":"eng",
   "pageSegMode":6,"engineMode":3,"timeoutMilliseconds":30000,
   "maxPixels":16777216}}

Положите этот объект в массив operations файлового задания и добавьте пути input и output, либо передайте его напрямую в hpdf_document_execute_json_v1 с загруженным хэндлом и callback'ами binary/result

ДвижокОбязательные engineOptionsНеобязательные engineOptions
builtin-asciiНетengineOptions должен отсутствовать или быть пустым объектом
tesseract-cliexecutablePath, tessDataDirectorylanguage, pageSegMode, engineMode, timeoutMilliseconds, maxPixels
tesseract-dlllibraryPath, tessDataDirectorylanguage, pageSegMode, engineMode, timeoutMilliseconds, maxPixels
rapidocr-clipythonExecutable, bridgeScript, modelDirectorydetectionModel, recognitionModel, classificationModel, characterDictionary, fontPath, useAngleClassifier, intraOpThreads, interOpThreads, timeoutMilliseconds, maxPixels
rapidocr-dlllibraryPath, modelDirectorylanguage, detectionModel, recognitionModel, classificationModel, characterDictionary, useAngleClassifier, rightToLeft, threads, timeoutMilliseconds, maxPixels

Опции и локальные ресурсы

Внешним движкам нужен явный объект в engineOptions; неизвестные ключи, неверные типы JSON, пути или языковые строки с NUL, а также пустые обязательные значения отвергаются

У Tesseract по умолчанию language=eng, pageSegMode=3 и engineMode=3; режимы сегментации 0 и 2 текст не распознают и отвергаются, остальные режимы до 13 принимаются

engineMode принимает значения от 0 до 3; файлы trained data должны поддерживать выбранный режим, а многоязычные выражения Tesseract вроде eng+fra требуют соответствующих локальных моделей

RapidOCR CLI использует нативные имена моделей из THPDFRapidOCROptions.Default и по умолчанию ставит оба лимита потоков в 1; принимает явно указанные пути к словарю и шрифту, а настроенный bridge должен реализовать локальный TSV-контракт

RapidOCR DLL стартует с THPDFRapidOCRDLLOptions.ForLanguage(language), по умолчанию ch; языковые профили выбирают модель распознавания, словарь и направление чтения, а явные опции могут эти выборы переопределить

Имена файлов моделей разрешаются внутри modelDirectory по правилам нативных адаптеров; разрядность библиотеки должна совпадать с хост-процессом, а CLI-движок работает отдельным локальным процессом

Эти ресурсы устанавливайте и выбирайте явно; операция не ставит движки, не скачивает модели, не ищет произвольные исполняемые файлы и не обращается к удалённому OCR-сервису

Бюджеты и отмена

timeoutMilliseconds по умолчанию равен 60 000 и принимает целые от 1 до 3 600 000; фактический таймаут адаптера ограничен сверху значением budget.timeMilliseconds

maxPixels по умолчанию равен 16 777 216 и принимает целые от 1 до 67 108 864; фактический потолок — минимум из запрошенного значения, budget.pixels и budget.memoryBytes / 16

Фактический пиксельный потолок движка ограничивает и рендеринг страницы OCR перед распознаванием; бюджеты слов, содержимого и текста UTF-16 ограничены памятью, выделенной операции

Эти лимиты ограничивают настроенные буферы и ресурсы операции; выделение памяти моделями внешней DLL — не строгая квота на RSS процесса

Нативные вызовы берут Document.OperationCancellationToken для рендеринга и распознавания; отмена в C callback'ах опрашивается в кооперативных контрольных точках операции, ввода и вывода, а уже запущенный внешний движок может доработать до своего таймаута или следующей контрольной точки

Сбои локального CLI, неверный или неполный вывод TSV и таймауты адаптера отвергают операцию; настроенные лимиты времени и пикселей операции сохраняют структурированную категорию бюджетного сбоя

Вывод и транзакционное поведение

Результат сообщает engine, recognizedPages, skippedPages, acceptedWords и droppedWords; в поле engine попадает описательное имя нативного адаптера

minimumConfidence должен быть числом от 0 до 1, а skipPagesWithText и replaceExisting — булевыми значениями JSON

Принятые слова Unicode становятся невидимым текстом с отображениями ToUnicode и геометрией исходной страницы; скан-изображение остаётся в выводе, а исходный файл не меняется, если вызывающий код сам не публикует результат в тот же путь

Файловые задания сохраняют существующий файл назначения при сбое и публикуют результат через staging-файл в том же каталоге; мутации C ABI фиксируются только после успешной доставки и байтов PDF, и JSON-результата, с откатом при сбое и ответственностью вызывающего за освобождение уже доставленных байтов

Приёмочные тесты

Tests/Delphi/Run-JobOCRTests.ps1 на Win32 и Win64 прогоняет четыре профиля диспетчеризации адаптеров, некорректную конфигурацию, бюджеты пикселей и времени, отвержение частичных слов, сбой процесса, таймаут и сохранность назначения/источника

С реальными путями к исполняемому файлу и моделям Tesseract проверяется живое распознавание; независимые читатели pypdf и MuPDF сверяют Unicode-текст с возможностью поиска и неизменность видимых пикселей скана, а опциональная проверка реального Win64 ABI DLL убеждается в частичных callback'ах и откате неудавшейся операции

См. операции документа, адаптеры Tesseract, локальные модели RapidOCR, нативные библиотеки RapidOCR и слои OCR-текста с возможностью поиска