我正在使用Microsoft MODI
的VB6
來OCR圖像。 (我知道其他OCR工具,如正方體等,但我發現MODI比其他更準確)將OCR的非結構化文本轉換爲正確的文本
的圖像進行光學字符識別是這個樣子
和,文中我得到的OCR是後像下面那樣
Text1
Text2
Text3
Number1
Number2
Number3
這裏的問題是,對面欄的相應文本沒有保留。如何將Number1與Text1映射?
我只能想到這樣的解決方案。
MODI提供的所有OCR化的詞座標這樣
LeftPos = Img.Layout.Words(0).Rects(0).Left
TopPos = Img.Layout.Words(0).Rects(0).Top
所以要對齊同一行的話,我們可以匹配每個單詞的TopPos然後LeftPos排序。我們將獲得完整的產品線。所以我循環遍歷所有單詞,並將它們的文本以及左和頂部存儲在一個mysql表中。然後運行此查詢
SELECT group_concat(word ORDER BY `left` SEPARATOR ' ')
FROM test_copy
GROUP BY `top`
我的問題是,這頂位置不是每個字完全一樣,顯然會有幾個像素的差異。
我嘗試添加DIV 5
,用於合併5像素範圍內但不適用於某些情況的單詞。我也嘗試過在node.js中通過計算每個單詞的寬容然後通過LeftPos排序,但我仍然覺得這不是最好的方法。
更新: js代碼完成這項工作,但除了Number1有5個像素差異並且Text2在該行中沒有對應的情況。
有沒有更好的想法做到這一點?
'Text1'和'Number1'是否總是存在(沒有間隙或缺失值)? OCR軟件是否以任何順序將「Words」放在首位? – tcarvin
不,任何東西都可以在那裏,空白,特殊的字符等等,一旦這些單詞排成一行,我有其他的邏輯來解析出有意義的信息。我不確定訂單的情況,但是當我們通過LeftPos對其進行分類時,無論如何都無關緊要。問題出在TopPos上:前4-6的詞(考慮到3的容忍度)應放在同一行。感謝您閱讀整個問題:)。 –