Pacote de Idiomas Não Encontrado no .NET MAUI Android

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

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

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

Dicas de Depuração

  • Confirme o pacote NuGet: certifique-se de que IronOcr.Android está 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"
$vbLabelText   $csharpLabel

AvisoUma pasta .tessdata em Assets/pode falhar silenciosamente em compilações CLI ou VS Code, por isso, recolocar os arquivos .traineddata manualmente às vezes é necessário.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais
Pronto para começar?
Nuget Baixar 6,136,090 | Versão: 2026.7 recém-lançado
Still Scrolling Icon

Ainda está rolando a tela?

Quer provas rápidas? PM > Install-Package IronOcr
executar um exemplo Veja sua imagem se transformar em texto pesquisável.