From bb0d4732bf0d7bc952402eb95049cdb8fcc60763 Mon Sep 17 00:00:00 2001 From: zhangbin <460190368@qq.com> Date: Mon, 29 Sep 2025 15:40:27 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E4=BF=A1=E6=81=AF=E5=92=8C=E5=A4=A7=E5=8D=8E?= =?UTF-8?q?=E7=AE=97=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- OpenAuth.App/ServiceApp/Algo/DaHuaAiApp.cs | 155 +++++++++++++++++- .../ServiceControllers/DaHuaAiController.cs | 13 ++ .../RabbitMqListenerService.cs | 5 +- OpenAuth.WebApi/appsettings.json | 5 +- 4 files changed, 171 insertions(+), 7 deletions(-) diff --git a/OpenAuth.App/ServiceApp/Algo/DaHuaAiApp.cs b/OpenAuth.App/ServiceApp/Algo/DaHuaAiApp.cs index d34e38d..8ca5fb1 100644 --- a/OpenAuth.App/ServiceApp/Algo/DaHuaAiApp.cs +++ b/OpenAuth.App/ServiceApp/Algo/DaHuaAiApp.cs @@ -1,8 +1,11 @@ -using DocumentFormat.OpenXml.EMMA; +using DocumentFormat.OpenXml.Bibliography; +using DocumentFormat.OpenXml.EMMA; using Infrastructure; using Infrastructure.CloudSdk.minio; using Infrastructure.Extensions; +using Infrastructure.Helpers; using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Log4Net.AspNetCore.Entities; using Minio; using Newtonsoft.Json; using OpenAuth.App.BaseApp.Base; @@ -19,6 +22,7 @@ using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Linq; using System.Net; +using System.Net.Http; using System.Text; using System.Text.Json.Nodes; using System.Threading.Tasks; @@ -28,6 +32,9 @@ namespace OpenAuth.App.ServiceApp.Algo public class DaHuaAiApp : SqlSugarBaseApp { + // 8192坐标系 + private const float STANDARD_WIDTH = 8192f; + private const float STANDARD_HEIGHT = 8192f; public MinioService _minioService; private readonly ILogger _logger; public DaHuaAiApp(ISugarUnitOfWork unitWork, MinioService minioService, ILogger logger, @@ -345,6 +352,142 @@ namespace OpenAuth.App.ServiceApp.Algo } #endregion + #region 烟雾报警 + private static readonly HttpClient httpClient = new HttpClient(); + public async Task> AddDaHuaSmokeDetectionImg(string info) + { + Console.WriteLine(info); + _logger.LogError("烟雾报警数据;" + info); + var config = ConfigHelper.GetConfigRoot(); + var ImgUrlIp = config["DaHua:ImgUrl"]; + using (var db = UnitWork.CreateContext()) + { + var data = JsonConvert.DeserializeObject(info); + var imageList = data.imageList; + foreach (var img in imageList) + { + //var uploadedUrl = await DrawRectanglesOnImageAsync(img.imgUrl.ToString().Replace("\\", ""), img.objectRect); + var uploadedUrl = await DrawRectanglesOnImageAsync(ImgUrlIp + img.imgUrl.ToString().Replace("\\", ""), img.objectRect); + Console.WriteLine($"已处理图片 {uploadedUrl}"); + LasaAiAchievement lasaAiAchievement = new LasaAiAchievement(); + lasaAiAchievement.Id = Guid.NewGuid().ToString(); + lasaAiAchievement.CreateTime = DateTime.Now; + lasaAiAchievement.TaskId = "10"; + lasaAiAchievement.AiModel = "DaHuaSmokeDetection"; + lasaAiAchievement.Tag = ""; + lasaAiAchievement.AlgoId = ""; + lasaAiAchievement.Title = "烟雾报警"; + + + //var confidence = tag.Select(r => r.confidence).Max(); + //var confidence = item.confidence; + //if (confidence < 0.3) + //{ + // break; + //} + //lasaAiAchievement.ConfidenceLevel = (float)Math.Round(confidence, 2) * 100; + + //插入详情 + LasaAiAchievementDetail lasaAiAchievementDetail = new LasaAiAchievementDetail() + { + Id = Guid.NewGuid().ToString(), + Image = "http://175.27.168.120:6013/test/" + uploadedUrl, + AiAchievementId = lasaAiAchievement.Id, + //Lat = lat, + //Lng = lng + }; + lasaAiAchievement.Cover = "http://175.27.168.120:6013/test/" + uploadedUrl; + //lasaAiAchievement.Lat = (float)lat; + //lasaAiAchievement.Lng = (float)lng; + await db.LasaAiAchievement.InsertAsync(lasaAiAchievement); + await db.LasaAiAchievementDetail.InsertAsync(lasaAiAchievementDetail); + } + if (db.Commit()) + return new Response + { + Result = true, + Message = "添加成功" + }; + else + return new Response + { + Result = false, + Message = "添加失败" + }; + } + } + /// + /// 从 URL 下载图片并画框 + /// + public async Task DrawRectanglesOnImageAsync(string url, dynamic rects) + { + try + { + // 下载图片 + url = "http://123.132.248.154:6015/DroneEnforcement/2025/20250514/localStorage.jpg"; + using var stream = await httpClient.GetStreamAsync(url); + using var image = Image.FromStream(stream); + using var g = Graphics.FromImage(image); + using var pen = new Pen(Color.Red, 5); // 红色粗线 + float scaleX = image.Width / STANDARD_WIDTH; + float scaleY = image.Height / STANDARD_HEIGHT; + + // 画框 + foreach (var rect in rects) + { + int x = (int)(rect.objLeft * scaleX); + int y = (int)(rect.objTop * scaleY); + int width = (int)((rect.objRight - rect.objLeft) * scaleX); + int height = (int)((rect.objBottom - rect.objTop) * scaleY); + + if (x < image.Width && y < image.Height && width > 0 && height > 0) + { + g.DrawRectangle(pen, x, y, width, height); + } + } + + // 保存到内存流再上传 + using var outputStream = new MemoryStream(); + image.Save(outputStream, ImageFormat.Png); + outputStream.Position = 0; + + string fileName = Path.GetFileName(new Uri(url).AbsolutePath); + + // 上传到 MinIO + string uploadedUrl = await _minioService.UploadStreamFile(outputStream, fileName, "test", "yanwubaojing"); + + Console.WriteLine("返回 imgurl:" + uploadedUrl); + return uploadedUrl; + } + catch (Exception ex) + { + Console.WriteLine($"处理图片失败: {url}, 错误: {ex.Message}"); + return string.Empty; + } + } + // 定义矩形对象 + public class ObjectRect + { + public int objBottom { get; set; } + public int objLeft { get; set; } + public int objRight { get; set; } + public int objTop { get; set; } + } + + // 定义 imageList 里的结构 + public class ImageInfo + { + public int imgHeight { get; set; } + public int imgWidth { get; set; } + public string imgUrl { get; set; } + public List objectRect { get; set; } + } + + public class Root + { + public List imageList { get; set; } + } + #endregion #region 本地模型 /// @@ -362,6 +505,8 @@ namespace OpenAuth.App.ServiceApp.Algo { _logger.LogError("标签信息;" + tag); _logger.LogError("aiid;" + aiid); + var config = ConfigHelper.GetConfigRoot(); + var Ip = "http://" + config["Minio:Endpoint"] + "/" + config["Minio:BucketName"] + "/"; foreach (var item in tag) { var info = await db.LasaAiAchievement.GetFirstAsync(r => r.TaskId == taskid && r.Tag == item.class_id.ToString()); @@ -407,12 +552,14 @@ namespace OpenAuth.App.ServiceApp.Algo LasaAiAchievementDetail lasaAiAchievementDetail = new LasaAiAchievementDetail() { Id = Guid.NewGuid().ToString(), - Image = "http://175.27.168.120:6013/test/" + path, + //Image = "http://175.27.168.120:6013/test/" + path, + Image = Ip + path, AiAchievementId = lasaAiAchievement.Id, Lat = lat, Lng = lng }; - lasaAiAchievement.Cover = "http://175.27.168.120:6013/test/" + path; + //lasaAiAchievement.Cover = "http://175.27.168.120:6013/test/" + path; + lasaAiAchievement.Cover = Ip + path; lasaAiAchievement.Lat = (float)lat; lasaAiAchievement.Lng = (float)lng; await db.LasaAiAchievement.InsertAsync(lasaAiAchievement); @@ -424,7 +571,7 @@ namespace OpenAuth.App.ServiceApp.Algo LasaAiAchievementDetail lasaAiAchievementDetail = new LasaAiAchievementDetail() { Id = Guid.NewGuid().ToString(), - Image = "http://175.27.168.120:6013/test/" + path, + Image = Ip + path, AiAchievementId = info.Id, Lat = lat, Lng = lng diff --git a/OpenAuth.WebApi/Controllers/ServiceControllers/DaHuaAiController.cs b/OpenAuth.WebApi/Controllers/ServiceControllers/DaHuaAiController.cs index 47a548c..f6c4217 100644 --- a/OpenAuth.WebApi/Controllers/ServiceControllers/DaHuaAiController.cs +++ b/OpenAuth.WebApi/Controllers/ServiceControllers/DaHuaAiController.cs @@ -240,6 +240,19 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers Result = "执行成功" }; } + /// + /// 测试大华 + /// + /// + /// + [HttpPost] + [AllowAnonymous] + public async void AddDaHuaSmokeDetectionImg(string info) + { + await _app.AddDaHuaSmokeDetectionImg(info); + + } + ///// ///// 测试大华 ///// diff --git a/OpenAuth.WebApi/Model/RabbitMQService/RabbitMqListenerService.cs b/OpenAuth.WebApi/Model/RabbitMQService/RabbitMqListenerService.cs index 0723544..a41429b 100644 --- a/OpenAuth.WebApi/Model/RabbitMQService/RabbitMqListenerService.cs +++ b/OpenAuth.WebApi/Model/RabbitMQService/RabbitMqListenerService.cs @@ -58,6 +58,7 @@ namespace OpenAuth.WebApi.Model.RabbitMQService autoDelete: true); //await _channel.QueueBindAsync(queueOk.QueueName, "processing_event", "event.eventNotAlarm.picture.1.#"); await _channel.QueueBindAsync(queueOk.QueueName, "processing_event", "event.behaviorAlarm.picture.1.#"); + await _channel.QueueBindAsync(queueOk.QueueName, "storage_event", "event.trafficEvent.1.#"); var consumer = new AsyncEventingBasicConsumer(_channel); consumer.ReceivedAsync += async (sender, ea) => { @@ -71,8 +72,8 @@ namespace OpenAuth.WebApi.Model.RabbitMQService case "processing_event": await _app.AddDaHuaImg(message); break; - case "thing_event": - Console.WriteLine($"[thing_event] {message}"); + case "storage_event": + await _app.AddDaHuaSmokeDetectionImg(message); break; default: Console.WriteLine($"[Other:{ea.RoutingKey}] {message}"); diff --git a/OpenAuth.WebApi/appsettings.json b/OpenAuth.WebApi/appsettings.json index dee7b37..440703d 100644 --- a/OpenAuth.WebApi/appsettings.json +++ b/OpenAuth.WebApi/appsettings.json @@ -89,6 +89,9 @@ }, "AIModelApi": { "Url": "http://192.168.10.131:9025", - "PushUrl":"rtmp://192.168.3.17:1935/live/11" + "PushUrl": "rtmp://192.168.3.17:1935/live/11" + }, + "DaHua": { + "ImgUrl": "http://123.132.248.154:9585" } } From cb0ab8b0594b2f789cae3700fe4819c8d7c496be Mon Sep 17 00:00:00 2001 From: zhangbin <460190368@qq.com> Date: Mon, 29 Sep 2025 15:52:09 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9url?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- OpenAuth.App/ServiceApp/Algo/DaHuaAiApp.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpenAuth.App/ServiceApp/Algo/DaHuaAiApp.cs b/OpenAuth.App/ServiceApp/Algo/DaHuaAiApp.cs index 8ca5fb1..2935abd 100644 --- a/OpenAuth.App/ServiceApp/Algo/DaHuaAiApp.cs +++ b/OpenAuth.App/ServiceApp/Algo/DaHuaAiApp.cs @@ -424,7 +424,7 @@ namespace OpenAuth.App.ServiceApp.Algo try { // 下载图片 - url = "http://123.132.248.154:6015/DroneEnforcement/2025/20250514/localStorage.jpg"; + //url = "http://123.132.248.154:6015/DroneEnforcement/2025/20250514/localStorage.jpg"; using var stream = await httpClient.GetStreamAsync(url); using var image = Image.FromStream(stream); using var g = Graphics.FromImage(image); From 493ba97809933c504ef821e01172be3023db20a9 Mon Sep 17 00:00:00 2001 From: zhangbin <460190368@qq.com> Date: Mon, 29 Sep 2025 16:05:39 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E7=BD=91=E5=9D=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- OpenAuth.App/ServiceApp/Algo/DaHuaAiApp.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OpenAuth.App/ServiceApp/Algo/DaHuaAiApp.cs b/OpenAuth.App/ServiceApp/Algo/DaHuaAiApp.cs index 2935abd..c3dbe0e 100644 --- a/OpenAuth.App/ServiceApp/Algo/DaHuaAiApp.cs +++ b/OpenAuth.App/ServiceApp/Algo/DaHuaAiApp.cs @@ -391,12 +391,12 @@ namespace OpenAuth.App.ServiceApp.Algo LasaAiAchievementDetail lasaAiAchievementDetail = new LasaAiAchievementDetail() { Id = Guid.NewGuid().ToString(), - Image = "http://175.27.168.120:6013/test/" + uploadedUrl, + Image = uploadedUrl, AiAchievementId = lasaAiAchievement.Id, //Lat = lat, //Lng = lng }; - lasaAiAchievement.Cover = "http://175.27.168.120:6013/test/" + uploadedUrl; + lasaAiAchievement.Cover = uploadedUrl; //lasaAiAchievement.Lat = (float)lat; //lasaAiAchievement.Lng = (float)lng; await db.LasaAiAchievement.InsertAsync(lasaAiAchievement);