ML Kit文本识别:如何根据图像中的位置获取文本?

Daa*_*tje 7 android kotlin firebase-mlkit google-mlkit

我正在为自己制作一个应用程序来扫描收据,并将数据放入数据库中。我尝试使用机器学习套件文本识别,效果非常好。但是,我在从识别的文本中提取数据时遇到问题。我将用一个例子来解释:

这是收据的格式,这就是我想要获取数据的方式:

+--------+--------+-------+-------+
| Amount |  Name  | Price | Total |
+--------+--------+-------+-------+
|      1 | Cheese |       | 1,15  |
|      1 | Eggs   |       | 2,59  |
|      2 | Milk   | 0,99  | 1,98  |
|      1 | Butter |       | 0,80  |
+--------+--------+-------+-------+
Run Code Online (Sandbox Code Playgroud)

然而,当运行文本识别时,它会以非常奇怪的方式格式化数据。例如,上面的收据将给出这些块:

Amount
Price
Name Cheese Eggs Milk 0,99
Butter
Total 1,15 2,59
1,98 0,80
Run Code Online (Sandbox Code Playgroud)

它似乎跳过了金额列中的单个数字,但我可以解决这个问题。但是,我不知道如何将上述数据解析为我想要的数据,尤其是将价格与名称连接起来。有没有办法改变块,以便只需要收据的行或列,而不是这种随机性?

编辑:当使用线条或元素而不是块时,我得到以下结果:

Amount
Price
Name
Cheese
Eggs
Milk
0,99
Butter
Total
1,15
2,59
1,98
0,80
Run Code Online (Sandbox Code Playgroud)

但是我仍然遇到同样的问题:如何将商品与正确的价格配对?

Hoi*_*Hoi 5

在这种情况下,尝试使用线条或元素而不是块(https://developers.google.com/ml-kit/vision/text-recognition/android#4.-extract-text-from-blocks-of-recognized-text),然后使用这些块的位置来重建表。

  • 您需要根据文本框坐标使用“element.cornerPoints”或“element.boundingBox”进行自己的关联 (4认同)