我在此链接Text Api Code Lab上使用Google Text Api编写了一个代码来阅读护照上的MRZ。
一切都运转良好,但大部分时间都是<从护照上的机读区作为K,并且它没有读取机读区的所有88个字符。
例如,OCR应该是
P<UTOERIKSSON<<ANNA<MARIA<<<<<<<<<<<<<<<<<<<
L898902C<3UTO6908061F9406236ZE184226B<<<<<14
,
但输出的内容
PKUTOERIKSSON ANNA<MARIAK<<KK<<<<
L898902C<3UTO6908061F9406236ZE184226Bk<<<14
我该如何解决这个问题?
答案 0 :(得分:1)
我在示例项目中使用的是同一个库的迁移版本,但从未遇到过问题。 https://developers.google.com/ml-kit/vision/text-recognition/
它读取mrz文本的速度过快且正确。在我尝试过基于Google Tesseract的OCR库之前,在入门级手机上结果并不理想。然后,我将OCR库替换为Google MLKit文本识别,它可以清晰,快速地读取护照/身份证文本。我已经解析了使用MRZInfo读取的文本并验证字段是否正确。
这是我的实现示例:
private void filterScannedText(GraphicOverlay graphicOverlay, Text.Element element) {
GraphicOverlay.Graphic textGraphic = new TextGraphic(graphicOverlay, element, Color.GREEN);
scannedTextBuffer += element.getText();
String docPrefix;
if(scannedTextBuffer.contains(StringUtil.TYPE_PASSPORT) || scannedTextBuffer.contains(StringUtil.TYPE_ID_CARD)) {
graphicOverlay.add(textGraphic);
docPrefix = scannedTextBuffer.contains(StringUtil.TYPE_PASSPORT) ? StringUtil.TYPE_PASSPORT : StringUtil.TYPE_ID_CARD;
scannedTextBuffer = scannedTextBuffer.substring(scannedTextBuffer.indexOf(docPrefix));
finishScanning(scannedTextBuffer);
}
}