Char的顶点边界框顺序

时间:2017-06-19 16:06:25

标签: google-cloud-platform ocr google-cloud-vision

Google Vision API文档指出检测到的字符的顶点将始终采用相同的顺序:

// The bounding box for the symbol.
// The vertices are in the order of top-left, top-right, bottom-right,
// bottom-left. When a rotation of the bounding box is detected the rotation
// is represented as around the top-left corner as defined when the text is
// read in the 'natural' orientation.
// For example:
//   * when the text is horizontal it might look like:
//      0----1
//      |    |
//      3----2
//   * when it's rotated 180 degrees around the top-left corner it becomes:
//      2----3
//      |    |
//      1----0
//   and the vertice order will still be (0, 1, 2, 3).

但有时我可以看到不同的顶点顺序。以下是同一图像中两个具有相同方向的字符的示例:

[x:778 y:316  x:793 y:316  x:793 y:323  x:778 y:323 ]
0----1
|    |
3----2

[x:857 y:295  x:857 y:287  x:874 y:287  x:874 y:295 ]
1----2
|    |
0----3

为什么顶点的顺序不一样?而不是在文档中?

2 个答案:

答案 0 :(得分:2)

这似乎是Vision API中的一个错误。 解决方案是检测图像方向,然后按正确的顺序重新排序顶点。

不幸的是,Vision API不会在其输出中提供图像方向,因此我必须编写代码来检测它。

通过比较字符高度和宽度可以检测水平/垂直方向。高度通常大于宽度。

下一步是检测文本的方向。例如,在垂直图像方向的情况下,文本可能会从上到下或从下到上。

输出中的大多数字符似乎以自然的方式出现。因此,通过查看统计数据,我们可以检测文本方向。例如: 第1行有Y coord 1000 第2行有Y coord 900 第3行有Y coord 950 第4行有Y coord 800 我们可以看到图像是上下颠倒的。

答案 1 :(得分:0)

You must to reorder vertices of four poins(clockwise inverted from A to D):
A-B-C-D that:
A: min X, min Y
B: max X, min Y
C: max X, max Y
D: min X, max Y

And save to your rectangle object.

更新:您可以按照距离O(0,0)的距离为上面的A-B-C-D顺序排序顶点。