OCR大多数时候都认识到<作为K.有办法解决这个问题吗?

时间:2018-04-12 15:19:21

标签: java android google-api ocr

我在此链接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

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

我在示例项目中使用的是同一个库的迁移版本,但从未遇到过问题。 https://developers.google.com/ml-kit/vision/text-recognition/

它读取mrz文本的速度过快且正确。在我尝试过基于Google Tesseract的OCR库之前,在入门级手机上结果并不理想。然后,我将OCR库替换为Google MLKit文本识别,它可以清晰,快速地读取护照/身份证文本。我已经解析了使用MRZInfo读取的文本并验证字段是否正确。

这是我的实现示例:

https://github.com/alimertozdemir/EPassportNFCReader/blob/master/app/src/main/java/com/alimert/mlkit/text/TextRecognitionProcessor.java

    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);
    }
}