Paquete de Idiomas No Encontrado en .NET MAUI Android
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>
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
Consejos para depuración
- Confirma el paquete NuGet: asegúrate de que
IronOcr.Androidesté 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"

