我正在使用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的容忍度)应放在同一行。感谢您阅读整个问题:)。 –