我正在尝试通过表面视图相机的实时供稿运行文本识别。我已经正确设置了摄像头,并获得了位图,并将其传递到下一个活动以进行识别,如下所示:
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完成此操作?