一、問題定義
在真實(shí)業(yè)務(wù)中,版式固定但字段位置可變,通用 OCR 引擎無法穩(wěn)定輸出結(jié)構(gòu)化信息。因此需要一種“模板驅(qū)動(dòng)”的方法:在圖像坐標(biāo)系內(nèi)對(duì)字段做一次幾何定位,隨后把識(shí)別結(jié)果按坐標(biāo)與規(guī)則綁定,終返回業(yè)務(wù)系統(tǒng)可直接消費(fèi)的 JSON 或表結(jié)構(gòu)。
二、坐標(biāo)系與錨點(diǎn)設(shè)計(jì)
圖像坐標(biāo)系
以左上角為原點(diǎn),X 軸向右,Y 軸向下,單位像素。
錨點(diǎn)(Anchor)
在每個(gè)模板中選取 2~4 個(gè)不易變形的視覺特征(如 logo、表格線交點(diǎn)、公章外緣)作為錨點(diǎn)。通過求取錨點(diǎn)在當(dāng)前圖中的實(shí)際坐標(biāo),可解出模板到圖像的仿射變換矩陣 M。
M 的計(jì)算公式:
[x′, y′, 1]? = M · [x, y, 1]?
其中 M 為 3×3 矩陣,通過小二乘法求解。
三、字段 ROI 的生成
模板階段
在標(biāo)準(zhǔn)空白表單上,用可視化工具框選字段區(qū)域,記錄 ROI 的相對(duì)坐標(biāo)(錨點(diǎn)歸一化坐標(biāo))。
運(yùn)行階段
對(duì)輸入圖像執(zhí)行錨點(diǎn)檢測(cè) → 計(jì)算 M → 用 M 把相對(duì)坐標(biāo)映射為像素坐標(biāo) → 獲得每個(gè)字段的外接矩形。
四、雙閾值分割策略
幾何閾值
若錨點(diǎn)匹配誤差 > ε(經(jīng)驗(yàn)值 3~5 像素),則直接觸發(fā)模板失效報(bào)警,避免錯(cuò)誤解析。
置信度閾值
對(duì)識(shí)別結(jié)果使用字符級(jí)置信度,低于閾值的字段標(biāo)紅回傳人工復(fù)核。
五、規(guī)則引擎
正則校驗(yàn)
字段通過預(yù)定義正則表達(dá)式即時(shí)校驗(yàn),如統(tǒng)一社會(huì)信用代碼 18 位數(shù)字+字母。
跨字段邏輯
利用輕量級(jí)腳本引擎(Lua/Java[script])實(shí)現(xiàn)“金額 = 單價(jià) × 數(shù)量”等跨字段規(guī)則;計(jì)算失敗即回退人工。
六、模板生命周期
版本化
每個(gè)模板以 Git-like 版本號(hào)管理,支持灰度發(fā)布。
熱更新
新增字段或移動(dòng)坐標(biāo)可在 30 秒內(nèi)下發(fā)到端側(cè),無需重啟服務(wù)。
七、性能與精度
單張 A4 表單解析耗時(shí) < 300 ms(CPU 單核)。
字段召回率 ≥ 99.2%,率 ≥ 99.6%。
模板配置平均耗時(shí) 5 分鐘。
八、小結(jié)
自定義模板的核心是把“人工版式理解”翻譯成“坐標(biāo)+規(guī)則”的機(jī)器語言。通過錨點(diǎn)幾何校正、雙閾值過濾、可擴(kuò)展規(guī)則引擎及版本化運(yùn)維,系統(tǒng)能在版式變動(dòng)時(shí)以成本完成再適配,實(shí)現(xiàn)高可靠、低維護(hù)的結(jié)構(gòu)化輸出。