【问题标题】:ML Kit - Android - Text Recognition - Text Orientation机器学习套件 - Android - 文本识别 - 文本方向
【发布时间】:2018-10-03 09:21:49
【问题描述】:

我启动了一个新的文件编号文本识别应用程序,并在 Youtube 上使用了以下 ML Kit 文本识别: Tutorial ML KIT Text Recognition

只要文件编号是水平书写的,它就可以完美地工作。 当文本是垂直方向并且我将手机转为横向位置时,应用程序会考虑方向并且文本识别不再起作用。

我尝试添加两个

<activity android:name=".NameOfTheActivity" android:screenOrientation="portrait"> 

在清单和 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());
        }
    });
}

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

【问题讨论】:

    标签: android firebase ocr text-recognition firebase-mlkit


    【解决方案1】:

    我终于用了位图旋转方法

        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 中?对于横向和纵向工作,也许您可​​以使用方向传感器回调和一个条件来旋转图像或不旋转。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-08
    相关资源
    最近更新 更多