将单词表从图像转换为文本Vision API

问题描述 投票:0回答:1

Example table

因此,使用Google的Vision API,我正在尝试使用Nodejs转换此表。如果结果是像[hi: bonjour, bye: au revoir ...]这样的数组,那将是最好的。现在我遇到的问题是,当我上传这张图片时,我只能从谷歌那里得到文字及其坐标。使用某种hacky解决方案,我设法合并了这些词。例如:我设法将'au'和'revoir'合并为'au revoir',但我所拥有的解决方案绝对不可靠。

有人有这个问题的简单解决方案吗?我担心我的想法太难了,但我在网上找不到很多例子。

任何帮助将不胜感激。

我目前的代码:https://pastebin.com/jY5jDrqD(是的,这是一个烂摊子,不是很扎实)

node.js ocr vision
1个回答
2
投票

从它的外观来看,你有很好的格式化输入,所以它应该很容易获得可靠的结果。如果某些键或值很长并且占用多行,可能会变得更棘手。

解决这个问题的方法是:

  1. 获取您的实体集合并将它们分成行
  2. 对于每一行,按x位置对它们进行排序
  3. 确定哪些实体是键的一部分以及哪些实体是值的一部分

将它们分成行可能是最难的部分。

我建议按如下方式处理:

  1. 拿第一个实体,计算其上下y值与其总高度之间的中点,将其放在第一个行组中
  2. 取第二个实体并计算其中点,然后对每个行组检查第二个实体的中点是否位于其中。 (我建议将行组放在一个类中,将实体保存在其中的数组中,并且可以根据其中已有的实体报告该行的整体上下y值。您可能会发现平均实体中点和高度最适合这个,或者可能只是采取最大和最小,或者可能是一些更复杂的方法)
  3. 如果您的第二个实体在外面,那么它将被放置在一个新的行组中
  4. 对所有后续实体重复此操作,直到它们全部放在不同的行组中
  5. 您可以考虑进行第二次传递,以检查某些行组是否需要合并

您可能需要注意的事项 - 标点符号被识别为他们自己的实体并且落在两个行组的边缘。

按x排序应该是微不足道的,然后确定一行中的哪些实体是关键的,哪些是值,将归结为一些试验和错误,以找到一个实体的结束与开始之间的差距的合适阈值。下一个。

© www.soinside.com 2019 - 2024. All rights reserved.