Предобработка сканов и структурный OCR

HPDFScanPreprocess принимает Graphics.TBitmap во владении вызывающего и возвращает приватную исправленную картинку плюс обратимую геометрию; HPDFScanOCRWorkflow использует существующий IHPDFOCREngine и возвращает отображённые слова и семантическую раскладку

Поставляемый приёмочный профиль использует Delphi и Windows FPC/Lazarus; процессный адаптер Tesseract OSD использует Windows API и не входит в нативный Linux-профиль headless-документов

Коррекции и свидетельства

Порядок коррекций: заданный вызывающим перспективный четырёхугольник, ориентация по часовой стрелке и deskew на непрерывный угол, с билинейной обратной выборкой и белой заливкой вне переданной исходной области

Явная ориентация поддерживает 0, 90, 180 и 270 градусов по часовой стрелке; автоматическая ориентация требует детектора и отвергает недостаточные или некорректные свидетельства

HPDFScanOrientationTesseract даёт настоящий адаптер Windows Tesseract OSD с явным исполняемым файлом и каталогом tessdata, содержащим osd.traineddata; он запускает --psm 0 -l osd --dpi 300 напрямую в скрытом процессе без шелла

Порог сырой ориентации по умолчанию — 15; LastOrientationScore хранит реальный счёт Tesseract, а нормированная уверенность — это счёт, делённый на 15 и зажатый в [0, 1]; эта нормировка — шкала свидетельств, а не калиброванная вероятность

Автоматический deskew сэмплирует реальные тёмные пиксели и сравнивает концентрацию проекций строк в ограниченном диапазоне углов; диапазон по умолчанию ±10 градусов с шагом 0,25 градуса и порогом свидетельств 0,2; при недостаточных свидетельствах сохраняется явный угол и записывается DeskewAccepted = False

Явный deskew принимает любой непрерывный угол от -180 до 180 градусов; автоматический поиск поддерживает радиус до 45 градусов, а шаг должен быть между 0,1 и 5 градусами

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

Очистка и конечные бюджеты

Умолчания нормализуют локальные по тайлам тени, удаляют сплошные тёмные крайние строки и столбцы и сохраняют полутоновый (grayscale) вывод; можно включить опциональное медианное шумоподавление 3×3 и бинарный вывод

Очистка белилит крайние пиксели, не меняя начала координат; RemovedBorderPixels сообщает затронутые пиксели, а однородные пустые растры пропускают OCR

Границы по умолчанию: 32768 пикселей на измерение, 16777216 входных и выходных пикселей, консервативная оценка рабочей аллокации 512 МиБ, 500000000 единиц работы и 20000 сэмплов deskew; пиксели источника вдобавок должны помещаться в знаковый целочисленный индекс

Оценка покрывает собственные клоны растра, полутоновые массивы, хранилище вывода, сэмплы и гистограммы; она не ограничивает исходный битмап вызывающего, графические аллокации операционной системы или произвольный внешний OCR-движок

Tesseract OSD отдельно ограничивает пиксели и объединённый stdout/stderr, опрашивает отмену и размер вывода каждые 25 миллисекунд и завершает дочерний процесс при таймауте, отмене или переполнении вывода; таймаут должен быть от 1 до 3 600 000 миллисекунд, а лимит вывода — от 1024 до 1048576 байт

Владение и откат

HPDFPreprocessScan никогда не правит исходный битмап; при успехе вызывающий освобождает OutputBitmap, при сбое возвращаются nil и статус с диагностическими свидетельствами

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

Workflow очищает слова, семантическую раскладку и четырёхугольники строк после каждого сбоя; адаптер хранит изменяемое состояние последнего отчёта и должен использоваться последовательно

Геометрия и структурный OCR

Координаты растра используют начало в левом верхнем углу и центры пикселей; однородная матрица действует на вектор-столбец (X, Y, 1) с делением на третью координату; произведение трансформаций A × B сначала применяет B

SourceToOutput и OutputToSource сохраняют полную аффинную или проективную операцию; при использовании публичных хелперов отображайте раздельные записи входа и выхода

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

PageQuad и семантические границы учитывают входную страницу PDF, DPI и поворот страницы на 0, 90, 180 или 270 градусов; порядок чтения анализируется в исправленной прямой системе координат до отображения геометрии назад

Интервалы символов интерполируются из боксов слов OCR и остаются приблизительными; четырёхугольники строк сохраняют поворот и перспективу, которые не выразить выровненными по осям границами

HPDFScanOCRLayoutToDOM создаёт собственный редактируемый стек в порядке анализа, с узлами заголовков для обнаруженных заголовков и текстовыми узлами для остальных строк

Пример

Options := HPDFDefaultScanOCRWorkflowOptions;
Options.Preprocess.AutoOrientation := True;
Detector := HPDFCreateTesseractOrientationDetector(
  TesseractExecutable, OSDModelDirectory,
  HPDFDefaultTesseractOrientationOptions);
Adapter := HPDFCreateScanPreprocessingOCREngine(
  ExistingOCREngine, Options, Detector);
if Adapter.Recognize(Request, Words, Diagnostic) then
begin
  Report := Adapter.LastReport;
  DOM := HPDFScanOCRLayoutToDOM(Report);
  try
    // Consume the editable semantic output here
  finally
    DOM.Free;
  end;
end;

Проверка

Не-GUI Delphi-набор проверяет явную ориентацию, обратимые непрерывные углы до ±179,25 градуса, реальную автоматическую ориентацию Tesseract 0/90/180/270 и отвержение пустых, реальную автоматическую коррекцию перекоса в пять градусов, очистку шума и теней, перспективные углы, бюджеты, отмену, неизменность источника и реальный английский OCR на шести вариантах растра, включая скан с наклоном 37,5 градуса

Каждый угол принятого слова в реальных OCR-случаях отображается обратно через обратное преобразование и проверяется с точностью 1e-6 пикселя исправленного растра; FPC smoke-набор дополнительно исполняет реальный deskew, отмену, лимиты аллокаций, OSD на 180 градусов и пустых, и реальную раскладку английского OCR

Сгенерированные публичные заголовки компилируются под C++Builder Win32 и Win64x, включая управляемые OCR-отчёты, аргументы интерфейсов по умолчанию, геометрические трансформации и владение DOM

Чтобы включить проверку внешнего движка, задайте HOTPDF_TESSERACT_EXE, HOTPDF_TESSDATA для модели OSD и HOTPDF_OCR_TESSDATA для английской модели; отсутствие опциональных рантайм-настроек не засчитывается как реальная OCR-приёмка