Распознавание текста Android Mobile Vision масштабируется до найденных координат

Я использую Google Mobile Vision API для распознавания текста (чисел) в статическом растровом изображении. Теперь я хотел бы приблизить место, где был найден номер.

Вот как я сканирую растровое изображение и получаю координаты x и y.

Point[] p = textBlock.getCornerPoints();

public void Test(Bitmap bitmap) {
    Context context = getApplicationContext();
    TextRecognizer ocrFrame = new TextRecognizer.Builder(context).build();
    Frame frame = new Frame.Builder().setBitmap(bitmap).build();
    ByteBuffer byteBuffer = frame.getGrayscaleImageData();

    if (ocrFrame.isOperational()) {
        Log.e(TAG, "Textrecognizer is operational");
    }
    SparseArray<TextBlock> textBlocks = ocrFrame.detect(frame);

    for (int i = 0; i < textBlocks.size(); i++) {
        TextBlock textBlock = textBlocks.get(textBlocks.keyAt(i));
        String value = textBlock.getValue();
        Point[] p = textBlock.getCornerPoints();
        Log.e(TAG, "something is happening");
    }
}

Кроме того, я использую TouchImageView для отображения растрового изображения. Теперь я вызываю метод setZoom с полученными координатами следующим образом:

touchImageView.setZoom(1F, 210F, 748F, ImageView.ScaleType.CENTER);

Но он приближается к неправильному месту, и я действительно не знаю, почему. Кто-нибудь может дать мне несколько советов?

(https://github.com/MikeOrtiz/TouchImageView/blob/master/src/com/ortiz/touch/TouchImageView.java)

РЕДАКТИРОВАТЬ: Хорошо, я понял, что тип шкалы делает что-то, чего я не понимаю. Думаю, проблема здесь в setZoom. Мне нужно преобразовать координаты растрового изображения в координаты Touchimageview.

EDIT2: Решение. Ошибка заключалась в прямой передаче координат x и y, но setZoom принимал значения от 0 до 1.

int BitmapHeight = photo.getHeight();
int BitmapWidth = photo.getWidth();

int FoundX = p[0].x;
int FoundY = p[0].y;

float DividerX = BitmapWidth / (float)FoundX;
float DividerY = BitmapHeight / (float)FoundY;

float ZoomX = 1 / (float)DividerX;
float ZoomY = 1 / (float)DividerY;

touchImageView.setZoom(touchImageView.getMaxZoom(), ZoomX, ZoomY, ImageView.ScaleType.CENTER);

person R. Kut    schedule 01.08.2018    source источник
comment
решил вашу проблему?   -  person Bincy Baby    schedule 09.08.2018
comment
да посмотри на мою правку 2   -  person R. Kut    schedule 09.08.2018


Ответы (1)


Вы можете использовать эту библиотеку Google https://developers.google.com/vision/android/text-overview . Вы можете найти пример здесь https://codelabs.developers.google.com/codelabs/mobile-vision-ocr

добавив ниже в файл android gradle

compile 'com.google.android.gms:play-services-vision:15.0.0'
person Ashok Reddy M    schedule 10.08.2018
comment
Я использую эту библиотеку. - person R. Kut; 10.08.2018