.NET MAUI Android中語言包未找到
在.NET MAUI Android專案中載入非英文語言(例如中文)時,可能會在執行時失敗,即使訓練資料位於AndroidAsset。
System.IO.FileNotFoundException: Language Pack Not Found: chi_sim.traineddata
從Visual Studio Code或CLI構建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>
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
除錯提示
- 確認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"

