大多数时候 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。有没有办法解决这个问题?的主要内容,如果未能解决你的问题,请参考以下文章