.NET MAUI Android'de Dil Paketi Bulunamadı
Çince gibi İngilizce olmayan bir dili bir .NET MAUI Android projesinde yüklemek, eğitilmiş veriler Assets/tessdata içindeyken ve AndroidAsset olarak işaretlenmiş olsa bile çalışma zamanında başarısız olabilir.
System.IO.FileNotFoundException: Language Pack Not Found: chi_sim.traineddata
Visual Studio Code veya CLI üzerinden bir MAUI Android projesi derlemek, IronOCR'nin ihtiyaç duyduğu dil veri dosyalarının çözülmesini atlayabilir. *.traineddata dosyaları asla APK'ya giremez, bu nedenle motor çalışma zamanında onları bulamaz.
Çözüm
1. Visual Studio 2022'de Derleyin
Projeyi tam Visual Studio 2022 IDE'sinde (v17.10 veya daha sonraki sürümlerde) açın ve derleyin. Tam IDE, Android APK'sine bağımlılıkları eklerken, CLI ve VS Code yolları kaçırabilir.
2. OcrData Klasörünü Yeniden Konumlandırın
Derlemeden sonra, OcrData klasörünü bin dışına ve proje köküne, örneğin OcrData/chi_sim.traineddata taşıyın.
ProjectRoot/
├── OcrData/
│ └── chi_sim.traineddata
├── Resources/
│ └── Fonts/
│ └── NotoSansSC-Regular.ttf
├── MyMauiApp.csproj
3. Eğitilmiş Verileri Android Varlıkları Olarak Kaydedin
Taşınan dosyaları APK ile gönderilmesi için .csproj içine ekleyin:
<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. Karakterlerinizi Destekleyen Bir Yazı Tipi Ekleyin
Tanınan metin hala uygulama arayüzünde görüntülenebilmek için uygun bir yazı tipine ihtiyaç duyar. Noto Sans SC gibi bir fontu Resources/Fonts içine bırakın ve MauiProgram.cs içinde kaydedin:
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
Hata Ayıklama İpuçları
- NuGet paketini teyit edin:
IronOcr.Androidyüklendiğinden ve geri yüklendiğinden emin olun. - IronOCR'nin dil dosyaları arama yollarını görmek için günlüğe kaydetmeyi açın:
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"

