Я использую 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);