Tesseract OCR не может считывать пунктирные светодиодные цифры на мауи/XamarinC#

Место общения программистов C#
Ответить
Anonymous
 Tesseract OCR не может считывать пунктирные светодиодные цифры на мауи/Xamarin

Сообщение Anonymous »

Я пытаюсь извлечь числа из пунктирных цифр в стиле светодиодов (0–9), используя tesseract ocr в приложении maui/xamarin на Android и iOS , полностью отключен. Мой босс хочет, чтобы локальное решение < /strong> работает на мобильных телефонах без какого-либо облачного сервиса. < /P>
Проблема: < /p>
  • Цифры «точечные» (например, 7-сегментные светодиодные панели, но только точки). Digits .
  • Я попробовал несколько моделей Tesseract (ENG, LESGODIGITAL, OCR и т. Д.), Но результаты плохие или пустые. My код предварительной обработки изображения < /strong> (с помощью EMGU CV /OpenCV для C#): < /p>

    Код: Выделить всё

    public static byte[] ProcessImageForOcr(string inputImagePath)
    {
    Mat originalImage = CvInvoke.Imread(inputImagePath, ImreadModes.ColorBgr);
    if(originalImage.IsEmpty)
    throw new Exception($"Could not load image from: {inputImagePath}");
    
    Mat gray = new Mat();
    CvInvoke.CvtColor(originalImage, gray, ColorConversion.Bgr2Gray);
    
    Mat blurred = new Mat();
    CvInvoke.GaussianBlur(gray, blurred, new Size(5,5), 0);
    
    Mat edges = new Mat();
    CvInvoke.Canny(blurred, edges, 50, 150);
    
    int cropY = (int)(edges.Height * 0.25);
    Rectangle roi = new Rectangle(0, cropY, edges.Width, edges.Height - cropY);
    Mat croppedEdges = new Mat(edges, roi);
    
    Mat dilatedImage = new Mat();
    Mat kernel = CvInvoke.GetStructuringElement(ElementShape.Rectangle, new Size(4,4), new Point(-1,-1));
    CvInvoke.Dilate(croppedEdges, dilatedImage, kernel, new Point(-1,-1), 1, BorderType.Default, new MCvScalar(0));
    
    Mat finalImage = new Mat();
    CvInvoke.BitwiseNot(dilatedImage, finalImage);
    
    using var v = new VectorOfByte();
    if(!CvInvoke.Imencode(".png", finalImage, v))
    throw new InvalidOperationException("Failed to encode image");
    
    return v.ToArray();
    }
    
    и вот вводные и выходные изображения


    И вот мое использование Tesseract [/b]:
    static void tryToExtractText(string file)
    {
    Dictionary dic = new Dictionary
    {
    {"C:\\Temp Files\\tesseract\\models\\tessdata", "eng"},
    {"C:\\Temp Files\\tesseract\\models\\lets", "lets"},
    {"C:\\Temp Files\\tesseract\\models\\letsgodigital", "letsgodigital"},
    {"C:\\Temp Files\\tesseract\\models\\mcr", "mcr"},
    {"C:\\Temp Files\\tesseract\\models\\ocr", "ocr"}
    };

    foreach(var item in dic)
    {
    using(var engine = new TesseractEngine(item.Key, item.Value, EngineMode.Default))
    {
    engine.SetVariable("tessedit_char_whitelist", "0123456789'");
    engine.DefaultPageSegMode = PageSegMode.SingleLine;

    using(var img = Pix.LoadFromFile(file))
    using(var page = engine.Process(img))
    {
    string text = page.GetText();
    Console.WriteLine(item.Value + " result: \"{0}\"", text.Trim());
    }
    }
    }
    }
    < /code>
    Что я попробовал /наблюдал: < /strong> < /p>

    В приложении консоли: частичное распознавание, в основном неверное. < /li>
    < /ul>


    На приложении Android Maui: Нет текста
    . panels.
Goal / Question:
How can I preprocess these dotted digits to make them readable by Tesseract on mobile devices (Android/iOS) offline?
Are there known techniques, image Обработка трубопроводов, или легкие модели ML, подходящие для подключения точек/реконструкции твердых цифр для OCR на мобильном телефоне?

Подробнее здесь: https://stackoverflow.com/questions/797 ... ui-xamarin
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»