Pack linguistique non trouvé sur .NET MAUI Android
Le chargement d'une langue non anglaise (par exemple le chinois) dans un projet .NET MAUI Android peut échouer à l'exécution, même lorsque les données d'entraînement se trouvent dans Assets/tessdata et sont marquées comme AndroidAsset.
System.IO.FileNotFoundException: Language Pack Not Found: chi_sim.traineddata
Construire un projet MAUI Android à partir de Visual Studio Code ou du CLI peut éviter de résoudre les fichiers de données linguistiques dont IronOCR a besoin. Les fichiers *.traineddata n'arrivent jamais dans l'APK, donc le moteur ne peut pas les trouver à l'exécution.
Solution
1. Compilez dans Visual Studio 2022
Ouvrez et construisez le projet dans l'IDE complet Visual Studio 2022 (v17.10 ou plus). L'IDE complet inclut les dépendances dans l'APK Android lors de la construction, ce que les chemins CLI et VS Code peuvent omettre.
2. Déplacez le dossier OcrData
Après la construction, déplacez le dossier OcrData hors de bin et dans la racine du projet, par exemple OcrData/chi_sim.traineddata.
ProjectRoot/
├── OcrData/
│ └── chi_sim.traineddata
├── Resources/
│ └── Fonts/
│ └── NotoSansSC-Regular.ttf
├── MyMauiApp.csproj
3. Enregistrez les données d'entraînement en tant que ressources Android
Ajoutez les fichiers déplacés à votre .csproj afin qu'ils soient inclus dans l'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. Ajoutez une police qui prend en charge vos caractères
Le texte reconnu a toujours besoin d'une police qui peut le rendre dans l'UI de l'application. Déposez une police comme Noto Sans SC dans Resources/Fonts et enregistrez-la dans 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
Conseils de débogage
- Confirmez le package NuGet : assurez-vous que
IronOcr.Androidest installé et restauré. - Activez la journalisation pour voir les chemins de recherche qu'utilise IronOCR pour les fichiers de langue :
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"

