From 308ef06a6d22d30fb92e3aa8a687f491d82d6216 Mon Sep 17 00:00:00 2001 From: maxluli Date: Thu, 6 Apr 2023 08:53:31 +0200 Subject: [PATCH] Finally all work (Except for tyres and DRS) --- OCR_Decode/DriverGapToLeaderWindow.cs | 2 +- OCR_Decode/DriverLapTimeWindow.cs | 2 +- OCR_Decode/DriverSector1Window.cs | 2 +- OCR_Decode/DriverSector2Window.cs | 2 +- OCR_Decode/DriverSector3Window.cs | 2 +- OCR_Decode/OcrImage.cs | 43 ++++++++++++++++++++++----- OCR_Decode/Reader.cs | 2 +- OCR_Decode/Window.cs | 30 +++++++++++++++---- 8 files changed, 65 insertions(+), 20 deletions(-) diff --git a/OCR_Decode/DriverGapToLeaderWindow.cs b/OCR_Decode/DriverGapToLeaderWindow.cs index 19dc5bc..af9f4ae 100644 --- a/OCR_Decode/DriverGapToLeaderWindow.cs +++ b/OCR_Decode/DriverGapToLeaderWindow.cs @@ -15,7 +15,7 @@ namespace OCR_Decode } public override object DecodePng() { - int result = GetTimeFromPng(WindowImage); + int result = GetTimeFromPng(WindowImage, OcrImage.WindowType.Gap); return result; } } diff --git a/OCR_Decode/DriverLapTimeWindow.cs b/OCR_Decode/DriverLapTimeWindow.cs index 87f2c74..80bf221 100644 --- a/OCR_Decode/DriverLapTimeWindow.cs +++ b/OCR_Decode/DriverLapTimeWindow.cs @@ -16,7 +16,7 @@ namespace OCR_Decode } public override object DecodePng() { - int result = GetTimeFromPng(WindowImage); + int result = GetTimeFromPng(WindowImage,OcrImage.WindowType.LapTime); return result; } } diff --git a/OCR_Decode/DriverSector1Window.cs b/OCR_Decode/DriverSector1Window.cs index 0b1937b..7f497a6 100644 --- a/OCR_Decode/DriverSector1Window.cs +++ b/OCR_Decode/DriverSector1Window.cs @@ -15,7 +15,7 @@ namespace OCR_Decode } public override object DecodePng() { - int result = GetTimeFromPng(WindowImage); + int result = GetTimeFromPng(WindowImage, OcrImage.WindowType.Sector); return result; } } diff --git a/OCR_Decode/DriverSector2Window.cs b/OCR_Decode/DriverSector2Window.cs index a42905b..8bdb343 100644 --- a/OCR_Decode/DriverSector2Window.cs +++ b/OCR_Decode/DriverSector2Window.cs @@ -15,7 +15,7 @@ namespace OCR_Decode } public override object DecodePng() { - int result = GetTimeFromPng(WindowImage); + int result = GetTimeFromPng(WindowImage, OcrImage.WindowType.Sector); return result; } } diff --git a/OCR_Decode/DriverSector3Window.cs b/OCR_Decode/DriverSector3Window.cs index 7a7f13b..84773c6 100644 --- a/OCR_Decode/DriverSector3Window.cs +++ b/OCR_Decode/DriverSector3Window.cs @@ -15,7 +15,7 @@ namespace OCR_Decode } public override object DecodePng() { - int result = GetTimeFromPng(WindowImage); + int result = GetTimeFromPng(WindowImage,OcrImage.WindowType.Sector); return result; } } diff --git a/OCR_Decode/OcrImage.cs b/OCR_Decode/OcrImage.cs index 261d511..708eb18 100644 --- a/OCR_Decode/OcrImage.cs +++ b/OCR_Decode/OcrImage.cs @@ -11,22 +11,49 @@ namespace OCR_Decode { //AT LEAST PART OF THIS CLASS HAVE BEEN CREATED USING CHATGPT //Just so you know - internal class OcrImage + public class OcrImage { Bitmap InputImage; + public enum WindowType + { + LapTime, + Text, + Sector, + Gap, + } public OcrImage(Bitmap inputImage) { InputImage = inputImage; } - public Bitmap Enhance() + public Bitmap Enhance(WindowType type = WindowType.Text) { Bitmap result = (Bitmap)InputImage.Clone(); - result = Grayscale(result); - result = InvertColors(result); - //result = Resize(result); - result = Tresholding(result, 165); - result = Resize(result); - result = Resize(result); + + switch (type) + { + case WindowType.LapTime: + result = Grayscale(result); + result = InvertColors(result); + result = Tresholding(result, 165); + result = Resize(result); + result = Resize(result); + break; + case WindowType.Text: + result = Grayscale(result); + result = InvertColors(result); + result = Tresholding(result, 165); + //result = Erode(result,1); + result = Resize(result); + result = Dilatation(result, 1); + break; + default: + result = Tresholding(result, 165); + result = Resize(result); + result = Resize(result); + result = Erode(result, 1); + break; + } + //result = Dilatation(result, 1); return result; } diff --git a/OCR_Decode/Reader.cs b/OCR_Decode/Reader.cs index b5ea005..a67f08f 100644 --- a/OCR_Decode/Reader.cs +++ b/OCR_Decode/Reader.cs @@ -252,7 +252,7 @@ namespace OCR_Decode int seconds = (int)((amountOfMs - (minuts*60f*1000f))/1000); int ms = amountOfMs - ((minuts * 60 * 1000) + (seconds * 1000)); - return minuts + ":" + seconds + ":" + ms; + return minuts + ":" + seconds.ToString("00") + ":" + ms.ToString("000"); } public Bitmap Draw(int idImage) { diff --git a/OCR_Decode/Window.cs b/OCR_Decode/Window.cs index 4c82596..25bba75 100644 --- a/OCR_Decode/Window.cs +++ b/OCR_Decode/Window.cs @@ -57,14 +57,29 @@ namespace OCR_Decode return stream.ToArray(); } } - public static int GetTimeFromPng(Bitmap wImage) + public static int GetTimeFromPng(Bitmap wImage,OcrImage.WindowType type) { string rawResult = ""; int result = 0; - Engine.SetVariable("tessedit_char_whitelist", "0123456789:."); + switch (type) + { + case OcrImage.WindowType.Sector: + Engine.SetVariable("tessedit_char_whitelist", "0123456789."); + break; + case OcrImage.WindowType.LapTime: + Engine.SetVariable("tessedit_char_whitelist", "0123456789.:"); + break; + case OcrImage.WindowType.Gap: + Engine.SetVariable("tessedit_char_whitelist", "0123456789.+"); + break; + default: + Engine.SetVariable("tessedit_char_whitelist", ""); + break; + } + - Bitmap enhancedImage = new OcrImage(wImage).Enhance(); + Bitmap enhancedImage = new OcrImage(wImage).Enhance(type); var tessImage = Pix.LoadFromMemory(ImageToByte(enhancedImage)); @@ -93,9 +108,9 @@ namespace OCR_Decode List rawNumbers; - //Removes all non digit chars except for the important ones - //We will need to change this when trying to see the Leader and Lap texts - //string cleanedResult = Regex.Replace(rawResult, "[^0-9.:]", ""); + //In the gaps we can find '+' but we dont care about it its redondant + if(type == OcrImage.WindowType.Gap) + rawResult = Regex.Replace(rawResult, "[^0-9.:]", ""); //Splits into minuts seconds miliseconds rawNumbers = rawResult.Split('.', ':').ToList(); @@ -164,6 +179,9 @@ namespace OCR_Decode result += iter.GetText(PageIteratorLevel.Word); } while (iter.Next(PageIteratorLevel.Word)); } + + enhancedImage.Save(Reader.DEBUG_DUMP_FOLDER + Regex.Replace(result, "[^0-9A-Za-z]", "") + ".png"); + page.Dispose(); return result; }