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?

0 ответов

Другие вопросы по тегам