【问题标题】:Text Recognition not accurate on Android device using camera and Firebase ML Kit使用相机和 Firebase ML Kit 的 Android 设备上的文本识别不准确
【发布时间】:2019-07-08 05:47:13
【问题描述】:

我在 Android 设备上使用 Firebase ML Kit 使用相机进行文本识别,而无需单击图像。 我通过接收帧并从帧中获取位图来使用它。 然后将位图传递给文本识别方法。 但识别出的文字并不准确。此外,它不断变化,但从未给出准确的结果。 请让我知道我做错了什么。

获取帧和位图:

  public void onSurfaceTextureUpdated(SurfaceTexture surface) {
            frame = Bitmap.createBitmap(textureView.getWidth(), textureView.getHeight(), Bitmap.Config.ARGB_8888);
            textureView.getBitmap(frame);

            Bitmap emptyBitmap = Bitmap.createBitmap(textureView.getBitmap(frame).getWidth(), textureView.getBitmap(frame).getHeight(), textureView.getBitmap(frame).getConfig());
            if (textureView.getBitmap(frame).sameAs(emptyBitmap)) {
                // myBitmap is empty/blank
                System.out.println(" empty !!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
            } else {
                System.out.println(" bitmap");


                        bitmap = textureView.getBitmap(frame);
                                runTextRecognition();
            }

文本识别:

private void runTextRecognition() {
    System.out.println(" text recognition!!!");
    FirebaseVisionImage image = FirebaseVisionImage.fromBitmap(bitmap);
    FirebaseVisionTextRecognizer recognizer = FirebaseVision.getInstance().getOnDeviceTextRecognizer();
    recognizer.processImage(image).addOnSuccessListener(new OnSuccessListener<FirebaseVisionText>() {
        @Override
        public void onSuccess(FirebaseVisionText texts) {
            System.out.println("Text recognized ::: " + texts);
            textRecognized = true;
            processTextRecognitionResult(texts);

        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            e.printStackTrace();
        }
    });

}

【问题讨论】:

  • 您正在创建的位图可能存在问题。你能加载一个已知大小和格式的静态位图,看看是否可行?
  • 我试过了,还是不行,因为文本类型是机读区字符串。

标签: android firebase-mlkit text-recognition


【解决方案1】:

我试图识别的文字是 MRZ。我联系了 Firebase 支持,他们自己进行了测试,得出的结论是 ML Kit API 无法读取 MRZ 类型的文本,他们可能会在未来合并它。

【讨论】:

    【解决方案2】:

    您可以在 Android 中尝试用于 OCR(光学字符识别)的 Mobile Text Vision API。

    请参阅此 Google 代码实验室了解实现详情https://codelabs.developers.google.com/codelabs/mobile-vision-ocr/index.html?index=..%2F..index#0

    特别是创建 OcrDetectorProcessor 步骤。

    【讨论】:

    • 这个我试过了,但是用这个结果也不准确。
    • 我们可以稍微调整一下 Firebase ML 套件以获得 100% 的准确率吗?
    • @AroshiS 我懒得去检查实际提供的公共 API,但是当我直接使用 tesseract 库时,我可以设置合法字母,以便 MRZ 阅读它确实有助于清理结果有点,只设置合法字符。另外 MRZ 确实使用特殊字体并且是单型/空格,我可以在 Tesseract 中预先设置字体类型,然后我确实根据结果计算了字符边界框,以验证它们与网格的匹配程度与预期大小(如">" 不能是 "A" 大小的 1/4,等等...) ...这有助于我过滤更多的噪声结果。
    • 即检查您对本地 Vision API 有多少配置(如果它仍然可用),它曾经基于 Tesseract,但我认为同时实现可能已经更改为 NN,并且不确定 API 有多丰富..
    • @Ped7g 非常感谢您的回答。您能否分享一些源代码以更好地理解您要说的内容?
    猜你喜欢
    • 2021-05-11
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-04
    • 2019-08-01
    • 2021-01-03
    相关资源
    最近更新 更多