如何使用带有水平线的google视觉或使用TEXT_DETECTION来检测文件中的文本来检测日语单词(PDF)

时间:2019-10-30 02:55:42

标签: python ocr cjk google-vision

我使用Google视觉检测带有PDF文件的文档文本,但是我的响应宽度有些麻烦。

  1. 响应的结果很好,但是一些符号在垂直线上检测到。我知道日本使用垂直书写,但是我不需要。我如何为此添加条件。

示例

[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. 如果不可能1。我可以更改功能类型为TEXT_DETECTION吗?

  2. 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,将超出页面限制,我该如何将点转换为宽度和高度

谢谢^^

参考: here 并仅更改image_context = {“ language_hints”:[“ ja”]}

https://cloud.google.com/vision/docs/pdf

1 个答案:

答案 0 :(得分:0)

我可能会迟到,但是第一种选择肯定是可能的。据我了解,您需要水平检测语言。为此,您可以做的是获取所有边界框,计算它们的中心,然后根据中心点位置对齐它们。

首先,创建一个字典,其中将包含所有检测到的单词或字符以及它们各自的边界(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轴对它们进行排序即可。

请记住一件事,您需要设置一个公差值以使同一行中的单词正确,否则,两行可能会相互混淆。另外,公差值还取决于字体大小。

这是使用Google视觉进行水平文本检测的主要逻辑。我不能共享其余的代码,因为这是我公司的财产。所以,对不起。只是让大家知道这肯定是可能的。 :)