| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330 |
- using OpenCvSharp;
- using OpenCvSharp.Extensions;
- using System.Net.Http;
- using System.IO;
- using System;
- using System.Collections.Generic;
- using System.Drawing;
- using OTSAlgrithm.Serialization;
- namespace OTSAlgrithm.AI
- {
- public class AIHttpClient
- {
- protected static NLog.Logger log ;
- /// <summary>
- /// 从分割模型获取二值图
- /// </summary>
- /// <param name="baseUrl"></param>
- /// <param name="input">输入mat 3通道 bgr格式</param>
- /// <param name="output">输出mat 灰度图</param>
- /// <param name="catagory">模型类别和模型配置文件对应</param>
- /// <param name="item">模型序号和模型配置文件对应</param>
- /// <param name="filename">input mat 原图完整路径</param>
- public static void SegmentImage(string baseUrl, Mat input, ref Mat output, string catagory, string item, string filename = "1.jpg")
- {
- string reqUrl = baseUrl + "/api/MetalAI/SegmentImage?catagory=" + catagory + "&item=" + item;
- try
- {
- HttpClient client = new HttpClient(new HttpClientHandler() { UseCookies = false });
- var postContent = new MultipartFormDataContent();
- string boundary = string.Format("--{0}", DateTime.Now.Ticks.ToString("x"));
- postContent.Headers.Add("ContentType", $"multipart/form-data, boundary={boundary}");
- MemoryStream ms = input.ToMemoryStream(".jpg");
- postContent.Add(new StreamContent(ms, (int)ms.Length), "formFiles", Path.GetFileName(filename));
- var response = client.PostAsync(reqUrl, postContent).Result;
- Console.WriteLine(response);
- if (response.IsSuccessStatusCode)
- {
- var streamFromService = response.Content.ReadAsStreamAsync().Result;
- Bitmap bmp = new Bitmap(streamFromService);
- output = OpenCvSharp.Extensions.BitmapConverter.ToMat(bmp);
- if (output.Channels() == 4)
- {
- Cv2.CvtColor(output, output, ColorConversionCodes.BGRA2GRAY);
- }
- else if (output.Channels() == 3)
- {
- Cv2.CvtColor(output, output, ColorConversionCodes.BGR2GRAY);
- }
- //if (item >= 8)
- //{
- // Mat gray = new Mat();
- // Cv2.CvtColor(output, gray, ColorConversionCodes.BGR2GRAY);
- // //Mat thin = new Mat();
- // //CvXImgProc.Thinning(gray, gray, ThinningTypes.ZHANGSUEN);
- // //Cv2.BitwiseNot(gray, gray);
- // //gray = PostProcessor.Run(gray);
- // //gray = WaterSegmentation.WatershedSegment(gray);
- // //Cv2.BitwiseNot(gray, gray);
- // //Cv2.Dilate(gray, gray, Cv2.GetStructuringElement(MorphShapes.Rect, new OpenCvSharp.Size(3, 3)));
- // Cv2.CvtColor(gray, output, ColorConversionCodes.GRAY2BGR);
- //}
- //else if (item >= 5 && item <= 7)
- //{
- // Cv2.BitwiseNot(output, output);
- //}
- return;
- }
- }
- catch (Exception ex)
- {
- //LogHelper.Error(ex);
- Console.WriteLine(ex.ToString());
- }
- }
- /// <summary>
- /// 从模型获得分类结果 需做进一步筛选获得分类
- /// </summary>
- /// <param name="baseUrl"></param>
- /// <param name="input">输入mat 3通道 bgr格式</param>
- /// <param name="resultDic">label confiden 字典</param>
- /// <param name="catagory">模型类别和模型配置文件对应</param>
- /// <param name="item">模型序号和模型配置文件对应</param>
- /// <param name="filename">input mat 原图完整路径</param>
- public static void AI_ClassImage(string baseUrl, Mat input, ref Dictionary<string, string> resultDic, int catagory = 1000, int item = 2, string filename = "1.jpg")
- {
- string reqUrl = baseUrl + "/api/MetalAI/Classify?catagory=" + catagory.ToString() + "&item=" + item.ToString();
- try
- {
- HttpClient client = new HttpClient(new HttpClientHandler() { UseCookies = false });
- var postContent = new MultipartFormDataContent();
- string boundary = string.Format("--{0}", DateTime.Now.Ticks.ToString("x"));
- postContent.Headers.Add("ContentType", $"multipart/form-data, boundary={boundary}");
- MemoryStream ms = input.ToMemoryStream(".jpg");
- postContent.Add(new StreamContent(ms, (int)ms.Length), "formFiles", Path.GetFileName(filename));
- var response = client.PostAsync(reqUrl, postContent).Result;
- //Console.WriteLine(response);
- if (response.IsSuccessStatusCode)
- {
- var streamFromService = response.Content.ReadAsStringAsync().Result;
- //resultDic = JsonConvert.DeserializeObject<Dictionary<string, string>>(streamFromService);
- //var maxItem = resultDic.OrderByDescending(kvp => double.Parse(kvp.Value)).FirstOrDefault();//获取得分最大元素的方法
- return;
- }
- }
- catch (Exception ex)
- {
- // throw new Exception("保存file异常");
- Console.WriteLine(ex.ToString());
- }
- }
-
- public static bool AI_Test(string baseUrl)
- {
- bool connect = false;
- string reqUrl = baseUrl + "/api/metalai/Test";
- try
- {
- HttpClient client = new HttpClient(new HttpClientHandler() { UseCookies = false });
- client.Timeout = TimeSpan.FromSeconds(3);
- var response = client.GetAsync(reqUrl).Result;
- //Console.WriteLine(response);
- if (response.IsSuccessStatusCode)
- {
- connect = true;
- }
- }
- catch (Exception ex)
- {
- // throw new Exception("保存file异常");
- Console.WriteLine(ex.ToString());
- return false;
- }
- return connect;
- }
- /// <summary>
- /// 20250611锡球增加 WQ
- /// </summary>
- /// <param name="baseUrl"></param>
- /// <param name="input"></param>
- /// <param name="output"></param>
- /// <param name="catagory"></param>
- /// <param name="item"></param>
- /// <param name="filename"></param>
- public static void SegmentImage(string baseUrl, Mat input, ref Mat output, int catagory = 1000, int item = 1, string filename = "1.jpg")
- {
- string reqUrl = baseUrl + "/api/MetalAI/SegmentImage?catagory=" + catagory.ToString() + "&item=" + item.ToString();
- try
- {
- HttpClient client = new HttpClient(new HttpClientHandler() { UseCookies = false });
- var postContent = new MultipartFormDataContent();
- string boundary = string.Format("--{0}", DateTime.Now.Ticks.ToString("x"));
- postContent.Headers.Add("ContentType", $"multipart/form-data, boundary={boundary}");
- MemoryStream ms = input.ToMemoryStream(".jpg");
- postContent.Add(new StreamContent(ms, (int)ms.Length), "formFiles", Path.GetFileName(filename));
- var response = client.PostAsync(reqUrl, postContent).Result;
- Console.WriteLine(response);
- if (response.IsSuccessStatusCode)
- {
- var streamFromService = response.Content.ReadAsStreamAsync().Result;
- Bitmap bmp = new Bitmap(streamFromService);
- output = BitmapConverter.ToMat(bmp);
- if (output.Channels() == 4)
- {
- Cv2.CvtColor(output, output, ColorConversionCodes.BGRA2BGR);
- }
- else if (output.Channels() == 1)
- {
- Cv2.CvtColor(output, output, ColorConversionCodes.GRAY2BGR);
- }
- //if(item >= 4)
- //{
- // Mat gray = new Mat();
- // Cv2.CvtColor(output, gray, ColorConversionCodes.BGR2GRAY);
- // //Mat thin = new Mat();
- // //CvXImgProc.Thinning(gray, gray, ThinningTypes.ZHANGSUEN);
- // //Cv2.BitwiseNot(gray, gray);
- // gray = PostProcessor.Run(gray);
- // //gray = WaterSegmentation.WatershedSegment(gray);
- // //Cv2.BitwiseNot(gray, gray);
- // //Cv2.Dilate(gray, gray, Cv2.GetStructuringElement(MorphShapes.Rect, new OpenCvSharp.Size(3, 3)));
- // Cv2.CvtColor(gray, output, ColorConversionCodes.GRAY2BGR);
- //}
- //else if ((item >= 5) && (item <= 7))
- //{
- // Cv2.BitwiseNot(output, output);
- //}
- return;
- }
- }
- catch (Exception ex)
- {
- //LogHelper.Error(ex);
- Console.WriteLine(ex.ToString());
- }
- }
- /// <summary>
- /// 20250611锡球增加 WQ
- /// </summary>
- /// <param name="baseUrl"></param>
- /// <param name="input"></param>
- /// <param name="catagory"></param>
- /// <param name="item"></param>
- /// <param name="filename"></param>
- /// <returns></returns>
- public static AIAnalysisResult DetectObject(string baseUrl, Mat input, string catagory, string item, string filename = "1.jpg")
- {
- string reqUrl = baseUrl + "/api/ObjectDetector?catagory=" + catagory.ToString() + "&item=" + item.ToString();
- try
- {
- HttpClient client = new HttpClient(new HttpClientHandler() { UseCookies = false });
- var postContent = new MultipartFormDataContent();
- string boundary = string.Format("--{0}", DateTime.Now.Ticks.ToString("x"));
- postContent.Headers.Add("ContentType", $"multipart/form-data, boundary={boundary}");
- MemoryStream ms = input.ToMemoryStream(".jpg");
- postContent.Add(new StreamContent(ms, (int)ms.Length), "formFiles", Path.GetFileName(filename));
- var response = client.PostAsync(reqUrl, postContent).Result;
- Console.WriteLine(response);
- if (response.IsSuccessStatusCode)
- {
- var streamFromService = response.Content.ReadAsStringAsync().Result;
- var obj = JsonHelper.Deserialize<AIAnalysisResult>(streamFromService);
- return obj;
- }
- }
- catch (Exception ex)
- {
- //LogHelper.Error(ex);
- Console.WriteLine(ex.ToString());
- }
- return new AIAnalysisResult();
- }
- /// <summary>
- /// 20250611锡球增加 WQ
- /// </summary>
- /// <param name="baseUrl"></param>
- /// <param name="input"></param>
- /// <param name="category"></param>
- /// <param name="item"></param>
- /// <param name="filename"></param>
- /// <returns></returns>
- public static AIAnalysisResult SegmentImageJson(string baseUrl, Mat input, string category = "1000", string item = "1", string filename = "1.jpg")
- {
- log = NLog.LogManager.GetCurrentClassLogger();
- string reqUrl = baseUrl + "/api/MetalAI/SegmentImageJson?catagory=" + category + "&item=" + item;
- try
- {
- HttpClient client = new HttpClient(new HttpClientHandler() { UseCookies = false });
- var postContent = new MultipartFormDataContent();
- string boundary = string.Format("--{0}", DateTime.Now.Ticks.ToString("x"));
- postContent.Headers.Add("ContentType", $"multipart/form-data, boundary={boundary}");
- MemoryStream ms = input.ToMemoryStream(".jpg");
- postContent.Add(new StreamContent(ms, (int)ms.Length), "formFiles", Path.GetFileName(filename));
- var response = client.PostAsync(reqUrl, postContent).Result;
- Console.WriteLine(response);
- if (response.IsSuccessStatusCode)
- {
- var streamFromService = response.Content.ReadAsStringAsync().Result;
- var obj = JsonHelper.Deserialize<AIAnalysisResult>(streamFromService);
- return obj;
- }
- }
- catch (Exception ex)
- {
- log.Error(ex.ToString());
- }
- return new AIAnalysisResult();
- }
- public static AIAnalysisResult SegmentImageGranule(string baseUrl, Mat input, string category = "1000", string item = "1", float diameter = 0.0f, string filename = "1.jpg")
- {
- string reqUrl = baseUrl + "/api/MetalAI/SegmentImageGranule?catagory=" + category + "&item=" + item + "&diameter=" + diameter.ToString();
- try
- {
- HttpClient client = new HttpClient(new HttpClientHandler() { UseCookies = false });
- var postContent = new MultipartFormDataContent();
- string boundary = string.Format("--{0}", DateTime.Now.Ticks.ToString("x"));
- postContent.Headers.Add("ContentType", $"multipart/form-data, boundary={boundary}");
- MemoryStream ms = input.ToMemoryStream(".jpg");
- postContent.Add(new StreamContent(ms, (int)ms.Length), "formFiles", Path.GetFileName(filename));
- var response = client.PostAsync(reqUrl, postContent).Result;
- Console.WriteLine(response);
- if (response.IsSuccessStatusCode)
- {
- var streamFromService = response.Content.ReadAsStringAsync().Result;
- var obj = JsonHelper.Deserialize<AIAnalysisResult>(streamFromService);
- return obj;
- }
- }
- catch (Exception ex)
- {
- //LogHelper.Error(ex);
- Console.WriteLine(ex.ToString());
- }
- return new AIAnalysisResult();
- }
- }
- }
|