来自谷歌云视觉 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 的逐行数据的主要内容,如果未能解决你的问题,请参考以下文章