FirebaseMLKit Live TextRecognition от камеры с результатами мусора
Я пытаюсь запустить распознавание текста в режиме реального времени с камеры с видом на поверхность. Я правильно настроил камеру, получил растровое изображение и передал его следующему действию для распознавания, как показано ниже:
private Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] bytes, Camera camera) {
try {
String filePath = new SavePhotoAsync().execute(bytes).get();
Intent intent = new Intent(MainActivity.this, PreviewActivity.class);
intent.putExtra("image_path", filePath);
startActivity(intent);
Log.d(TAG, "Path:\t" + filePath);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
};
и в моей следующей деятельности я попытался сделать TR
как ниже:
public class PreviewActivity extends AppCompatActivity {
private static final String TAG = PreviewActivity.class.getSimpleName();
private TextView textView;
private Bitmap bitmap;
private FirebaseVisionImage visionImage;
private String filePath, content;
private File file;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_preview);
filePath = (getIntent().getExtras().getString("image_path"));
bitmap = BitmapFactory.decodeFile(filePath);
recognizeText(bitmap);
textView = findViewById(R.id.textView);
}
private void recognizeText(Bitmap resultImage) {
visionImage = FirebaseVisionImage.fromBitmap(resultImage);
FirebaseVisionTextDetector textDetector = FirebaseVision.getInstance().getVisionTextDetector();
textDetector.detectInImage(visionImage)
.addOnSuccessListener(new OnSuccessListener<FirebaseVisionText>() {
@Override
public void onSuccess(FirebaseVisionText firebaseVisionText) {
getResults(firebaseVisionText);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d(TAG, "Recog Error:\t" + e.getMessage().toString());
Snackbar.make(findViewById(android.R.id.content), "No Text Found in Image", Snackbar.LENGTH_LONG).show();
}
});
}
private void getResults(FirebaseVisionText firebaseVisionText) {
for (FirebaseVisionText.Block block : firebaseVisionText.getBlocks()) {
String blockTxt = block.getText();
Log.d(TAG, "Text Blocks:\t" + blockTxt);
for (FirebaseVisionText.Line line : block.getLines()){
String lines = line.getText();
for (FirebaseVisionText.Element element : line.getElements()){
String elements = element.getText();
Log.d(TAG, "Elements:\t" + elements);
content = "";
content += elements;
textView.setText(content);
}
}
}
} }
но он не может правильно распознать даже одно слово из изображения.
Вот мой файл манифеста:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.jjoey.envisionocr">
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-feature
android:name="android.hardware.camera2"
android:required="true" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data
android:name="com.google.firebase.ml.vision.DEPENDENCIES"
android:value="text" />
<activity android:name=".PreviewActivity"></activity>
</application>
</manifest>
и зависимость gradle:
implementation 'com.google.firebase:firebase-ml-vision:16.0.0'
Я хочу распознать блоки текста, полную страницу или абзац. Как мне сделать это с помощью MLKit?