Paquete de Idiomas No Encontrado en .NET MAUI Android

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

Cargar un idioma no inglés (por ejemplo, chino) en un proyecto Android de .NET MAUI puede fallar en tiempo de ejecución, incluso cuando los datos entrenados se encuentran en Assets/tessdata y están marcados como AndroidAsset.

System.IO.FileNotFoundException: Language Pack Not Found: chi_sim.traineddata

Construir un proyecto de Android MAUI desde Visual Studio Code o la CLI puede omitir la resolución de los archivos de datos de idioma que necesita IronOCR. Los archivos *.traineddata nunca se integran en el APK, por lo que el motor no puede encontrarlos en tiempo de ejecución.

Solución

1. Build in Visual Studio 2022

Abra y construya el proyecto en el IDE completo de Visual Studio 2022 (v17.10 o posterior). El IDE completo incluye las dependencias en el APK de Android durante la construcción, que las rutas de CLI y VS Code pueden perder.

2. Reubicar la carpeta OcrData

Después de la compilación, mueve la carpeta OcrData fuera de bin y dentro de la raíz del proyecto, por ejemplo OcrData/chi_sim.traineddata.

ProjectRoot/
├── OcrData/
│   └── chi_sim.traineddata
├── Resources/
│   └── Fonts/
│       └── NotoSansSC-Regular.ttf
├── MyMauiApp.csproj

3. Registrar los datos entrenados como activos de Android

Añade los archivos reubicados a tu .csproj para que se incluyan con el 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. Agregar una fuente que soporte sus caracteres

El texto reconocido aún necesita una fuente que pueda renderizarlo en la UI de la aplicación. Coloca una fuente como Noto Sans SC en Resources/Fonts y regístrala en 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

Consejos para depuración

  • Confirma el paquete NuGet: asegúrate de que IronOcr.Android esté instalado y restaurado.
  • Encienda el registro para ver las rutas de búsqueda que utiliza IronOCR para los archivos de idioma:
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

AdvertenciaUna carpeta .tessdata bajo Assets/puede fallar silenciosamente en construcciones de CLI o VS Code, por lo que a veces se requiere reubicar manualmente los archivos .traineddata.

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien ...

Leer más
¿Listo para empezar?
Nuget Descargas 6,136,090 | Versión: 2026.7 recién lanzado
Still Scrolling Icon

¿Aún desplazándote?

¿Quieres una prueba rápida? PM > Install-Package IronOcr
ejecuta una muestra y observa cómo tu imagen se convierte en texto buscable.