如何显示从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);
}
我使用这个答案来缩放图像:
编辑: 抱歉,我注意到您没有在代码中使用位图,您的情况可能会有所不同,但我认为您可以找到基于关于这个想法,因为我遇到了与您相同的问题,这对我来说非常有效。
我正在为 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);
}
我使用这个答案来缩放图像:
编辑: 抱歉,我注意到您没有在代码中使用位图,您的情况可能会有所不同,但我认为您可以找到基于关于这个想法,因为我遇到了与您相同的问题,这对我来说非常有效。