在 .NET MAUI Android 中找不到语言包

This article was translated from English: Does it need improvement?
Translated
View the article in English

在.NET MAUI Android项目中加载非英语语言(例如中文)时,即使训练数据位于AndroidAsset,运行时也可能会失败。

System.IO.FileNotFoundException: Language Pack Not Found: chi_sim.traineddata

Visual Studio CodeCLI构建MAUI Android项目时可能会跳过解决IronOCR所需的语言数据文件。 *.traineddata文件从未被打包到APK中,因此引擎在运行时无法找到它们。

解决方案

1. 在Visual Studio 2022中构建

在完整的Visual Studio 2022 IDE(v17.10或更高版本)中打开并构建项目。 完整的IDE在构建过程中将依赖项包括在Android APK中,而CLI和VS Code路径可能会遗漏它们。

2. 重新定位OcrData文件夹

构建后,将OcrData/chi_sim.traineddata

ProjectRoot/
├── OcrData/
│   └── chi_sim.traineddata
├── Resources/
│   └── Fonts/
│       └── NotoSansSC-Regular.ttf
├── MyMauiApp.csproj

3. 将已训练的数据注册为Android资产

将重新定位的文件添加到您的.csproj中,以便它们能够与APK一起发布。

<ItemGroup>
  <AndroidAsset Include="OcrData\chi_sim.traineddata" />
  <AndroidAsset Include="ocrData\chi_tra.traineddata" />
</ItemGroup>
<ItemGroup>
  <AndroidAsset Include="OcrData\chi_sim.traineddata" />
  <AndroidAsset Include="ocrData\chi_tra.traineddata" />
</ItemGroup>
XML

4. 添加支持您的字符的字体

识别的文本仍然需要一个可以在应用程序UI中呈现的字体。 将Noto Sans SC这样的字体放入MauiProgram.cs中注册。

using Microsoft.Extensions.Logging;
namespace MauiApp2
{
    public static class MauiProgram
    {
        public static MauiApp CreateMauiApp()
        {
            var builder = MauiApp.CreateBuilder();
            builder
                .UseMauiApp<App>()
                .ConfigureFonts(fonts =>
                {
                    fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
                    fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
                });
#if DEBUG
            builder.Logging.AddDebug();
#endif
            return builder.Build();
        }
    }
}
using Microsoft.Extensions.Logging;
namespace MauiApp2
{
    public static class MauiProgram
    {
        public static MauiApp CreateMauiApp()
        {
            var builder = MauiApp.CreateBuilder();
            builder
                .UseMauiApp<App>()
                .ConfigureFonts(fonts =>
                {
                    fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
                    fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
                });
#if DEBUG
            builder.Logging.AddDebug();
#endif
            return builder.Build();
        }
    }
}
Imports Microsoft.Extensions.Logging

Namespace MauiApp2

    Public Module MauiProgram

        Public Function CreateMauiApp() As MauiApp
            Dim builder = MauiApp.CreateBuilder()
            builder _
                .UseMauiApp(Of App)() _
                .ConfigureFonts(Sub(fonts)
                                    fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular")
                                    fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold")
                                End Sub)
#If DEBUG Then
            builder.Logging.AddDebug()
#End If
            Return builder.Build()
        End Function

    End Module

End Namespace
$vbLabelText   $csharpLabel

调试提示

  • 确认NuGet包:确保IronOcr.Android已安装并恢复。
  • 打开日志记录以查看IronOCR使用的语言文件搜索路径:
IronSoftware.Logger.LoggingMode = IronSoftware.Logger.LoggingModes.All;
IronSoftware.Logger.LogFilePath = "OcrMaui.log";
IronSoftware.Logger.LoggingMode = IronSoftware.Logger.LoggingModes.All;
IronSoftware.Logger.LogFilePath = "OcrMaui.log";
IronSoftware.Logger.LoggingMode = IronSoftware.Logger.LoggingModes.All
IronSoftware.Logger.LogFilePath = "OcrMaui.log"
$vbLabelText   $csharpLabel

警告在Assets/下面的.tessdata文件夹在CLI或VS Code构建时可能会静默失败,因此有时需要手动重新定位.traineddata文件。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

准备开始了吗?
Nuget 下载 6,136,090 | 版本: 2026.7 刚刚发布
Still Scrolling Icon

还在滚动吗?

想快速获得证据? PM > Install-Package IronOcr
运行示例 观看您的图像变成可搜索文本。