diff --git a/OCR_Decode/DriverDrsWindow.cs b/OCR_Decode/DriverDrsWindow.cs index f4248c4..ed3bbfd 100644 --- a/OCR_Decode/DriverDrsWindow.cs +++ b/OCR_Decode/DriverDrsWindow.cs @@ -68,31 +68,27 @@ namespace OCR_Decode } public Rectangle GetBox() { - using (var Engine = new TesseractEngine(TESS_DATA_FOLDER.FullName, "eng", EngineMode.Default)) + var tessImage = Pix.LoadFromMemory(ImageToByte(WindowImage)); + Engine.SetVariable("tessedit_char_whitelist", ""); + Page page = Engine.Process(tessImage); + + using (var iter = page.GetIterator()) { - Engine.DefaultPageSegMode = PageSegMode.SingleLine; - var tessImage = Pix.LoadFromMemory(ImageToByte(WindowImage)); - Engine.SetVariable("tessedit_char_whitelist", ""); - Page page = Engine.Process(tessImage); - - using (var iter = page.GetIterator()) + iter.Begin(); + do { - iter.Begin(); - do + Rect boundingBox; + + // Get the bounding box for the current element + if (iter.TryGetBoundingBox(PageIteratorLevel.Word, out boundingBox)) { - Rect boundingBox; + page.Dispose(); + return new Rectangle(boundingBox.X1, boundingBox.X2, boundingBox.Width, boundingBox.Height); + } + } while (iter.Next(PageIteratorLevel.Word)); - // Get the bounding box for the current element - if (iter.TryGetBoundingBox(PageIteratorLevel.Word, out boundingBox)) - { - page.Dispose(); - return new Rectangle(boundingBox.X1, boundingBox.X2, boundingBox.Width, boundingBox.Height); - } - } while (iter.Next(PageIteratorLevel.Word)); - - page.Dispose(); - return new Rectangle(0, 0, 0, 0); - } + page.Dispose(); + return new Rectangle(0, 0, 0, 0); } } } diff --git a/OCR_Decode/DriverGapToLeaderWindow.cs b/OCR_Decode/DriverGapToLeaderWindow.cs index 854ee07..97fca66 100644 --- a/OCR_Decode/DriverGapToLeaderWindow.cs +++ b/OCR_Decode/DriverGapToLeaderWindow.cs @@ -16,12 +16,8 @@ namespace OCR_Decode } public override async Task DecodePng() { - using (var Engine = new TesseractEngine(TESS_DATA_FOLDER.FullName, "eng", EngineMode.Default)) - { - Engine.DefaultPageSegMode = PageSegMode.SingleLine; - int result = await GetTimeFromPng(WindowImage, OcrImage.WindowType.Gap,Engine); - return result; - } + int result = await GetTimeFromPng(WindowImage, OcrImage.WindowType.Gap, Engine); + return result; } } } diff --git a/OCR_Decode/DriverLapTimeWindow.cs b/OCR_Decode/DriverLapTimeWindow.cs index 902dc83..5743624 100644 --- a/OCR_Decode/DriverLapTimeWindow.cs +++ b/OCR_Decode/DriverLapTimeWindow.cs @@ -16,12 +16,8 @@ namespace OCR_Decode } public override async Task DecodePng() { - using (var Engine = new TesseractEngine(TESS_DATA_FOLDER.FullName, "eng", EngineMode.Default)) - { - Engine.DefaultPageSegMode = PageSegMode.SingleLine; - int result = await GetTimeFromPng(WindowImage, OcrImage.WindowType.LapTime,Engine); - return result; - } + int result = await GetTimeFromPng(WindowImage, OcrImage.WindowType.LapTime,Engine); + return result; } } } diff --git a/OCR_Decode/DriverNameWindow.cs b/OCR_Decode/DriverNameWindow.cs index 4839909..6f36245 100644 --- a/OCR_Decode/DriverNameWindow.cs +++ b/OCR_Decode/DriverNameWindow.cs @@ -17,19 +17,15 @@ namespace OCR_Decode } public override async Task DecodePng(List DriverList) { - using (var Engine = new TesseractEngine(TESS_DATA_FOLDER.FullName, "eng", EngineMode.Default)) - { - Engine.DefaultPageSegMode = PageSegMode.SingleLine; - string result = ""; - result = await GetStringFromPng(WindowImage,Engine); + string result = ""; + result = await GetStringFromPng(WindowImage,Engine); - if (!IsADriver(DriverList, result)) - { - //I put everything in uppercase to try to lower the chances of bad answers - result = FindClosestMatch(DriverList.ConvertAll(d => d.ToUpper()), result.ToUpper()); - } - return result; + if (!IsADriver(DriverList, result)) + { + //I put everything in uppercase to try to lower the chances of bad answers + result = FindClosestMatch(DriverList.ConvertAll(d => d.ToUpper()), result.ToUpper()); } + return result; } private static bool IsADriver(List drivers, string potentialDriver) { diff --git a/OCR_Decode/DriverPositionWindow.cs b/OCR_Decode/DriverPositionWindow.cs index ec86cde..f37457f 100644 --- a/OCR_Decode/DriverPositionWindow.cs +++ b/OCR_Decode/DriverPositionWindow.cs @@ -16,23 +16,19 @@ namespace OCR_Decode } public override async Task DecodePng() { - using (var Engine = new TesseractEngine(TESS_DATA_FOLDER.FullName, "eng", EngineMode.Default)) - { - Engine.DefaultPageSegMode = PageSegMode.SingleLine; - string result = await GetStringFromPng(WindowImage,Engine, "0123456789"); + string result = await GetStringFromPng(WindowImage,Engine, "0123456789"); - int position; - try - { - position = Convert.ToInt32(result); - } - catch - { - position = -1; - //WindowImage.Save(Reader.DEBUG_DUMP_FOLDER + "FailedPosition" + ".png"); - } - return position; + int position; + try + { + position = Convert.ToInt32(result); } + catch + { + position = -1; + //WindowImage.Save(Reader.DEBUG_DUMP_FOLDER + "FailedPosition" + ".png"); + } + return position; } } } diff --git a/OCR_Decode/DriverSector1Window.cs b/OCR_Decode/DriverSector1Window.cs index 2c8c142..b83a44d 100644 --- a/OCR_Decode/DriverSector1Window.cs +++ b/OCR_Decode/DriverSector1Window.cs @@ -16,12 +16,8 @@ namespace OCR_Decode } public override async Task DecodePng() { - using (var Engine = new TesseractEngine(TESS_DATA_FOLDER.FullName, "eng", EngineMode.Default)) - { - Engine.DefaultPageSegMode = PageSegMode.SingleLine; - int result = await GetTimeFromPng(WindowImage,OcrImage.WindowType.Sector,Engine); - return result; - } + int result = await GetTimeFromPng(WindowImage, OcrImage.WindowType.Sector, Engine); + return result; } } } diff --git a/OCR_Decode/DriverSector2Window.cs b/OCR_Decode/DriverSector2Window.cs index 575636a..f01f8ab 100644 --- a/OCR_Decode/DriverSector2Window.cs +++ b/OCR_Decode/DriverSector2Window.cs @@ -16,12 +16,8 @@ namespace OCR_Decode } public override async Task DecodePng() { - using (var Engine = new TesseractEngine(TESS_DATA_FOLDER.FullName, "eng", EngineMode.Default)) - { - Engine.DefaultPageSegMode = PageSegMode.SingleLine; - int result = await GetTimeFromPng(WindowImage, OcrImage.WindowType.Sector,Engine); - return result; - } + int result = await GetTimeFromPng(WindowImage, OcrImage.WindowType.Sector,Engine); + return result; } } } diff --git a/OCR_Decode/DriverSector3Window.cs b/OCR_Decode/DriverSector3Window.cs index fa7ea43..250f103 100644 --- a/OCR_Decode/DriverSector3Window.cs +++ b/OCR_Decode/DriverSector3Window.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Drawing; using System.Linq; using System.Text; @@ -16,12 +17,8 @@ namespace OCR_Decode } public override async Task DecodePng() { - using (var Engine = new TesseractEngine(TESS_DATA_FOLDER.FullName, "eng", EngineMode.Default)) - { - Engine.DefaultPageSegMode = PageSegMode.SingleLine; - int result = await GetTimeFromPng(WindowImage, OcrImage.WindowType.Sector,Engine); - return result; - } + int result = await GetTimeFromPng(WindowImage, OcrImage.WindowType.Sector,Engine); + return result; } } } diff --git a/OCR_Decode/DriverTyresWindow.cs b/OCR_Decode/DriverTyresWindow.cs index 97125a0..fecc544 100644 --- a/OCR_Decode/DriverTyresWindow.cs +++ b/OCR_Decode/DriverTyresWindow.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Drawing; using System.Linq; using System.Text; @@ -34,55 +35,51 @@ namespace OCR_Decode //tyreZone.Save(Reader.DEBUG_DUMP_FOLDER + "ZONE" + ".png"); Tyre.Type type = Tyre.Type.Undefined; int laps = -1; - using (var Engine = new TesseractEngine(TESS_DATA_FOLDER.FullName, "eng", EngineMode.Default)) + //MHIWsmhiw so we can detect Soft Medium Hard Inters and Wet tyres + string text = await GetStringFromPng(tyreZone,Engine, "SMHIW", OcrImage.WindowType.Tyre); + if (text.Length == 1 && text != "") { - Engine.DefaultPageSegMode = PageSegMode.SingleLine; - //MHIWsmhiw so we can detect Soft Medium Hard Inters and Wet tyres - string text = await GetStringFromPng(tyreZone, Engine, "SMHIW", OcrImage.WindowType.Tyre); - if (text.Length == 1 && text != "") + //We found a tire letter + laps = 0; + text = text.ToUpper(); + switch (text[0]) { - //We found a tire letter - laps = 0; - text = text.ToUpper(); - switch (text[0]) - { - case 'S': - type = Tyre.Type.Soft; - break; - case 'M': - type = Tyre.Type.Medium; - break; - case 'H': - type = Tyre.Type.Hard; - break; - case 'I': - type = Tyre.Type.Inter; - break; - case 'W': - type = Tyre.Type.Wet; - break; - default: - type = Tyre.Type.Undefined; - break; - } + case 'S': + type = Tyre.Type.Soft; + break; + case 'M': + type = Tyre.Type.Medium; + break; + case 'H': + type = Tyre.Type.Hard; + break; + case 'I': + type = Tyre.Type.Inter; + break; + case 'W': + type = Tyre.Type.Wet; + break; + default: + type = Tyre.Type.Undefined; + break; } - else - { - string number = await GetStringFromPng(tyreZone, Engine, "0123456789", OcrImage.WindowType.Tyre); - try - { - laps = Convert.ToInt32(number); - } - catch - { - laps = -1; - } - type = GetTyreTypeFromColor(OcrImage.GetAvgColorFromBitmap(OcrImage.Resize(tyreZone))); - } - - //tyreZone.Save(Reader.DEBUG_DUMP_FOLDER + "Tyre" + type + "Laps" + laps + '#' + rnd.Next(0, 1000) + ".png"); - return new Tyre(type, laps); } + else + { + string number = await GetStringFromPng(tyreZone, Engine, "0123456789", OcrImage.WindowType.Tyre); + try + { + laps = Convert.ToInt32(number); + } + catch + { + laps = -1; + } + type = GetTyreTypeFromColor(OcrImage.GetAvgColorFromBitmap(OcrImage.Resize(tyreZone))); + } + + //tyreZone.Save(Reader.DEBUG_DUMP_FOLDER + "Tyre" + type + "Laps" + laps + '#' + rnd.Next(0, 1000) + ".png"); + return new Tyre(type, laps); } private Rectangle FindTyreZone() { diff --git a/OCR_Decode/Window.cs b/OCR_Decode/Window.cs index 08def06..41bbdce 100644 --- a/OCR_Decode/Window.cs +++ b/OCR_Decode/Window.cs @@ -16,7 +16,7 @@ namespace OCR_Decode private Rectangle _bounds; private Bitmap _image; private string _name; - //protected static TesseractEngine Engine = null; + protected TesseractEngine Engine; public Rectangle Bounds { get => _bounds; private set => _bounds = value; } public Bitmap Image { get => _image; set => _image = value; } public string Name { get => _name; protected set => _name = value; } @@ -37,13 +37,8 @@ namespace OCR_Decode { Image = image; Bounds = bounds; - /* - if (Engine == null) - { - Engine = new TesseractEngine(TESS_DATA_FOLDER.FullName, "eng", EngineMode.Default); - Engine.DefaultPageSegMode = PageSegMode.SingleLine; - } - */ + Engine = new TesseractEngine(TESS_DATA_FOLDER.FullName, "eng", EngineMode.Default); + Engine.DefaultPageSegMode = PageSegMode.SingleLine; } public virtual async Task DecodePng() {