Merge remote-tracking branch 'origin/main'
commit
7402bd7fa6
|
|
@ -1,8 +1,11 @@
|
||||||
using DocumentFormat.OpenXml.EMMA;
|
using DocumentFormat.OpenXml.Bibliography;
|
||||||
|
using DocumentFormat.OpenXml.EMMA;
|
||||||
using Infrastructure;
|
using Infrastructure;
|
||||||
using Infrastructure.CloudSdk.minio;
|
using Infrastructure.CloudSdk.minio;
|
||||||
using Infrastructure.Extensions;
|
using Infrastructure.Extensions;
|
||||||
|
using Infrastructure.Helpers;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
using Microsoft.Extensions.Logging.Log4Net.AspNetCore.Entities;
|
||||||
using Minio;
|
using Minio;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using OpenAuth.App.BaseApp.Base;
|
using OpenAuth.App.BaseApp.Base;
|
||||||
|
|
@ -19,6 +22,7 @@ using System.Drawing.Drawing2D;
|
||||||
using System.Drawing.Imaging;
|
using System.Drawing.Imaging;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
|
using System.Net.Http;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Text.Json.Nodes;
|
using System.Text.Json.Nodes;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
@ -28,6 +32,9 @@ namespace OpenAuth.App.ServiceApp.Algo
|
||||||
|
|
||||||
public class DaHuaAiApp : SqlSugarBaseApp<LasaAlgorithmsRepository, SugarDbContext>
|
public class DaHuaAiApp : SqlSugarBaseApp<LasaAlgorithmsRepository, SugarDbContext>
|
||||||
{
|
{
|
||||||
|
// 8192坐标系
|
||||||
|
private const float STANDARD_WIDTH = 8192f;
|
||||||
|
private const float STANDARD_HEIGHT = 8192f;
|
||||||
public MinioService _minioService;
|
public MinioService _minioService;
|
||||||
private readonly ILogger<DaHuaAiApp> _logger;
|
private readonly ILogger<DaHuaAiApp> _logger;
|
||||||
public DaHuaAiApp(ISugarUnitOfWork<SugarDbContext> unitWork, MinioService minioService, ILogger<DaHuaAiApp> logger,
|
public DaHuaAiApp(ISugarUnitOfWork<SugarDbContext> unitWork, MinioService minioService, ILogger<DaHuaAiApp> logger,
|
||||||
|
|
@ -345,6 +352,142 @@ namespace OpenAuth.App.ServiceApp.Algo
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region 烟雾报警
|
||||||
|
private static readonly HttpClient httpClient = new HttpClient();
|
||||||
|
public async Task<Response<bool>> 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<dynamic>(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 = uploadedUrl,
|
||||||
|
AiAchievementId = lasaAiAchievement.Id,
|
||||||
|
//Lat = lat,
|
||||||
|
//Lng = lng
|
||||||
|
};
|
||||||
|
lasaAiAchievement.Cover = 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<bool>
|
||||||
|
{
|
||||||
|
Result = true,
|
||||||
|
Message = "添加成功"
|
||||||
|
};
|
||||||
|
else
|
||||||
|
return new Response<bool>
|
||||||
|
{
|
||||||
|
Result = false,
|
||||||
|
Message = "添加失败"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 从 URL 下载图片并画框
|
||||||
|
/// </summary>
|
||||||
|
public async Task<string> 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> objectRect { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Root
|
||||||
|
{
|
||||||
|
public List<ImageInfo> imageList { get; set; }
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region 本地模型
|
#region 本地模型
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -362,6 +505,8 @@ namespace OpenAuth.App.ServiceApp.Algo
|
||||||
{
|
{
|
||||||
_logger.LogError("标签信息;" + tag);
|
_logger.LogError("标签信息;" + tag);
|
||||||
_logger.LogError("aiid;" + aiid);
|
_logger.LogError("aiid;" + aiid);
|
||||||
|
var config = ConfigHelper.GetConfigRoot();
|
||||||
|
var Ip = "http://" + config["Minio:Endpoint"] + "/" + config["Minio:BucketName"] + "/";
|
||||||
foreach (var item in tag)
|
foreach (var item in tag)
|
||||||
{
|
{
|
||||||
var info = await db.LasaAiAchievement.GetFirstAsync(r => r.TaskId == taskid && r.Tag == item.class_id.ToString());
|
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()
|
LasaAiAchievementDetail lasaAiAchievementDetail = new LasaAiAchievementDetail()
|
||||||
{
|
{
|
||||||
Id = Guid.NewGuid().ToString(),
|
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,
|
AiAchievementId = lasaAiAchievement.Id,
|
||||||
Lat = lat,
|
Lat = lat,
|
||||||
Lng = lng
|
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.Lat = (float)lat;
|
||||||
lasaAiAchievement.Lng = (float)lng;
|
lasaAiAchievement.Lng = (float)lng;
|
||||||
await db.LasaAiAchievement.InsertAsync(lasaAiAchievement);
|
await db.LasaAiAchievement.InsertAsync(lasaAiAchievement);
|
||||||
|
|
@ -424,7 +571,7 @@ namespace OpenAuth.App.ServiceApp.Algo
|
||||||
LasaAiAchievementDetail lasaAiAchievementDetail = new LasaAiAchievementDetail()
|
LasaAiAchievementDetail lasaAiAchievementDetail = new LasaAiAchievementDetail()
|
||||||
{
|
{
|
||||||
Id = Guid.NewGuid().ToString(),
|
Id = Guid.NewGuid().ToString(),
|
||||||
Image = "http://175.27.168.120:6013/test/" + path,
|
Image = Ip + path,
|
||||||
AiAchievementId = info.Id,
|
AiAchievementId = info.Id,
|
||||||
Lat = lat,
|
Lat = lat,
|
||||||
Lng = lng
|
Lng = lng
|
||||||
|
|
|
||||||
|
|
@ -240,6 +240,19 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers
|
||||||
Result = "执行成功"
|
Result = "执行成功"
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 测试大华
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="info"></param>
|
||||||
|
/// <param name="detectRegionJson"></param>
|
||||||
|
[HttpPost]
|
||||||
|
[AllowAnonymous]
|
||||||
|
public async void AddDaHuaSmokeDetectionImg(string info)
|
||||||
|
{
|
||||||
|
await _app.AddDaHuaSmokeDetectionImg(info);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
///// <summary>
|
///// <summary>
|
||||||
///// 测试大华
|
///// 测试大华
|
||||||
///// </summary>
|
///// </summary>
|
||||||
|
|
|
||||||
|
|
@ -58,6 +58,7 @@ namespace OpenAuth.WebApi.Model.RabbitMQService
|
||||||
autoDelete: true);
|
autoDelete: true);
|
||||||
//await _channel.QueueBindAsync(queueOk.QueueName, "processing_event", "event.eventNotAlarm.picture.1.#");
|
//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, "processing_event", "event.behaviorAlarm.picture.1.#");
|
||||||
|
await _channel.QueueBindAsync(queueOk.QueueName, "storage_event", "event.trafficEvent.1.#");
|
||||||
var consumer = new AsyncEventingBasicConsumer(_channel);
|
var consumer = new AsyncEventingBasicConsumer(_channel);
|
||||||
consumer.ReceivedAsync += async (sender, ea) =>
|
consumer.ReceivedAsync += async (sender, ea) =>
|
||||||
{
|
{
|
||||||
|
|
@ -71,8 +72,8 @@ namespace OpenAuth.WebApi.Model.RabbitMQService
|
||||||
case "processing_event":
|
case "processing_event":
|
||||||
await _app.AddDaHuaImg(message);
|
await _app.AddDaHuaImg(message);
|
||||||
break;
|
break;
|
||||||
case "thing_event":
|
case "storage_event":
|
||||||
Console.WriteLine($"[thing_event] {message}");
|
await _app.AddDaHuaSmokeDetectionImg(message);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Console.WriteLine($"[Other:{ea.RoutingKey}] {message}");
|
Console.WriteLine($"[Other:{ea.RoutingKey}] {message}");
|
||||||
|
|
|
||||||
|
|
@ -89,6 +89,9 @@
|
||||||
},
|
},
|
||||||
"AIModelApi": {
|
"AIModelApi": {
|
||||||
"Url": "http://192.168.10.131:9025",
|
"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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue