如何从图像 Android 应用程序中提取文本

Posted

技术标签:

【中文标题】如何从图像 Android 应用程序中提取文本【英文标题】:How to extract text from image Android app 【发布时间】:2016-09-14 05:59:09 【问题描述】:

我正在为我的 android 应用开发一项功能。我想从图片中读取文本,然后将该文本保存在数据库中。使用 OCR 是最好的方法吗?还有其他方法吗? Google 在其文档中建议仅在绝对必要时才应使用 NDK,但究竟有哪些缺点?

任何帮助都会很棒。

【问题讨论】:

我也在寻找类似的解决方案,在阅读时,我在这里找到了。我想问你有没有找到任何可行的解决方案。在阅读了两个答案后,我有点困惑。您关注的是哪一个,它们的准确性如何。介意分享您的案例研究吗?谢谢。 【参考方案1】:

您可以使用谷歌视觉库将图像转换为文本,它将提供更好的图像输出。 在 build gradle 中添加以下库:

   compile 'com.google.android.gms:play-services-vision:10.0.0+'

    TextRecognizer textRecognizer = new TextRecognizer.Builder(getApplicationContext()).build();

Frame imageFrame = new Frame.Builder()

        .setBitmap(bitmap)                 // your image bitmap
        .build();

String imageText = "";


SparseArray<TextBlock> textBlocks = textRecognizer.detect(imageFrame);

for (int i = 0; i < textBlocks.size(); i++) 
    TextBlock textBlock = textBlocks.get(textBlocks.keyAt(i));
    imageText = textBlock.getValue();                   // return string

【讨论】:

谢谢,它正在工作,但无法识别文本中的点 (.)。我们如何获得包含点在内的完整值?【参考方案2】:

在我的Simple example of OCRReader in Android 教程中,您可以从图像中读取文本,也可以使用相机扫描文本,使用非常简单的代码。

这个库是使用Mobile Vision Text API开发的

用于从相机扫描文本

OCRCapture.Builder(this)
        .setUseFlash(true)
        .setAutoFocus(true)
        .buildWithRequestCode(CAMERA_SCAN_TEXT);

用于从图像中提取文本

String text = OCRCapture.Builder(this).getTextFromUri(pickedImage);
//You can also use getTextFromBitmap(Bitmap bitmap) or getTextFromImage(String imagePath) buplic APIs from OCRLibrary library.

【讨论】:

这里如何设置语言?【参考方案3】:

可以使用 Firebase 机器学习 (ML) 套件从图像中提取文本。文本识别 API 有两个版本,设备端 API(免费)和云端 API。

要使用 API,首先创建图像的 BitMap,它应该是直立的。然后创建传递位图对象的 FirebaseVisionImage 对象。

FirebaseVisionImage image = FirebaseVisionImage.fromBitmap(bitmap);

然后创建 FirebaseVisionTextRecognizer 对象。

FirebaseVisionTextRecognizer textRecognizer = FirebaseVision.getInstance()
        .getCloudTextRecognizer();

然后将 FirebaseVisionImage 对象传递给 processImage() 方法,将侦听器添加到结果任务中,并在成功回调方法中捕获提取的文本。

textRecognizer.processImage(image)
                .addOnSuccessListener(new OnSuccessListener<FirebaseVisionText>() 
                    @Override
                    public void onSuccess(FirebaseVisionText firebaseVisionText) 
                       //process success
                    
                )
                .addOnFailureListener(new OnFailureListener() 
                     @Override
                     public void onFailure(@NonNull Exception e) 
                       //process failure
                     
                 );

有关如何使用 Firebase ML 文本识别器的完整示例,请参阅 https://www.zoftino.com/extracting-text-from-images-android

【讨论】:

【参考方案4】:

有一个不同的选项。你可以上传你的图片到服务器,从服务器OCR,然后得到结果。

【讨论】:

谢谢您的回复,这有多可靠?有没有使用这种方法的实际应用程序? 再次感谢您的回复。有没有可能你可以在那里添加一些细节?它有多准确?,哪些现实世界的应用程序使用它?我测试了一个行业标准的 OCR,它没有提供超过 40% 的准确度。 (供我使用) 准确性取决于您的输入质量,请分享图片样本,没有图片样本无法回答问题。 我理解这一点,这就是准确度水平如此之低的原因。图像永远不会一样,它们的质量会从大小、文本、颜色、质量等方面发生巨大变化。 好的。有以客户端-服务器方式执行的真实应用程序,但我不确定是否允许我告诉应用程序名称(可能不是)。附加的图像只有 1 个 OCR 错误(% 替换为 *),我在这里看不到任何问题。

以上是关于如何从图像 Android 应用程序中提取文本的主要内容,如果未能解决你的问题,请参考以下文章

如何从android中的jpeg图像中提取文本[关闭]

如何从 Android 应用程序中的图像中提取发票数据?

android:从图像中提取文本[关闭]

如何从图库中的图像中获取(提取)文本并搜索该文本 - Android?

从图像中提取文本

如何使用 openCV 或 OCR tesseract 从图像中提取文本? [复制]