Added laptime recognition (not precise enough yet tho)

This commit is contained in:
2023-04-04 17:24:55 +02:00
parent bdb04bdf96
commit d9a0a5e766
4 changed files with 85 additions and 44 deletions
+75 -1
View File
@@ -4,6 +4,7 @@ using System.Drawing;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Tesseract;
namespace OCR_Decode namespace OCR_Decode
{ {
@@ -15,7 +16,80 @@ namespace OCR_Decode
} }
public override object DecodePng() public override object DecodePng()
{ {
return 0; int result = GetTimeFromPng();
return result;
}
private int GetTimeFromPng()
{
//returns milliseconds
string rawResult = "";
int treshold = 185;
int result = 0;
Bitmap rawData = WindowImage;
rawData = Window.ConvertToBlackAndWhite(rawData, treshold);
TesseractEngine engine = new TesseractEngine(TESS_DATA_FOLDER.FullName, "eng", EngineMode.Default);
var tessImage = Pix.LoadFromMemory(ImageToByte(WindowImage));
Page page = engine.Process(tessImage);
Graphics g = Graphics.FromImage(rawData);
// Get the iterator for the page layout
using (var iter = page.GetIterator())
{
// Loop over the elements of the page layout
iter.Begin();
do
{
Rect boundingBox;
// Get the bounding box for the current element
if (iter.TryGetBoundingBox(PageIteratorLevel.Word, out boundingBox))
{
g.DrawRectangle(Pens.Red, new Rectangle(boundingBox.X1, boundingBox.Y1, boundingBox.Width, boundingBox.Height));
}
// Get the text for the current element
try{
rawResult += iter.GetText(PageIteratorLevel.Word);
}
catch
{
//nothing we just dont add it if its not a number
}
} while (iter.Next(PageIteratorLevel.Word));
}
string[] rawNumbers;
rawNumbers = rawResult.Split('.',':');
if (rawNumbers.Length == 3)
{
//mm:ss:ms
result = (Convert.ToInt32(rawNumbers[0]) * 1000 * 60) + (Convert.ToInt32(rawNumbers[1]) * 1000) + Convert.ToInt32(rawNumbers[2]);
}
else
{
if (rawNumbers.Length == 2)
{
//ss:ms
result = (Convert.ToInt32(rawNumbers[0]) * 1000) + Convert.ToInt32(rawNumbers[1]);
}
else
{
if (rawNumbers.Length == 1)
{
//ss
result = Convert.ToInt32(rawNumbers[0]);
}
else
{
//Auuuugh
result = 1111111111;
}
}
}
return result;
} }
} }
} }
-34
View File
@@ -15,40 +15,6 @@ namespace OCR_Decode
{ {
Name = "Name"; Name = "Name";
} }
/*
public override object DecodePng()
{
string result = "";
Bitmap rawData = WindowImage;
rawData = Window.ConvertToBlackAndWhite(rawData,150);
TesseractEngine engine = new TesseractEngine(TESS_DATA_FOLDER.FullName, "eng", EngineMode.Default);
var tessImage = Pix.LoadFromMemory(ImageToByte(WindowImage));
Page page = engine.Process(tessImage);
Graphics g = Graphics.FromImage(rawData);
// Get the iterator for the page layout
using (var iter = page.GetIterator())
{
// Loop over the elements of the page layout
iter.Begin();
do
{
Rect boundingBox;
// Get the bounding box for the current element
if (iter.TryGetBoundingBox(PageIteratorLevel.Word, out boundingBox))
{
g.DrawRectangle(Pens.Red, new Rectangle(boundingBox.X1, boundingBox.Y1, boundingBox.Width, boundingBox.Height));
}
// Get the text for the current element
result += iter.GetText(PageIteratorLevel.Word);
} while (iter.Next(PageIteratorLevel.Word));
}
rawData.Save(Reader.DEBUG_DUMP_FOLDER + result + "_Before" + ".png");
return result;
}
*/
public override object DecodePng(List<string> DriverList) public override object DecodePng(List<string> DriverList)
{ {
string result = ""; string result = "";
+7 -7
View File
@@ -40,23 +40,23 @@
// //
this.pbxImage.Location = new System.Drawing.Point(12, 12); this.pbxImage.Location = new System.Drawing.Point(12, 12);
this.pbxImage.Name = "pbxImage"; this.pbxImage.Name = "pbxImage";
this.pbxImage.Size = new System.Drawing.Size(1000, 600); this.pbxImage.Size = new System.Drawing.Size(1231, 724);
this.pbxImage.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; this.pbxImage.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pbxImage.TabIndex = 0; this.pbxImage.TabIndex = 0;
this.pbxImage.TabStop = false; this.pbxImage.TabStop = false;
// //
// tbxResult // tbxResult
// //
this.tbxResult.Location = new System.Drawing.Point(441, 618); this.tbxResult.Location = new System.Drawing.Point(719, 742);
this.tbxResult.Multiline = true; this.tbxResult.Multiline = true;
this.tbxResult.Name = "tbxResult"; this.tbxResult.Name = "tbxResult";
this.tbxResult.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; this.tbxResult.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
this.tbxResult.Size = new System.Drawing.Size(571, 192); this.tbxResult.Size = new System.Drawing.Size(571, 255);
this.tbxResult.TabIndex = 1; this.tbxResult.TabIndex = 1;
// //
// btnPrevious // btnPrevious
// //
this.btnPrevious.Location = new System.Drawing.Point(12, 618); this.btnPrevious.Location = new System.Drawing.Point(12, 745);
this.btnPrevious.Name = "btnPrevious"; this.btnPrevious.Name = "btnPrevious";
this.btnPrevious.Size = new System.Drawing.Size(228, 72); this.btnPrevious.Size = new System.Drawing.Size(228, 72);
this.btnPrevious.TabIndex = 2; this.btnPrevious.TabIndex = 2;
@@ -65,7 +65,7 @@
// //
// btnNext // btnNext
// //
this.btnNext.Location = new System.Drawing.Point(12, 696); this.btnNext.Location = new System.Drawing.Point(12, 823);
this.btnNext.Name = "btnNext"; this.btnNext.Name = "btnNext";
this.btnNext.Size = new System.Drawing.Size(228, 72); this.btnNext.Size = new System.Drawing.Size(228, 72);
this.btnNext.TabIndex = 3; this.btnNext.TabIndex = 3;
@@ -75,7 +75,7 @@
// lblFileName // lblFileName
// //
this.lblFileName.AutoSize = true; this.lblFileName.AutoSize = true;
this.lblFileName.Location = new System.Drawing.Point(12, 771); this.lblFileName.Location = new System.Drawing.Point(12, 898);
this.lblFileName.Name = "lblFileName"; this.lblFileName.Name = "lblFileName";
this.lblFileName.Size = new System.Drawing.Size(66, 16); this.lblFileName.Size = new System.Drawing.Size(66, 16);
this.lblFileName.TabIndex = 4; this.lblFileName.TabIndex = 4;
@@ -85,7 +85,7 @@
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1022, 822); this.ClientSize = new System.Drawing.Size(1255, 1009);
this.Controls.Add(this.lblFileName); this.Controls.Add(this.lblFileName);
this.Controls.Add(this.btnNext); this.Controls.Add(this.btnNext);
this.Controls.Add(this.btnPrevious); this.Controls.Add(this.btnPrevious);
+3 -2
View File
@@ -247,8 +247,9 @@ namespace OCR_Decode
} }
public static string ConvertMsToTime(int amountOfMs) public static string ConvertMsToTime(int amountOfMs)
{ {
int minuts = Convert.ToInt32((float)amountOfMs / 1000f / 60f); //Convert.ToInt32 would round upand I dont want that
int seconds = Convert.ToInt32((float)minuts * 60f - (float)amountOfMs / 1000f); int minuts = (int)((float)amountOfMs / (1000f * 60f));
int seconds = (int)((amountOfMs - (minuts*60f*1000f))/1000);
int ms = amountOfMs - ((minuts * 60 * 1000) + (seconds * 1000)); int ms = amountOfMs - ((minuts * 60 * 1000) + (seconds * 1000));
return minuts + ":" + seconds + ":" + ms; return minuts + ":" + seconds + ":" + ms;