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

时间:2018-10-03 09:21:50

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

我启动了一个新的应用程序,用于将文件编号文本识别到架子上,并在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方法。即使手机处于横向位置,活动也将保持纵向模式。但是,在横向使用我的手机时,文本识别仍然不起作用。

活动代码的相应部分如下:

//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对象来考虑方向。由于我不知道如何修改原始代码(使用位图),因此我只是尝试“停用”方向传感器,以使无论使用纵向还是纵向手机,所拍摄的图像/位图都完全相同。景观位置。在这种情况下,recogniseText(bitmap)方法在两种情况下都应返回相同的答案。

1 个答案:

答案 0 :(得分:0)

我终于使用了位图旋转方法

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

可以。显示的图像仍然失真,但分析的图像还可以,并且在手机的“横向”位置返回良好的结果(不要尝试以纵向放置,它将不再起作用)。