Ale*_* R. 5 algorithm ocr text
因此,输出是表单中的框列表,(x1_i,y1_i,x2_i,y2_i)
指示左下角和右上角坐标。我想找到一个简单的、体面的基线算法来将这些框合并成行。所以期望的输出是:
["Hey how are you?" , "I'm great!"]
我见过一些与此类似的问题,但它们主要是关于直接(单向)文本,例如: 将附近的边界框合并为一个
我对此的想法是从每个盒子的质心计算向量,然后根据接近度和接近相同的方向进行盒子的合并。我想知道是否已经有这样的算法?我想尝试解决的极端情况是:
多角度的文字。
不重叠的盒子(比如[我][太棒了!]的盒子)。
以不同角度交叉文本(如上面的两行)。
我想找到一个使用 python 的快速简单的基线算法。
这是我能想到的符合您标准的最简单的算法。
定义一个函数,反映 中 的单词先于 中的单词score(b1, b2)
的可能性,分数越低越好(例如,意味着 的右边缘与 的左边缘相同)。对于每个框,定义为框最小化,并定义为框最小化。在边界框上用弧线形成图形,使得和。该图是一些简单路径的不相交并集。这些是你的台词。b1
b2
0
b1
b2
b
pred(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
开始进行线性实验)。f
g
编辑:单词边界框算法可能只能为您提供可靠的模半旋转方向。在这种情况下,定义score
为当两个框更有可能先于/后于彼此时它较低,形成一个有向图,其中每个框都有一条弧线连接到得分最低的两个框,丢弃弧线没有倒数弧,形成一个无向图,每个弧对都有一条边。后一个图由路径和循环的不相交并集组成。你必须弄清楚如何处理循环以及如何确定路径的方向。