You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用IronOcr提取拍摄图片文本时应用崩溃求助

问题修复:拍摄图片后OCR提取文本崩溃

核心问题

  • photopath变量仅声明未赋值,调用IronTesseract.ReadAsync()时传入空路径,直接引发崩溃
  • OCR结果判断逻辑顺序错误:先给TextView赋值再检查文本是否为空,无实际意义

修复步骤及代码

  1. 拍摄图片后为photopath赋值,获取图片的本地物理路径
  2. 调整OCR结果判断顺序,先检查文本是否为空再更新UI
  3. 用using管理流资源,避免文件占用问题

修正后的完整代码:

public partial class MainPage : ContentPage
{
    private MediaFile photo;
    private string photopath;

    public MainPage()
    {
        InitializeComponent();
    }

    private async void CameraButton_Clicked(object sender, EventArgs e)
    {
        var cameraMediaOptions = new StoreCameraMediaOptions
        {
            DefaultCamera = CameraDevice.Rear,
            SaveToAlbum = true,
            Directory = "MyAppName",
            Name = null,
            CompressionQuality = 100
        };

        photo = await CrossMedia.Current.TakePhotoAsync(cameraMediaOptions);
        
        if (photo == null) return;

        // 为photopath赋值,获取图片的本地路径
        photopath = photo.Path;

        // 使用using管理流,避免资源泄漏
        using (var stream = photo.GetStream())
        {
            PhotoImage.Source = ImageSource.FromStream(() => stream);
        }
    }

    private async void TextButton_Clicked(object sender, EventArgs e)
    {
        if (photo == null)
        {
            await DisplayAlert("Please Take Photo First", "", "OK");
            return;
        }

        // 检查路径是否有效,避免空路径
        if (string.IsNullOrWhiteSpace(photopath))
        {
            TextView.Text = "Invalid Photo Path";
            return;
        }

        try
        {
            var ocr = new IronTesseract();
            var result = await ocr.ReadAsync(photopath);

            // 先判断文本是否为空,再更新UI
            TextView.Text = string.IsNullOrWhiteSpace(result.Text) ? "No Text Found" : result.Text;
        }
        catch (Exception ex)
        {
            // 添加异常捕获,便于排查后续问题
            await DisplayAlert("Error", ex.Message, "OK");
        }
    }
}

额外注意事项

  • 确保已通过NuGet安装IronOcr和Xam.Plugin.Media依赖包
  • 安卓平台需在AndroidManifest.xml中添加相机、存储权限:
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    
  • iOS平台需在Info.plist中添加权限描述:
    <key>NSCameraUsageDescription</key>
    <string>Need camera access to take photos</string>
    <key>NSPhotoLibraryAddUsageDescription</key>
    <string>Need photo library access to save photos</string>
    

内容的提问来源于stack exchange,提问作者Abode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 14:27:22