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

时间:2018-09-04 18:44:57

标签: node.js ocr vision

Example table

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

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

任何帮助将不胜感激。

我当前的代码:https://pastebin.com/jY5jDrqD(是的,很混乱,不是很牢固)

1 个答案:

答案 0 :(得分:2)

通过它的外观,您可以看到格式正确的输入,因此应该很容易获得可靠的结果。如果某些键或值很长并且占用多行,可能会变得更加棘手。

解决此问题的方法是:

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

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

我建议按以下方式进行处理:

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

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

用x进行排序应该是微不足道的,然后确定一行中的哪些实体是关键,哪些是值将经过反复试验才能找到一个合适的阈值,该阈值位于一个实体的末端与下一个开始。