From e278a1c0065736e5887714d3a2a7aaf19ab63914 Mon Sep 17 00:00:00 2001 From: maxluli Date: Mon, 10 Apr 2023 11:08:32 +0200 Subject: [PATCH] Loading is now 50X faster --- OCR_Decode/Reader.cs | 24 +++++++++++++----------- OCR_Decode/Window.cs | 9 ++++++--- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/OCR_Decode/Reader.cs b/OCR_Decode/Reader.cs index 63d1f3d..621da79 100644 --- a/OCR_Decode/Reader.cs +++ b/OCR_Decode/Reader.cs @@ -7,6 +7,7 @@ using System.Drawing; using System.IO; using System.Text.Json; using System.Windows.Forms; +using System.Diagnostics; namespace OCR_Decode { @@ -115,25 +116,26 @@ namespace OCR_Decode Point driverSector3Position = new Point(driverSector3.GetProperty("x").GetInt32(), driverSector3.GetProperty("y").GetInt32()); float offset = (((float)MainZone.ZoneImage.Height - (float)(Drivers.Count * FirstZoneSize.Height)) / (float)Drivers.Count); + Bitmap MainZoneImage = MainZone.ZoneImage; for (int i = 0; i < NUMBER_OF_DRIVERS; i++) { Point tmpPos = new Point(0, FirstZonePosition.Y + i * FirstZoneSize.Height - Convert.ToInt32(i * offset) /*- (i* (FirstZoneSize.Height / 32))*/); - Zone newDriverZone = new Zone(MainZone.ZoneImage, new Rectangle(tmpPos, FirstZoneSize)); + Zone newDriverZone = new Zone(MainZoneImage, new Rectangle(tmpPos, FirstZoneSize)); + Bitmap zoneImg = newDriverZone.ZoneImage; - newDriverZone.AddWindow(new DriverPositionWindow(newDriverZone.ZoneImage, new Rectangle(driverPositionPosition, driverPositionArea))); - newDriverZone.AddWindow(new DriverGapToLeaderWindow(newDriverZone.ZoneImage, new Rectangle(driverGapToLeaderPosition, driverGapToLeaderArea))); - newDriverZone.AddWindow(new DriverLapTimeWindow(newDriverZone.ZoneImage, new Rectangle(driverLapTimePosition, driverLapTimeArea))); - newDriverZone.AddWindow(new DriverDrsWindow(newDriverZone.ZoneImage, new Rectangle(driverDrsPosition, driverDrsArea))); - newDriverZone.AddWindow(new DriverTyresWindow(newDriverZone.ZoneImage, new Rectangle(driverTyresPosition, driverTyresArea))); - newDriverZone.AddWindow(new DriverNameWindow(newDriverZone.ZoneImage, new Rectangle(driverNamePosition, driverNameArea))); - newDriverZone.AddWindow(new DriverSector1Window(newDriverZone.ZoneImage, new Rectangle(driverSector1Position, driverSector1Area))); - newDriverZone.AddWindow(new DriverSector2Window(newDriverZone.ZoneImage, new Rectangle(driverSector2Position, driverSector2Area))); - newDriverZone.AddWindow(new DriverSector3Window(newDriverZone.ZoneImage, new Rectangle(driverSector3Position, driverSector3Area))); + newDriverZone.AddWindow(new DriverPositionWindow(zoneImg, new Rectangle(driverPositionPosition, driverPositionArea))); + newDriverZone.AddWindow(new DriverGapToLeaderWindow(zoneImg, new Rectangle(driverGapToLeaderPosition, driverGapToLeaderArea))); + newDriverZone.AddWindow(new DriverLapTimeWindow(zoneImg, new Rectangle(driverLapTimePosition, driverLapTimeArea))); + newDriverZone.AddWindow(new DriverDrsWindow(zoneImg, new Rectangle(driverDrsPosition, driverDrsArea))); + newDriverZone.AddWindow(new DriverTyresWindow(zoneImg, new Rectangle(driverTyresPosition, driverTyresArea))); + newDriverZone.AddWindow(new DriverNameWindow(zoneImg, new Rectangle(driverNamePosition, driverNameArea))); + newDriverZone.AddWindow(new DriverSector1Window(zoneImg, new Rectangle(driverSector1Position, driverSector1Area))); + newDriverZone.AddWindow(new DriverSector2Window(zoneImg, new Rectangle(driverSector2Position, driverSector2Area))); + newDriverZone.AddWindow(new DriverSector3Window(zoneImg, new Rectangle(driverSector3Position, driverSector3Area))); MainZone.AddZone(newDriverZone); } - //MessageBox.Show("We have a main zone with " + MainZone.Zones.Count() + " Driver zones with " + MainZone.Zones[4].Windows.Count() + " windows each and we have " + Drivers.Count + " drivers"); MainZones.Add(MainZone); } diff --git a/OCR_Decode/Window.cs b/OCR_Decode/Window.cs index 0f55c2e..ab18a30 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; + protected static TesseractEngine Engine = null; 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; } @@ -38,8 +38,11 @@ namespace OCR_Decode Image = image; Bounds = bounds; - Engine = new TesseractEngine(TESS_DATA_FOLDER.FullName, "eng", EngineMode.Default); - Engine.DefaultPageSegMode = PageSegMode.SingleLine; + if (Engine == null) + { + Engine = new TesseractEngine(TESS_DATA_FOLDER.FullName, "eng", EngineMode.Default); + Engine.DefaultPageSegMode = PageSegMode.SingleLine; + } } public virtual Object DecodePng() {