扫描预处理与结构化 OCR
HPDFScanPreprocess 接受调用方自有的 Graphics.TBitmap,返回私有的校正图像与可逆几何;HPDFScanOCRWorkflow 使用既有 IHPDFOCREngine 返回映射后的单词与语义布局
随附的验收能力范围使用 Delphi 与 Windows FPC/Lazarus;Tesseract OSD 进程适配器使用 Windows API,不属于原生 Linux headless 文档能力范围
校正与证据
校正顺序为调用方提供的透视四边形、顺时针方向与连续角度去斜,使用双线性逆采样,源区域之外填白
显式方向支持顺时针 0、90、180 与 270 度;自动方向需要检测器,证据不足或格式错误会被拒绝
HPDFScanOrientationTesseract 提供真实的 Windows Tesseract OSD 适配器,使用显式可执行文件与含 osd.traineddata 的 tessdata 目录;它在隐藏进程中不带 shell 直接启动 --psm 0 -l osd --dpi 300
默认原始方向余量阈值为 15;LastOrientationScore 保留真实的 Tesseract 分数,归一化置信度为分数除以 15 并钳制到 [0, 1];该归一化只是证据标度,不是校准过的概率
自动去斜采样真实暗像素,并比较有界角度范围内的行投影集中度;默认范围为 ±10 度、步长 0.25 度,证据阈值 0.2;证据不足时保留显式角度并记录 DeskewAccepted = False
显式去斜接受 -180 到 180 度的任意连续角度;自动搜索支持最大 45 度半径,步长须在 0.1 到 5 度之间
透视校正要求源 raster 内一个有限凸四边形,按左上、右上、右下、左下排序,并要求显式目标尺寸;不提供自动四边形检测
清理与有限预算
默认规范化瓦片局部阴影、移除连续的暗色边缘行列,并保留灰度输出;可选启用 3×3 中值去噪与二值输出
清理在不改变坐标原点的情况下把边缘像素变白;RemovedBorderPixels 报告受影响像素,均匀空白 raster 跳过 OCR
默认边界为每维 32768 像素、16,777,216 输入与输出像素、保守估计 512 MiB 工作分配、500000000 工作单元与 20000 个去斜样本;源像素还必须能装入有符号整数索引
该估计覆盖自有 raster 克隆、灰度数组、输出存储、样本与直方图;不约束调用方源位图、操作系统图形分配或任意外部 OCR 引擎
Tesseract OSD 单独约束像素与 stdout/stderr 合计,每 25 毫秒轮询取消与输出大小,在超时、取消或输出溢出时终止子进程;超时须在 1 到 3600000 毫秒之间,输出限制在 1024 到 1048576 字节之间
所有权与回滚
HPDFPreprocessScan 绝不编辑源位图;成功时由调用方释放 OutputBitmap,失败返回 nil 与带诊断证据的状态
检测器收到私有副本;取消在行、候选角度、进程等待与单词处理边界处协作;提供的 OCR 引擎必须遵循请求 Token 及其自身的进程与输出限制
工作流在每次失败后清空单词、语义布局与行四边形;适配器维护可变的最后报告状态,应串行使用
几何与结构化 OCR
raster 坐标使用左上原点与像素中心;齐次矩阵作用于列向量 (X, Y, 1),并除以第三个坐标;变换乘法 A × B 先应用 B
SourceToOutput 与 OutputToSource 保留完整的仿射或投影操作;使用公共辅助器时请映射独立的输入与输出记录
OCR 包装器把校正 raster 与未旋转的临时 PDF 边界交给引擎,验证 UTF-16 与有限单词矩形,丢弃置信度不足或无法映射的单词,并把矩形、基线与四个角映射回原始 raster
PageQuad 与语义边界考虑输入 PDF 页面框、DPI 与 0、90、180 或 270 度页面旋转;阅读顺序在校正后的正立坐标系中分析,然后才把几何映射回去
字符区间由 OCR 单词框插值得到,保持近似;行四边形保留轴对齐边界无法表达的旋转与透视
HPDFScanOCRLayoutToDOM 按分析顺序创建自有的可编辑堆栈,检测到的标题用 heading 节点,其余行用文本节点
示例
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 方向与空白拒绝、真实的五度自动去斜、噪声与阴影清理、透视角点、预算、取消、源不可变性,以及六个 raster 变体(含 37.5 度扫描)上的真实英文 OCR
真实 OCR 用例中每个被接受的单词角点都经逆变换映射回原并在 1e-6 校正 raster 像素内检查;FPC smoke 套件另外执行真实去斜、取消、分配限制、180 度与空白 OSD 以及真实英文 OCR 布局
生成的公共头文件在 C++Builder Win32 与 Win64x 下编译,包括托管 OCR 报告、默认接口参数、几何变换与 DOM 所有权
设置 HOTPDF_TESSERACT_EXE、OSD 模型的 HOTPDF_TESSDATA 与英文模型的 HOTPDF_OCR_TESSDATA 以启用外部引擎验证;缺失可选运行时设置不构成真实 OCR 验收