[*] 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 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>
- In Konsolen -App: Teiler Erkennung, meistens falsch. src = "https://i.static.net/f8yk9j6t.png"/>
Auf Maui Android App: kein Text gefunden . Panels .
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?