.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 資料夾從bin 中移出並放入專案根目錄,例如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這樣的字型丟到Resources/Fonts 中,並在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擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立Discord機器人,結合他對技術的熱愛與創造力。

準備開始了嗎?
Nuget 下載 6,136,090 | 版本: 2026.7 剛剛發布
Still Scrolling Icon

還在滾動?

想要快速證明? PM > Install-Package IronOcr
執行範例 觀看您的圖像轉變為可搜尋文字。