我正在开发Android应用的功能。我想从图片中读取文本,然后将该文本保存在数据库中。使用OCR是最好的方法吗?还有另外一种方法吗? Google在其文档中建议NDK只应在严格必要时才使用,但究竟是什么垮台?
任何帮助都会很棒。
答案 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教程,您可以从图像中读取文本,还可以使用非常简单的代码使用相机扫描文本。
开发的
来自相机的扫描文本
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