带有垃圾结果的相机的FirebaseMLKit实时文本识别

时间:2018-07-04 03:02:55

标签: android text-recognition firebase-mlkit

我正在尝试通过表面视图相机的实时供稿运行文本识别。我已经正确设置了摄像头,并获得了位图,并将其传递到下一个活动以进行识别,如下所示:

t = list(s)
t[i] = ' '
s = "".join(t)

在我的下一个活动中,我尝试过像下面这样进行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);

            }

        }

    }

} }

和gradle依赖项:

<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>

我想识别文本块,整页或段落。如何使用MLKit完成此操作?

0 个答案:

没有答案