如何显示从ML Kit中检测到的文本,并显示在单词的实际位置上

How to display text detected from ML Kit and display it on the actual location of the word

我正在为 android 开发 OCR 应用程序并正在使用 Camera2Api.I 正在使用 android-camera2basic 作为样板代码,我使用 ml kit 进行文本识别。

我遇到了一个奇怪的问题,GraphicOverlay 未正确缩放其仅覆盖的一半 screen.The GraphicOverlay 未在检测到的单词上正确绘制。

如您所见,图形叠加层未绘制在应有的位置,例如 "Stack Exchange Network" 图形叠加层未在 Stack Exchange Network 顶部显示。

这是我的文件

问题是库会检测您传递的原始 bitmap 上的单词(具有原始宽度和高度),然后 returns 根据该单词的位置图片。 但是屏幕上显示的图像是 SCALED 图像,具有新的宽度和高度以适合屏幕或 imageView。 所以你想做的是,根据你的 imageView 重新缩放 bitmap 然后传递新的 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);
    }

我使用这个答案来缩放图像:


编辑: 抱歉,我注意到您没有在代码中使用位图,您的情况可能会有所不同,但我认为您可以找到基于关于这个想法,因为我遇到了与您相同的问题,这对我来说非常有效。