来自谷歌云视觉 API OCR 的逐行数据

Posted

技术标签:

【中文标题】来自谷歌云视觉 API OCR 的逐行数据【英文标题】:Line by line data from Google cloud vision API OCR 【发布时间】:2018-11-13 09:15:28 【问题描述】:

我已经扫描了银行对账单的 PDF(基于图像)。 谷歌视觉 API 能够非常准确地检测文本,但它返回文本块,我需要逐行文本(银行交易)。 知道该怎么做吗?

【问题讨论】:

块是否包含换行符,例如'\n'? 是的。另外,我有边界框的文字和坐标。 【参考方案1】:

我使用 Google Vision API - DOCUMENT_TEXT_DETECTION 逐行获取数据。 返回的数据结构如下: 结构可能会因不同的 API 而有所不同。


   'description': 'Some Text',
   'coordinates': [ P1, P2, P3, P4]

我使用的方法是计算所有单词的中点。


   'description': 'Some Text',
   'center':  x: (P1.x + P2.x + P3.x + P4.x)/4, 
               y: (P1.y + P2.y + P3.y + P4.y)/4 

现在我根据它们的中心坐标对这些词进行排序。在 X 和 Y 轴上。 但是要在 Y 坐标中排序,您需要一些 Y 容差变量。

例如,

word_1.center.y = 15
word_2.center.y = 18
word_3.center.y = 28

现在,您必须决定改变线条需要多少 Y 坐标值的差异(这取决于文档中使用的字体大小)。

(word_2.center.y - word_1.center.y) < Y-Tolerance # True ~ In same line
(word_3.center.y - word_2.center.y) < Y-Tolerance # False ~ In different line

在您获得同一行中的单词列表之后。根据它们的 X 坐标对它们进行排序。

如有任何其他疑问,请与我们联系。

【讨论】:

集群,乏味但可能是唯一的解决方案。 比使用“Y-Tolerance”更好的方法是计算最小和最大 Y 点并检查 word_2 的范围是否在 word_1 的范围内,反之亦然。如果是这样 => 行合并。使用 Y_Tolerance 当图片水平不够时,您可能会遇到问题。 公平点@MarkusG。但问题是整个页面的字体大小可能会有所不同。因此 Y 点的最小值和最大值可能会有很大的波动。【参考方案2】:

在 Google Vision API 中,有一个方法 fullTextAnnotation 返回一个全文字符串,\n 指定行尾,你可以试试。

【讨论】:

以上是关于来自谷歌云视觉 API OCR 的逐行数据的主要内容,如果未能解决你的问题,请参考以下文章

谷歌云视觉 API - Python

如何授权谷歌云视觉API android

使用谷歌云视觉 API

谷歌云视觉类别检测

使用谷歌云进行图像分类、裁剪和 OCR

Android 谷歌云视觉 API 获取 Json 并使用 Json 去另一个活动