如何使用带有水平线的谷歌视觉检测日语单词或使用 TEXT_DETECTION 检测文件中的文本 (PDF)
Posted
技术标签:
【中文标题】如何使用带有水平线的谷歌视觉检测日语单词或使用 TEXT_DETECTION 检测文件中的文本 (PDF)【英文标题】:how to detect japanese word using google vision with horizontal line or using TEXT_DETECTION to Detect text in files (PDF) 【发布时间】:2020-02-25 07:47:05 【问题描述】:我使用谷歌视觉检测带有 PDF 文件的文档文本,但响应的宽度结果有些问题。
-
响应结果很好,但有些符号检测到垂直线。我知道日本使用垂直写作,但我不需要。我该如何为此添加条件。
例子
[a,b,c]
[x,y,z]
[1,2,3]
预期结果:[a,b,c],[x,y,z],[1,2,3] 或 [a],[b],[c],[x],[y], [z],[1],[2],[3]
实际结果:[a,b][x,y][1,2][c,z,3]
如果 1 是不可能的。我可以更改功能类型是 TEXT_DETECTION 吗?
bounding_box 有 4 个点
"x": 0.5579832,"y": 0.912114,
"x": 0.5579832,"y": 0.91567695,
“x”:0.53781515,“y”:0.91567695,
"x": 0.53781515,"y": 0.912114
页面有宽度和高度,但有些 x ,y 的值 > 1.0 它将超出页面限制我如何用点转换为宽度和高度
谢谢你^^
参考: https://cloud.google.com/vision/docs/pdf 并仅更改 image_context="language_hints": ["ja"]
https://medium.com/weareservian/my-tips-for-getting-help-with-google-cloud-platform-114b03f807dc
【问题讨论】:
你能举个例子吗? 请转换为 PDF 文件,我想用 2 个功能图像和 pdf 进行检测。图片没问题,因为我使用 TEXT_DETECTION 但使用 PDF 我做不到 1. Google vision 有时会预测在图像边缘裁剪的字符位置,因此它们的坐标可能小于 0 或大于宽度/高度,您需要使用max
和 min
函数来解决此问题。
2. Google API 仅适用于图像,因此我建议您先将 PDF 转换为图像,一个解决方案是 pdf2image
模块 (github.com/Belval/pdf2image)
3.您从示例中收到的坐标很奇怪,因为文本的位置是随机的(并非全是垂直的,也不是全是水平的)。在这种情况下,我认为您需要提取每个字符的位置(是的,它们确实会返回它),然后构建自己的算法来对它们进行排序。
【参考方案1】:
我可能会迟到,但第一个选项绝对是可能的。据我了解,您需要水平检测语言。为此,您可以做的是,获取所有边界框,计算它们的中心,然后根据中心点位置对齐它们。
首先,创建一个字典,其中包含所有检测到的单词或字符及其各自的边界(x1、x2、x3、x4 和 y1、y2、y3、y4)。使用这些边界,计算中心点。
以下是这样做的示例:
for bound in bounds:
y1 = bound.normalized_vertices[0].y * pdf_height
y2 = bound.normalized_vertices[1].y * pdf_height
y3 = bound.normalized_vertices[2].y * pdf_height
y4 = bound.normalized_vertices[3].y * pdf_height
x1 = bound.normalized_vertices[0].x * pdf_width
x2 = bound.normalized_vertices[1].x * pdf_width
x3 = bound.normalized_vertices[2].x * pdf_width
x4 = bound.normalized_vertices[3].x * pdf_width
y_center = (y1+y2+y3+y4)/4
x_center = (x1+x2+x3+x4)/4
获取所有顶点后,将它们放入列表中,并更新字典中存在的边界。现在,字典将包含单词及其各自的 x_center 和 y_center。得到这些积分后,根据自己的需要进行排序。
对我来说,我首先按照 y 轴升序对它们进行了排序。这样做,我能够对同一行中的单词进行排序,然后使用换行符分隔行。
为了得到正确的单词顺序,只需按照x轴排序即可。
请记住一件事,您需要设置一个容差值才能在同一行中获取正确的单词,否则两行可能会相互混淆。此外,容差值还取决于字体大小。
这是使用谷歌视觉进行横向文本检测背后的主要逻辑。我不能分享其余的代码,因为它是我公司的财产。所以,提前抱歉。只是让大家知道这当然是可能的。 :)
【讨论】:
以上是关于如何使用带有水平线的谷歌视觉检测日语单词或使用 TEXT_DETECTION 检测文件中的文本 (PDF)的主要内容,如果未能解决你的问题,请参考以下文章