我正在尝试在Xamarin.Android上创建一个应用程序,它从相机或设备本身获取图像,在ImageView中显示图像,然后在TextView中返回图像中的文本。我正在使用Tesseract OCR来解决这个问题,并且在获得干净的结果方面遇到了问题。
protected override void OnActivityResult(int requestCode, [GeneratedEnum] Android.App.Result resultCode, Intent data)
{
//base.OnActivityResult(requestCode, resultCode, data);
if (requestCode == 0)
{
Intent mediaScanIntent = new Intent(Intent.ActionMediaScannerScanFile);
Uri contentUri = Uri.FromFile(App._file);
mediaScanIntent.SetData(contentUri);
SendBroadcast(mediaScanIntent);
int height = Resources.DisplayMetrics.HeightPixels;
int width = imageView.Height;
App.bitmap = App._file.Path.LoadAndResizeBitmap(width, height);
if (App.bitmap != null)
{
imageView.SetImageBitmap(App.bitmap);
processImage(App.bitmap);
App.bitmap = null;
}
GC.Collect();
}
if (requestCode == 1)
{
if (resultCode == Android.App.Result.Ok)
{
int height = Resources.DisplayMetrics.HeightPixels;
int width = imageView.Height;
var uri = data.Data;
var path = GetPathToImage(uri);
App.bitmap = BitmapHelpers.LoadAndResizeBitmap(path, width, height);
if (App.bitmap != null)
{
imageView.SetImageBitmap(App.bitmap);
processImage(App.bitmap);
App.bitmap = null;
}
GC.Collect();
}
}
}
这是OnActivityResult方法,用于在相机拍摄照片或从照片库中选择照片后。 LoadAndResizeBitmap方法只获取图像并调整其大小并将其定位以将其放置在ImageView中。 processImage方法是由api:
处理图像的函数private void processImage(Bitmap image)
{
String result = null;
api.SetImage(image);
result = api.UTF8Text;
textView.Text = result;
}
当我尝试运行应用程序时,API需要花费3-5分钟来处理图像,而不是返回文本,而是返回大量符号和字母,这些符号和字母在图像的任何位置都不可见。任何人对我如何解决这个问题都有任何想法吗?