Tesseract OCR kann gepunktete LED -Ziffern auf Maui/Xamarin nicht lesenC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Tesseract OCR kann gepunktete LED -Ziffern auf Maui/Xamarin nicht lesen

Post by Anonymous »

Ich versuche, Zahlen aus gepunkteten LED-Stil-Ziffern (0–9) mit Tesseract OCR in einer Maui/Xamarin-App auf Android und iOS , vollständig offline, zu extrahieren. Mein Chef möchte eine lokale Lösung < /strong>, die auf Mobiltelefonen ohne Cloud-Dienst funktioniert. Ziffern .
[*] Ich habe mehrere Tesseract -Modelle ausprobiert (ENG, LETSGODIGITAL, OCR usw.), aber die Ergebnisse sind schlecht oder leer. Bildvorverarbeitungscode < /strong> (mit EMGU CV /OpenCV für C#): < /p>

Code: Select all

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();
}
und hier sind Eingangs- und Ausgabebilder


Und hier ist meine Tesseract-Verwendung [/b] Code:
">"> ">"> ">"> ">">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>
Was ich ausprobiert /beobachtet habe: < /strong> < /p> Ziel/Frage:
Wie kann ich diese gepunkteten Ziffern vorab vorverarbeiten. Bildverarbeitungspipelines oder leichte ML -Modelle, die für Punkte geeignet sind, die Punkte anschließen/feste Ziffern für OCR auf Mobilgeräte?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post