使用摄像头和 Firebase ML 套件的 Android 设备上的文本识别不准确
Text Recognition not accurate on Android device using camera and Firebase ML Kit
我在 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 中尝试用于 OCR(光学字符识别)的 Mobile Text Vision API。
请参阅此 Google 代码实验室了解实施细节 https://codelabs.developers.google.com/codelabs/mobile-vision-ocr/index.html?index=..%2F..index#0
特别是创建 OcrDetectorProcessor 步骤。
我试图识别的文本是机读区。我联系了 Firebase 支持,他们自己进行了测试并得出结论,ML Kit API 无法读取 MRZ 类型的文本,他们可能会在未来合并它。
我在 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 中尝试用于 OCR(光学字符识别)的 Mobile Text Vision API。
请参阅此 Google 代码实验室了解实施细节 https://codelabs.developers.google.com/codelabs/mobile-vision-ocr/index.html?index=..%2F..index#0
特别是创建 OcrDetectorProcessor 步骤。
我试图识别的文本是机读区。我联系了 Firebase 支持,他们自己进行了测试并得出结论,ML Kit API 无法读取 MRZ 类型的文本,他们可能会在未来合并它。