大多数时候 OCR 将 < 识别为 K。有没有办法解决这个问题?

Posted

技术标签:

【中文标题】大多数时候 OCR 将 < 识别为 K。有没有办法解决这个问题?【英文标题】:most times OCR is recognizing < as K. Is there a way around this? 【发布时间】:2018-09-22 19:50:26 【问题描述】:

我使用此链接Text Api Code Lab 使用 Google Text Api 编写了一个代码来读取护照上的 MRZ。

一切正常,但大多数情况下,它从护照上的机读区读取

例如 OCR 是假设读取

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

但它会输出类似这样的东西

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

我该如何解决这个问题?

【问题讨论】:

获得更好的 OCR 库?这就是为什么计算机视觉不是一门已解决的科学的部分原因,以及为什么对于需要可靠识别的事物,我们使用条形码和类似技术而不是文本。 你能为我推荐一个更好的 OCR 库吗? 【参考方案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);
    

【讨论】:

以上是关于大多数时候 OCR 将 < 识别为 K。有没有办法解决这个问题?的主要内容,如果未能解决你的问题,请参考以下文章

如何提高tesseract的OCR结果

我可以在 vue js 中创建一个带有循环的组件吗?有没有办法让它被识别为html标签?

OCR技术之阿里云产品

移动端车牌识别为优质app而存在

R中的列未被识别为变量[重复]

Vin码识别/车架号识别为APP功能增添亮点