Mat*_*ias 5 ocr android text-recognition firebase firebase-mlkit
我在货架上启动了一个新的文件编号文本识别应用程序,并在 Youtube 上使用了以下 ML Kit 文本识别: 教程 ML KIT 文本识别
只要文件编号水平写入,它就可以完美运行。当文本垂直方向并且我将手机置于横向位置时,应用程序会考虑方向并且文本识别不再起作用。
我试图添加两者
<activity android:name=".NameOfTheActivity" android:screenOrientation="portrait">
Run Code Online (Sandbox Code Playgroud)
在清单中,
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)甚至
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR)
进入 onCreate 方法。即使手机处于横向位置,活动也保持纵向模式。但是,在横向位置使用我的手机时,文本识别仍然不起作用。
Activity 代码的对应部分如下:
//Event Camera View
cameraView.addCameraKitListener(new CameraKitEventListener() {
@Override
public void onEvent(CameraKitEvent cameraKitEvent) {
}
@Override
public void onError(CameraKitError cameraKitError) {
}
@Override
public void onImage(CameraKitImage cameraKitImage) {
//Show Dialog
waitingDialog.show();
//Processing image
Bitmap bitmap = cameraKitImage.getBitmap();
bitmap = Bitmap.createScaledBitmap(bitmap, cameraView.getWidth(), cameraView.getHeight(), false);
cameraView.stop();
recognizeText(bitmap);
}
@Override
public void onVideo(CameraKitVideo cameraKitVideo) {
}
});
private void recognizeText(Bitmap bitmap) {
FirebaseVisionImage image = FirebaseVisionImage.fromBitmap(bitmap);
FirebaseVisionTextRecognizer textRecognizer = FirebaseVision.getInstance().getOnDeviceTextRecognizer();
textRecognizer.processImage(image)
.addOnSuccessListener(new OnSuccessListener<FirebaseVisionText>() {
@Override
public void onSuccess(FirebaseVisionText firebaseVisionText) {
drawTextResult(firebaseVisionText);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d("EDMT_ERROR", e.getMessage());
}
});
}
Run Code Online (Sandbox Code Playgroud)
有没有人有一些技巧可以使它工作或知道一个有效的教程?我在这里看到了一个示例:Firebase 示例,其中他们使用 media.Image 对象来考虑方向。由于我不知道如何修改原始代码(使用位图),我只是想“停用”方向传感器,以便无论我是在纵向还是在使用手机,拍摄的图像/位图都完全相同景观位置。在这种情况下,recognizeText(bitmap) 方法应该在两种情况下返回相同的答案。
我最终使用位图旋转方法
public static Bitmap rotateImage(Bitmap source, float angle) {
Matrix matrix = new Matrix();
matrix.postRotate(angle);
return Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(),
matrix, true);
}
Run Code Online (Sandbox Code Playgroud)
对原代码进行如下修改
FirebaseVisionImage image = FirebaseVisionImage.fromBitmap(rotateImage(bitmap, 270));
Run Code Online (Sandbox Code Playgroud)
和
bitmap = Bitmap.createScaledBitmap(bitmap, cameraView.getHeight(), cameraView.getWidth(), false);
Run Code Online (Sandbox Code Playgroud)
这有效...显示的图像仍然失真,但分析的图像正常,并且在手机的横向位置返回良好的结果(不要尝试纵向位置,它不再工作)。
| 归档时间: |
|
| 查看次数: |
1283 次 |
| 最近记录: |