Pakiet językowy nie znaleziony w .NET MAUI Android
Ładując język nieangielski (na przykład chiński) w projekcie .NET MAUI Android, może zakończyć się niepowodzeniem w czasie wykonywania, nawet gdy przeszkolone dane znajdują się w Assets/tessdata i są oznaczone jako AndroidAsset.
System.IO.FileNotFoundException: Language Pack Not Found: chi_sim.traineddata
Budowanie projektu MAUI Android z Visual Studio Code lub Konsoli może omijać rozwiązywanie plików danych językowych, których potrzebuje IronOCR. Pliki *.traineddata nigdy nie trafiają do pliku APK, więc silnik nie może ich znaleźć w czasie wykonania.
Rozwiązanie
1. Kompiluj w Visual Studio 2022
Otwórz i zbuduj projekt w pełnym IDE Visual Studio 2022 (v17.10 lub późniejszym). Pełne IDE zawiera zależności w pliku Android APK podczas budowy, co może przegapić ścieżki Konsoli i Visual Studio Code.
2. Przesuń folder OcrData
Po zbudowaniu, przenieś folder OcrData z bin do głównego katalogu projektu, na przykład OcrData/chi_sim.traineddata.
ProjectRoot/
├── OcrData/
│ └── chi_sim.traineddata
├── Resources/
│ └── Fonts/
│ └── NotoSansSC-Regular.ttf
├── MyMauiApp.csproj
3. Zarejestruj przeszkolone dane jako zasoby Androida
Dodaj przeniesione pliki do .csproj, aby były dostarczane z 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. Dodaj czcionkę obsługującą twoje znaki
Rozpoznany tekst nadal potrzebuje czcionki, która może go renderować w interfejsie użytkownika aplikacji. Upuść czcionkę taką jak Noto Sans SC do Resources/Fonts i zarejestruj ją w 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
Wskazówki dotyczące debugowania
- Potwierdź pakiet NuGet: upewnij się, że
IronOcr.Androidjest zainstalowany i przywrócony. - Włącz logowanie, aby zobaczyć ścieżki wyszukiwania używane przez IronOCR dla plików językowych:
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"

