Pacote de Idiomas Não Encontrado no .NET MAUI Android
Carregar um idioma não-inglês (por exemplo, chinês) em um projeto .NET MAUI Android pode falhar em tempo de execução, mesmo quando os dados treinados estão em Assets/tessdata e são marcados como um AndroidAsset.
System.IO.FileNotFoundException: Language Pack Not Found: chi_sim.traineddata
Criar um projeto MAUI Android no Visual Studio Code ou no CLI pode pular a resolução dos arquivos de dados de idioma que o IronOCR necessita. Os arquivos *.traineddata nunca chegam ao APK, então o mecanismo não pode encontrá-los em tempo de execução.
Solução
1. Build in Visual Studio 2022
Abra e compile o projeto no IDE completo do Visual Studio 2022 (v17.10 ou posterior). O IDE completo inclui as dependências no APK do Android durante a compilação, que os caminhos do CLI e VS Code podem perder.
2. Recolocar a pasta OcrData
Após a compilação, mova a pasta OcrData para fora de bin e para a raiz do projeto, por exemplo, OcrData/chi_sim.traineddata.
ProjectRoot/
├── OcrData/
│ └── chi_sim.traineddata
├── Resources/
│ └── Fonts/
│ └── NotoSansSC-Regular.ttf
├── MyMauiApp.csproj
3. Registrar os dados treinados como ativos do Android
Adicione os arquivos recolocados ao seu .csproj para que sejam enviados com o 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. Adicionar uma fonte que suporte seus caracteres
O texto reconhecido ainda precisa de uma fonte que possa renderizá-lo na interface do aplicativo. Solte uma fonte como Noto Sans SC em Resources/Fonts e registre-a em 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
Dicas de Depuração
- Confirme o pacote NuGet: certifique-se de que
IronOcr.Androidestá instalado e restaurado. - Ligue o log para ver os caminhos de busca que o IronOCR usa para arquivos 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"

