AIParkingApplication/AIParkingApplication/Util.cs

136 lines
4.0 KiB
C#

using Newtonsoft.Json;
using OpenCvSharp;
using System;
using System.Diagnostics;
using System.Drawing;
using System.Net.Http;
using System.Net.NetworkInformation;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace AIParkingApplication
{
public static class Util
{
private static HttpClient httpClientEngine = new HttpClient { BaseAddress = new Uri("http://localhost:8080/"), Timeout = TimeSpan.FromMilliseconds(5000) };
public static bool IsPingable(string destinationIPAddress, out long pingTime, int timeOut = UtilConstant.PING_TIMEOUT_MS)
{
var pingTask = Task.Factory.StartNew(async () =>
{
Ping pinger = new Ping();
try
{
PingReply reply = await pinger.SendPingAsync(destinationIPAddress, timeOut);
return reply;
}
catch (Exception)
{
return null;
}
finally
{
pinger.Dispose();
}
});
var pingResult = pingTask.Result.Result;
if (pingResult != null && pingResult.Status == IPStatus.Success)
{
pingTime = pingResult.RoundtripTime;
return true;
}
else
{
pingTime = -1;
return false;
}
}
public static string GetCurrentMethodName()
{
var strackTrace = new StackTrace();
var sf = strackTrace.GetFrame(1);
return sf.GetMethod().Name;
}
public static async Task<OcrResult> SendEngineRequestAsync(Mat plateImage, PlateType plateType)
{
string plateImageBase64 = Convert.ToBase64String(plateImage.ToBytes());
try
{
var request = new PlateRequestEngineModel
{
Img64 = plateImageBase64,
Mode = plateType == PlateType.Square ? "square" : "long",
Display = "full"
};
HttpResponseMessage response = await httpClientEngine.PostAsJsonAsync("/get-from-frame", request);
response.EnsureSuccessStatusCode();
var ocrResult = await response.Content.ReadAsAsync<OcrResult>();
return ocrResult;
}
catch (Exception ex)
{
Console.WriteLine($"SendEngineRequest : {ex.Message}");
return new OcrResult();
}
}
public static void UpdateImage(this PictureBox pictureBox, Bitmap image)
{
pictureBox.Invoke(new Action(() =>
{
pictureBox.Image?.Dispose();
pictureBox.Image = image;
}));
}
public static void UpdateLabel(this Label label, string text, Color color)
{
label.Invoke(new Action(() =>
{
label.BackColor = color;
label.Text = text;
}));
}
public static void UpdateLabel(this Label label, string text)
{
label.Invoke(new Action(() =>
{
label.Text = text;
}));
}
}
public class PlateRequestEngineModel
{
[JsonProperty("img64")]
public string Img64 { get; set; }
[JsonProperty("mode")]
public string Mode { get; set; }
[JsonProperty("display")]
public string Display { get; set; }
}
public class OcrResult
{
[JsonProperty("ocr")]
public string PlateString { get; set; }
[JsonProperty("plate")]
public string PlateImageBase64 { get; set; }
}
public static class UtilConstant
{
public const int PING_TIMEOUT_MS = 500;
public const string HTTP_POST_METHOD = "POST";
public const string HTTP_POST_CONTENTTYPE = "application/json";
}
}