如何从图像 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 应用程序中提取文本的主要内容,如果未能解决你的问题,请参考以下文章