ML Kit - Android - Распознавание текста - Ориентация текста - PullRequest
0 голосов
/ 03 октября 2018

Я запустил новое приложение для распознавания текста по номерам файлов на полках и использовал следующее распознавание текста ML Kit на Youtube: Учебное пособие по распознаванию текста ML KIT

Он отлично работает до тех пор, покатак как номера файлов написаны горизонтально.Когда текст ориентирован вертикально, и я поворачиваю телефон в горизонтальном положении, приложение учитывает ориентацию, и распознавание текста больше не работает.

Я попытался добавить оба

<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 , в котором они используют объект media.Image для учета ориентации.Поскольку я не знаю, как изменить исходный код (в котором используется растровое изображение), я просто пытался «деактивировать» датчик ориентации, чтобы полученное изображение / растровое изображение были точно такими же, независимо от того, использую ли я телефон в портретной ориентации илиландшафтное положение.В этом случае метод распознавания (растровое изображение) должен возвращать одинаковые ответы в обоих случаях.

1 Ответ

0 голосов
/ 03 октября 2018

Наконец, я использую метод поворота растрового изображения

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

Это работает ... показанное изображение по-прежнему искажено, но анализируемое изображение в порядке и возвращает хорошие результаты в альбомной ориентации телефона (не пытайтесь в книжной ориентации, это больше не будет работать).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...