我使用Google视觉检测带有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,将超出页面限制,我该如何将点转换为宽度和高度
谢谢^^
参考: here 并仅更改image_context = {“ language_hints”:[“ ja”]}
答案 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视觉进行水平文本检测的主要逻辑。我不能共享其余的代码,因为这是我公司的财产。所以,对不起。只是让大家知道这肯定是可能的。 :)