Как отобразить текст, обнаруженный в ML Kit, и отобразить его в фактическом местоположении слова - PullRequest
0 голосов
/ 25 января 2019

Я работаю над приложением OCR для Android и использую Camera2Api. Я использую android-camera2basic в качестве кода котельной пластины, и я использовал мл комплект для распознавания текста.

Я столкнулся со странной проблемой, что GraphicOverlay неправильно масштабирует свою единственную покрывающую половину экрана. GraphicOverlay неправильно отображает обнаруженные слова.

Click On this To View The Problem

Как вы можете видеть, графическое наложение не отображается там, где оно должно, например, графическое изображение "Stack Exchange Network" в основном не отображается в верхней части Stack Exchange Network.

Вот мои файлы

1 Ответ

0 голосов
/ 24 июля 2019

Дело в том, что библиотека обнаруживает слова на оригинале bitmap, который вы прошли (с его исходной шириной и высотой), а затем возвращает местоположение слов в соответствии с этим изображением.Но изображение, показанное на экране, является масштабированным изображением с новой шириной и высотой, чтобы соответствовать экрану или imageView.Итак, что вы хотите сделать, это изменить масштаб bitmap в соответствии с вашим imageView и затем передать новый bitmap

//get the scaled bitmap image with the new width and height showed on the screen
    private Bitmap getScaledBitmap (Bitmap bitmapImage){

        //width and height of original image
        final int imageWidth = bitmapImage.getWidth();
        final int imageHeight = bitmapImage.getHeight();

        //width and height of the imageView
        final int imageViewWidth  = mImageView.getMeasuredWidth();
        final int imageViewHeight = mImageView.getMeasuredHeight();

        final int scaledWidth , scaledHeight;


        if (imageWidth*imageViewHeight <= imageHeight*imageViewWidth) {

            //rescaled width and height of image within ImageView
            scaledWidth = (imageWidth*imageViewHeight)/imageHeight;
            scaledHeight = imageViewHeight;
        }
        else {
            //rescaled width and height of image within ImageView
            scaledWidth = imageViewWidth;
            scaledHeight = (imageHeight*imageViewWidth)/imageWidth;
        }


        return Bitmap.createScaledBitmap(bitmapImage, scaledWidth, scaledHeight, true);
    }

Я использовал этот ответ для масштабирования изображения: https://stackoverflow.com/a/13318469/9242141


Редактировать: Извините, я заметил, что вы не используете растровые изображения в вашем коде, и в вашем случае все может быть немного по-другому, но я думаю, что вы можете найти решение на основена этой идее, поскольку я столкнулся с той же проблемой, что и вы, и это отлично сработало для меня.

...