将有角度的文本 OCR 合并为线条

Ale*_* R. 5 algorithm ocr text

我有一个输出单词级检测的文本框检测算法。这是一个例子: 在此输入图像描述

因此,输出是表单中的框列表,(x1_i,y1_i,x2_i,y2_i)指示左下角和右上角坐标。我想找到一个简单的、体面的基线算法来将这些框合并成行。所以期望的输出是:

["Hey how are you?" , "I'm great!"]

我见过一些与此类似的问题,但它们主要是关于直接(单向)文本,例如: 将附近的边界框合并为一个

我对此的想法是从每个盒子的质心计算向量,然后根据接近度和接近相同的方向进行盒子的合并。我想知道是否已经有这样的算法?我想尝试解决的极端情况是:

  1. 多角度的文字。

  2. 不重叠的盒子(比如[我][太棒了!]的盒子)。

  3. 以不同角度交叉文本(如上面的两行)。

我想找到一个使用 python 的快速简单的基线算法。

Dav*_*tat 0

这是我能想到的符合您标准的最简单的算法。

定义一个函数,反映 中 的单词先于 中的单词score(b1, b2)的可能性,分数越低越好(例如,意味着 的右边缘与 的左边缘相同)。对于每个框,定义为框最小化,并定义为框最小化。在边界框上用弧线形成图形,使得和。该图是一些简单路径的不相交并集。这些是你的台词。b1b20b1b2bpred(b)b'score(b', b)succ(b)b'score(b, b')b->b'succ(b) = b'pred(b') = b

我不知道定义 的最佳方法score,但一种可能性是定义score(b1, b2) = f(distance(midpoint of b1's right side, midpoint of b2's right side) / max(b1's height, b2's height)) + g(angular distance(b1's angle, b2's angle)),其中f和是递增函数(我会从和g开始进行线性实验)。fg

编辑:单词边界框算法可能只能为您提供可靠的模半旋转方向。在这种情况下,定义score为当两个框更有可能先于/后于彼此时它较低,形成一个有向图,其中每个框都有一条弧线连接到得分最低的两个框,丢弃弧线没有倒数弧,形成一个无向图,每个弧对都有一条边。后一个图由路径和循环的不相交并集组成。你必须弄清楚如何处理循环以及如何确定路径的方向。