Проблема: < /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.
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