我要从下图提取文本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";
}
}
答案 0 :(得分:0)
...它不是按顺序随机抽取文本,因此很难添加逻辑来提取“ Arzt-Nr”以下的数字。
每个单词都包含一个带有x,y坐标的边界框。因此,您的第一步是对返回的单词列表进行排序,以便逐行获取收据文本。 然后,使用正则表达式即可轻松提取“ Arzt-Nr”。
某些OCR API已经提供了对文本进行正确排序的选项,例如ocr.space具有receipt ocr和table ocr开关-启用后,它们可以对返回的文本进行正确排序,以便之后可以应用正则表达式。如果切换到“单列”检测,则Tesseract会执行相同的操作。但是对于Google Vision,您必须自己编写代码。
答案 1 :(得分:0)
尝试检查“ Arzt-Nr”位置之后单词的固定长度,还尝试检查所建立单词的模式。例如,如果您只需要数字ecc ...
答案 2 :(得分:0)
使用tesseract提取图像的tsv输出,并在关键字的位置下方找到最接近的文本。还可以看看tesseract的页面细分模式。
链接到Generating tsv 链接以使用page segmentation