如何从图像中提取特定文本

时间:2018-11-15 09:02:42

标签: android ocr google-vision

我要从下图提取文本Arzt-Nr(654321161)下面的数字。
我使用了OCR阅读器,但它不按顺序随机抽取文本,因此很难添加逻辑以提取“ Arzt-Nr”以下的内容。

我使用了以下代码,但文本未按顺序排列。
有什么办法可以做到这一点?

 String text = "";
            for (int i = 0; i < detectedItems.size(); i++) {
                TextBlock item = detectedItems.valueAt(i);
                String detectedText = item.getValue();
                List<Line> lines = (List<Line>) item.getComponents();
                for (Line line : lines) {
                    List<Element> elements = (List<Element>) line.getComponents();
                    for (Element element : elements) {
                        String word = element.getValue();
                        text = text + " " + word;

                    }
                    text += "\n";
                }
            }

enter image description here

3 个答案:

答案 0 :(得分:0)

  

...它不是按顺序随机抽取文本,因此很难添加逻辑来提取“ Arzt-Nr”以下的数字。

每个单词都包含一个带有x,y坐标的边界框。因此,您的第一步是对返回的单词列表进行排序,以便逐行获取收据文本。 然后,使用正则表达式即可轻松提取“ Arzt-Nr”。

某些OCR API已经提供了对文本进行正确排序的选项,例如ocr.space具有receipt ocrtable ocr开关-启用后,它们可以对返回的文本进行正确排序,以便之后可以应用正则表达式。如果切换到“单列”检测,则Tesseract会执行相同的操作。但是对于Google Vision,您必须自己编写代码。

答案 1 :(得分:0)

尝试检查“ Arzt-Nr”位置之后单词的固定长度,还尝试检查所建立单词的模式。例如,如果您只需要数字ecc ...

答案 2 :(得分:0)

使用tesseract提取图像的tsv输出,并在关键字的位置下方找到最接近的文本。还可以看看tesseract的页面细分模式。

链接到Generating tsv 链接以使用page segmentation