ML Kit - Android - 文本识别 - 文本方向

6
我开始开发一个用于架子上文件编号文本识别的新应用程序,我使用了以下YouTube上的ML Kit文本识别教程:教程 ML KIT 文字识别 只要文件编号是水平书写的,它就能完美地工作。当文本垂直方向排列且我将手机转至横屏时,应用程序会考虑方向,但文本识别就不再起作用。
我尝试添加了两种旋转方向的代码,但它们似乎无法解决该问题。请帮我找出问题所在,谢谢!
<activity android:name=".NameOfTheActivity" android:screenOrientation="portrait"> 

在清单文件中并且在onCreate方法中加入setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)甚至加入setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR)。即使手机处于横屏状态,该活动仍保持竖屏模式。但是,当手机处于横屏位置时,文本识别仍然无法正常工作。 该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());
        }
    });
}

有人有什么提示可以让它工作,或者知道一个可行的教程吗?我在这里看到了一个例子:Firebase example,他们使用一个 media.Image 对象来考虑方向。由于我不知道如何修改原始代码(使用位图),所以我只是试图“禁用”方向传感器,以便无论我将手机放在纵向还是横向位置上,拍摄的图像/位图都是完全相同的。在这种情况下,recognizeText(bitmap) 方法应该在两种情况下返回相同的答案。
1个回答

2

我最终使用了一种位图旋转的方法

    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);
}

在对原始代码进行以下修改后:

FirebaseVisionImage image = FirebaseVisionImage.fromBitmap(rotateImage(bitmap, 270));

并且。
bitmap = Bitmap.createScaledBitmap(bitmap, cameraView.getHeight(), cameraView.getWidth(), false);

可以这样做... 显示的图像仍然扭曲,但分析后的图像在手机横向位置上返回良好结果(不要尝试在竖向位置上,它将不再起作用)。


你把这个加在代码哪里了?是在TextRecognitionProcessor里吗?为了让它在横屏和竖屏都能工作,也许你可以使用方向传感器回调和一个条件来旋转图像或不旋转。 - shakram02

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接