Pakiet językowy nie znaleziony w .NET MAUI Android

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

Ł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>
XML

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
$vbLabelText   $csharpLabel

Wskazówki dotyczące debugowania

  • Potwierdź pakiet NuGet: upewnij się, że IronOcr.Android jest 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"
$vbLabelText   $csharpLabel

OstrzeżenieFolder .tessdata pod Assets/może cicho zgłaszać błąd przy budowaniu z Konsoli lub Visual Studio Code, dlatego ręczne przeniesienie plików .traineddata bywa niezbędne.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej
Gotowy, aby rozpocząć?
Nuget Pliki do pobrania 6,136,090 | Wersja: 2026.7 właśnie wydany
Still Scrolling Icon

Wciąż przewijasz?

Czy chcesz szybko dowodu? PM > Install-Package IronOcr
uruchom próbkę obserwuj, jak twój obraz staje się tekstem z możliwością wyszukiwania.