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

时间:2016-05-17 23:41:48

标签: image text ocr tesseract

我正在开发Android应用的功能。我想从图片中读取文本,然后将该文本保存在数据库中。使用OCR是最好的方法吗?还有另外一种方法吗? Google在其文档中建议NDK只应在严格必要时才使用,但究竟是什么垮台?

任何帮助都会很棒。

Image to be OCR'd

enter image description here

enter image description here

enter image description here

4 个答案:

答案 0 :(得分:10)

您可以使用谷歌视觉库将图像转换为文本,它将从图像中提供更好的输出。 在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
}

答案 1 :(得分:1)

通过这个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.

答案 2 :(得分:0)

有一个不同的选择。您可以将图像上传到服务器,从服务器OCR,然后获得结果。

答案 3 :(得分:0)

可以使用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