大多数情况下,OCR 将<识别为 K。有没有办法解决这个问题?



我写了一个代码来读取护照上的MRZ,使用谷歌文本Api从这个链接文本API代码实验室。

一切正常,但大多数情况下,它将护照上的 MRZ 读取

例如,OCR 假设读取

P<UTOERIKSSON<<ANNA<MARIA<<<<<<<<<<<<<<<<<<< L898902C<3UTO6908061F9406236ZE184226B<<<<<14

但它输出类似这样的东西

PKUTOERIKSSON ANNA<MARIAK<<KK<<<< L898902C<3UTO6908061F9406236ZE184226Bk<<<14

如何解决此问题?

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

它读取 mrz 文本的速度太快且太正确。在我尝试过基于 Google Tesseract 的 OCR 库之前,结果在我的入门级手机上并不好。然后我把OCR库换成了谷歌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);
    }
}

相关内容

最新更新