Sprachpaket nicht gefunden in .NET MAUI Android
Das Laden einer nicht-englischen Sprache (zum Beispiel Chinesisch) in einem .NET MAUI Android-Projekt kann zur Laufzeit fehlschlagen, selbst wenn die trainierten Daten in Assets/tessdata liegen und als AndroidAsset markiert sind.
System.IO.FileNotFoundException: Language Pack Not Found: chi_sim.traineddata
Beim Erstellen eines MAUI Android-Projekts von Visual Studio Code oder der CLI kann das Auflösen der Sprachdatendateien, die IronOCR benötigt, übersprungen werden. Die *.traineddata Dateien gelangen nie in die APK, daher kann die Engine sie zur Laufzeit nicht finden.
Lösung
1. In Visual Studio 2022 bauen
Öffnen und bauen Sie das Projekt in der vollständigen Visual Studio 2022 IDE (v17.10 oder später). Die vollständige IDE schließt die Abhängigkeiten in die Android APK während des Builds ein, die die CLI- und VS-Code-Pfade übersehen können.
2. Verlegen Sie den OcrData-Ordner
Nach dem Build verschieben Sie den OcrData Ordner aus bin in das Projektverzeichnis, zum Beispiel OcrData/chi_sim.traineddata.
ProjectRoot/
├── OcrData/
│ └── chi_sim.traineddata
├── Resources/
│ └── Fonts/
│ └── NotoSansSC-Regular.ttf
├── MyMauiApp.csproj
3. Registrieren Sie die trainierten Daten als Android-Anlagen
Fügen Sie die verschobenen Dateien zu Ihrem .csproj hinzu, damit sie mit der APK ausgeliefert werden:
<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. Fügen Sie eine Schriftart hinzu, die Ihre Zeichen unterstützt
Erkannter Text benötigt immer noch eine Schriftart, die ihn in der App-UI rendern kann. Legen Sie eine Schriftart wie Noto Sans SC in Resources/Fonts ab und registrieren Sie sie in 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
Debug-Tipps
- Bestätigen Sie das NuGet-Paket: Stellen Sie sicher, dass
IronOcr.Androidinstalliert und wiederhergestellt ist. - Aktivieren Sie das Protokollieren, um die Suchpfade zu sehen, die IronOCR für Sprachdateien verwendet:
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"

