洁 任 2 months ago
commit 4cf82e1ce5

@ -35,14 +35,14 @@ namespace OpenAuth.App.ServiceApp.Algo
#region 大华算法
//分析两次航线图片
public async Task<Response<List<dynamic>>> BehaviorAlarm(string firstId, string secondId)
public async Task<Response<List<dynamic>>> BehaviorAlarm(string firstId, string secondId, string cdid)
{
using (var db = UnitWork.CreateContext())
{
//var imageList1 = await db.LasaMediaFile.AsQueryable().Where(r => r.TaskId == firstId && r.AbsoluteAltitude != 0 && r.AbsoluteAltitude != null).ToListAsync();
//var imageList2 = await db.LasaMediaFile.AsQueryable().Where(r => r.TaskId == secondId && r.AbsoluteAltitude != 0 && r.AbsoluteAltitude != null).ToListAsync();
var imageList1 = await db.LasaMediaFile.AsQueryable().Where(r => r.Id == firstId && r.AbsoluteAltitude != 0 && r.AbsoluteAltitude != null).ToListAsync();
var imageList2 = await db.LasaMediaFile.AsQueryable().Where(r => r.Id == secondId && r.AbsoluteAltitude != 0 && r.AbsoluteAltitude != null).ToListAsync();
var imageList1 = await db.LasaMediaFile.AsQueryable().Where(r => r.TaskId == firstId && r.AbsoluteAltitude != 0 && r.AbsoluteAltitude != null).OrderBy(r=>r.CreateTime).ToListAsync();
var imageList2 = await db.LasaMediaFile.AsQueryable().Where(r => r.TaskId == secondId && r.AbsoluteAltitude != 0 && r.AbsoluteAltitude != null).OrderBy(r => r.CreateTime).ToListAsync();
//var imageList1 = await db.LasaMediaFile.AsQueryable().Where(r => r.Id == firstId && r.AbsoluteAltitude != 0 && r.AbsoluteAltitude != null).ToListAsync();
//var imageList2 = await db.LasaMediaFile.AsQueryable().Where(r => r.Id == secondId && r.AbsoluteAltitude != 0 && r.AbsoluteAltitude != null).ToListAsync();
List<dynamic> dataList = new List<dynamic>();
for (int i = 0; i < imageList1.Count; i++)
{
@ -57,6 +57,7 @@ namespace OpenAuth.App.ServiceApp.Algo
taskId = "8ab0e1e213234a848e20d0d335559786",
capTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
taskTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
cdid = cdid,
imageInfo = new
{
imgSize = 1667235,
@ -79,6 +80,7 @@ namespace OpenAuth.App.ServiceApp.Algo
pitch = imageList1[i].GimbalPitchDegree,
roll = imageList1[i].GimbalRollDegree,
focalLength = imageList1[i].FocalLength
},
new {
imgUrl = "http://175.27.168.120:6013/test/"+imageList2[i].ObjectKey,
@ -107,48 +109,89 @@ namespace OpenAuth.App.ServiceApp.Algo
}
public async Task<Response<bool>> AddDaHuaImg(string info)
{
Console.WriteLine(info);
using (var db = UnitWork.CreateContext())
{
var data = JsonConvert.DeserializeObject<dynamic>(info);
string cdid = data.cdid.ToString();
var oldinfo = await db.LasaAiAchievement.GetFirstAsync(r => r.TaskId == cdid);
var imageList = data.imageInfoList;
string detectRegionJson = JsonConvert.SerializeObject(data.info.detectRegion);
var regionArray = JsonConvert.DeserializeObject<dynamic>(detectRegionJson);
LasaAiAchievement lasaAiAchievement = new LasaAiAchievement
//string detectRegionJson = "[[0, 0],[8063, 647],[8017, 7774],[552, 8033]]";
//string url = "http://123.132.248.154:6015/DroneEnforcement/2025/20250514/lQLPJyIVimQWGKnNA4PNA6Gw1D3q5gbxUvQIiumcIx4vAA_929_899.png";
var regionArray = JsonConvert.DeserializeObject<int[][]>(detectRegionJson);
if (oldinfo != null)
{
Id = Guid.NewGuid().ToString(),
Title = "耕地破坏区域报警",
CreateTime = DateTime.Now,
AiModel = "DaHuaAi"
};
var imageList = data.imageInfoList;
int index = 0;
foreach (var item in imageList)
int index = 0;
foreach (var item in imageList)
{
//插入详情
LasaAiAchievementDetail lasaAiAchievementDetail = new LasaAiAchievementDetail()
{
Id = Guid.NewGuid().ToString(),
Image = item.imgUrl,
AiAchievementId = oldinfo.Id,
Lng = (double?)item.longitude ?? 0.0,
Lat = (double?)item.latitude ?? 0.0,
};
// 如果是第二张图片 -> 画区域 + 上传
if (index == 1)
{
Console.WriteLine(item.imgUrl);
Console.WriteLine(regionArray);
var imgurlend = await DrawingImgAndUpload(item.imgUrl.ToString().Replace("\\", ""), regionArray, cdid);
lasaAiAchievementDetail.Image = imgurlend;
}
await db.LasaAiAchievementDetail.InsertAsync(lasaAiAchievementDetail);
index++;
}
}
else
{
//插入详情
LasaAiAchievementDetail lasaAiAchievementDetail = new LasaAiAchievementDetail()
int index = 0;
LasaAiAchievement lasaAiAchievement = new LasaAiAchievement
{
Id = Guid.NewGuid().ToString(),
Image = item.imgUrl,
AiAchievementId = lasaAiAchievement.Id,
Lng = (double?)item.longitude ?? 0.0,
Lat = (double?)item.latitude ?? 0.0,
Title = "本地耕地破坏区域报警",
CreateTime = DateTime.Now,
AiModel = "DaHuaAi",
TaskId = cdid
};
//// 如果是第二张图片 -> 画区域 + 上传
//var a = await DrawingImgAndUpload(item.imgUrl, regionArray);
//if (index == 1)
//{
// //DrawingImgAsync();
// Console.WriteLine(item.imgUrl);
// Console.WriteLine(regionArray);
// a = await DrawingImgAndUpload(item.imgUrl, regionArray);
// lasaAiAchievementDetail.Image = a;
//}
lasaAiAchievement.Lat = item.latitude;
lasaAiAchievement.Lng = item.longitude;
lasaAiAchievement.Cover = item.imgUrl;
await db.LasaAiAchievementDetail.InsertAsync(lasaAiAchievementDetail);
index++;
foreach (var item in imageList)
{
//插入详情
LasaAiAchievementDetail lasaAiAchievementDetail = new LasaAiAchievementDetail()
{
Id = Guid.NewGuid().ToString(),
Image = item.imgUrl,
AiAchievementId = lasaAiAchievement.Id,
Lng = (double?)item.longitude ?? 0.0,
Lat = (double?)item.latitude ?? 0.0,
};
// 如果是第二张图片 -> 画区域 + 上传
if (index == 1)
{
Console.WriteLine(item.imgUrl);
Console.WriteLine(regionArray);
//var imgurlend = await DrawingImgAndUpload(item.imgUrl, regionArray);
var imgurlend = await DrawingImgAndUpload(item.imgUrl.ToString().Replace("\\", ""), regionArray, cdid);
lasaAiAchievementDetail.Image = imgurlend;
}
lasaAiAchievement.Lat = item.latitude;
lasaAiAchievement.Lng = item.longitude;
lasaAiAchievement.Cover = item.imgUrl;
await db.LasaAiAchievementDetail.InsertAsync(lasaAiAchievementDetail);
index++;
}
await db.LasaAiAchievement.InsertAsync(lasaAiAchievement);
//查询监测记录然后更新监测记录的成果id
await db.Lasa_ChangeDetection.UpdateAsync(u => new Lasa_ChangeDetection
{
AiAchievementId = lasaAiAchievement.Id
}, u => u.Id == cdid);
}
await db.LasaAiAchievement.InsertAsync(lasaAiAchievement);
if (db.Commit())
return new Response<bool>
{
@ -163,13 +206,18 @@ namespace OpenAuth.App.ServiceApp.Algo
};
}
}
public async Task<string> DrawingImgAndUpload(string url, dynamic regionArray)
{
//public async Task<string> DrawingImgAndUpload(string url, int[][] regionArray)
public async Task<string> DrawingImgAndUpload(string url, int[][] regionArray, string cdid)
{
//string url = "http://123.132.248.154:6015/DroneEnforcement/2025/20250514/lQLPJyIVimQWGKnNA4PNA6Gw1D3q5gbxUvQIiumcIx4vAA_929_899.png";
// detectRegion JSON可以直接替换成你的接口返回数据
//string detectRegionJson = "[[0, 0],[8063, 647],[8017, 7774],[552, 8033]]";
//var regionArray = JsonConvert.DeserializeObject<int[][]>(detectRegionJson);
Console.WriteLine($"regionArray 是否为空: {regionArray == null}, 长度: {regionArray?.Length}");
//Console.WriteLine($"regionArray 是否为空");
if (regionArray == null || regionArray.Length == 0)
throw new ArgumentException("detectRegion 参数无效");
//if (regionArray == null || regionArray.Length == 0)
// throw new ArgumentException("detectRegion 参数无效");
Point[] polygon = new Point[regionArray.Length];
for (int i = 0; i < regionArray.Length; i++)
@ -180,7 +228,6 @@ namespace OpenAuth.App.ServiceApp.Algo
using (HttpClient client = new HttpClient())
{
var bytes = await client.GetByteArrayAsync(url);
using (var ms = new MemoryStream(bytes))
using (var image = Image.FromStream(ms))
using (var bmp = new Bitmap(image))
@ -189,20 +236,19 @@ namespace OpenAuth.App.ServiceApp.Algo
g.SmoothingMode = SmoothingMode.AntiAlias;
using (var pen = new Pen(Color.Red, 5))
using (var brush = new SolidBrush(Color.FromArgb(80, Color.Blue)))
{
g.FillPolygon(brush, polygon);
g.DrawPolygon(pen, polygon);
}
using (var outputStream = new MemoryStream())
{
bmp.Save(outputStream, ImageFormat.Png);
outputStream.Position = 0;
string fileName = Path.GetFileName(new Uri(url).AbsolutePath);
// 上传到 MinIO直接传 MemoryStream
string uploadedUrl = await _minioService.UploadStreamFile(outputStream, fileName, "test", Guid.NewGuid().ToString());
Console.WriteLine(uploadedUrl);
string uploadedUrl = await _minioService.UploadStreamFile(outputStream, fileName, "test", cdid);
Console.WriteLine("返回imgurl" + uploadedUrl);
return uploadedUrl;
}
}

@ -155,5 +155,71 @@ namespace OpenAuth.App.ServiceApp
}
}
#endregion
#region 变化检测
/// <summary>
/// 分页获取所有变化检测
/// </summary>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="key"></param>
/// <returns></returns>
public async Task<Response<PageInfo<List<Lasa_ChangeDetection>>>> GetChangeDetectionPageList(int page, int limit, string key)
{
RefAsync<int> totalCount = 0;
using (var db = UnitWork.CreateContext())
{
var list = await db.Lasa_ChangeDetection.AsQueryable()
.WhereIF(!string.IsNullOrEmpty(key), a => a.Title.Contains(key))
.OrderByDescending(a => a.CreateTime)
.ToPageListAsync(page, limit, totalCount);
return new Response<PageInfo<List<Lasa_ChangeDetection>>>
{
Result = new PageInfo<List<Lasa_ChangeDetection>> { Items = list, Total = totalCount }
};
}
}
public async Task<Response<string>> AddChangeDetection(Lasa_ChangeDetection info)
{
using (var db = UnitWork.CreateContext())
{
info.Id = Guid.NewGuid().ToString();
info.CreateTime = DateTime.Now;
await db.Lasa_ChangeDetection.InsertAsync(info);
if (db.Commit())
return new Response<string>
{
Result = info.Id,
Message = "添加成功"
};
else
return new Response<string>
{
Result = info.Id,
Message = "添加失败"
};
}
}
//删除
public async Task<Response<bool>> DeleteChangeDetection(string id)
{
using (var db = UnitWork.CreateContext())
{
await db.Lasa_ChangeDetection.DeleteByIdAsync(id);
if (db.Commit())
return new Response<bool>
{
Result = true,
Message = "删除成功"
};
else
return new Response<bool>
{
Result = false,
Message = "删除失败"
};
}
}
#endregion
}
}

@ -879,9 +879,9 @@ namespace OpenAuth.App.ServiceApp.DroneDocking
var result = JsonSerializer.Deserialize<ReciveData<string>>(responseBody);
Console.WriteLine($"无人机状态上报结果:{responseBody}");
//解密数据
byte[] resbytesx = Convert.FromBase64String(resxClScrete);
/*byte[] resbytesx = Convert.FromBase64String(resxClScrete);
byte[] resdatabytes = Convert.FromBase64String(result?.data);
string data = _helper.Decrypt(resbytesx, resdatabytes);
string data = _helper.Decrypt(resbytesx, resdatabytes);*/
// 结果
}
catch (HttpRequestException e)

@ -392,7 +392,7 @@ namespace OpenAuth.App.ServiceApp
/// <param name="key"></param>
/// <returns></returns>
public async Task<Response<PageInfo<List<LasaTask>>>> GetTaskPageList(int page, int limit, string key,
int? status,string airLineId)
int? status, string airLineId)
{
RefAsync<int> totalCount = 0;
using (var db = UnitWork.CreateContext())
@ -2720,6 +2720,17 @@ namespace OpenAuth.App.ServiceApp
public async Task<Response<bool>> EndAiInspection(string taskid)
{
var taskTemp = await Repository.ChangeRepository<SugarRepositiry<LasaTask>>()
.GetByIdAsync(taskid);
if (taskTemp == null)
{
return new Response<bool>()
{
Result = true,
Message = "任务不存在"
};
}
var task = new LasaTask()
{
Id = taskid,

@ -550,20 +550,9 @@ public class ConfigSubscribe : IJob
{
string flightId1 = (string)data.output.ext.flight_id;
var waylineMissionState = (int)data.output.ext.wayline_mission_state;
// current_step
var isHandle = IsDuplicate(Md5.Encrypt($"{result.bid}{flightId1}"));
_logger.LogDebug($"md5: {isHandle} 重复否:{IsDuplicate(Md5.Encrypt(message))}" +
$"主题:{topic} 信息:{message} ");
if (isHandle)
{
_logger.LogInformation("跳过处理");
break;
}
_logger.LogDebug("航线进度未跳过处理");
code = data.result; // result
var taskAssign1 = _manageApp.GetTaskAssignByFlightId(flightId1);
// 处理航线进度 ,也有可能是失败
if (code != 0)
@ -603,39 +592,7 @@ public class ConfigSubscribe : IJob
}
else
{
var step = (int)data.output.progress.current_step;
_logger.LogDebug($"航线进度:{waylineMissionState} {step} {message}");
if (step.Equals(25)) // todo 关于会接收到不同消息问题,如何处理
{
var task = await _sqlSugarClient.Queryable<LasaTask>()
.FirstAsync(y => y.Id == taskAssign1.TaskId);
if (task != null && !string.IsNullOrEmpty(task.AIInspection) &&
task.AIInspection.Equals("true") && string.IsNullOrEmpty(task.PushUrl))
{
_logger.LogDebug("执行AI 智能巡检。。。。。");
//var rtmp = "rtmp://box.wisestcity.com:1935/live/7";
var bid = Guid.NewGuid().ToString();
var tid = Guid.NewGuid().ToString();
var param = @$"{{
""bid"": ""{bid}"",
""method"": ""live_start_push"",
""tid"": ""{tid}"",
""timestamp"": {DateTimeOffset.Now.ToUnixTimeMilliseconds()},
""data"": {{
""url_type"": 1,
""url"": ""{rtmp}"",
""video_id"": ""1581F8HGX254V00A0BUY/99-0-0/normal-0"",
""video_quality"": 3
}}
}}";
_logger.LogDebug($"直播参数:{param}");
var topicRequest = $"thing/product/{sn}/services";
// 开启直播
await _mqttClientManager.PublishAsync(topicRequest, param);
liveInfo[$"{tid}{bid}"] = taskAssign1.TaskId;
}
}
// 航线成功
if (waylineMissionState.Equals(9)) // 航结结束,更新任务状态
{
@ -669,6 +626,48 @@ public class ConfigSubscribe : IJob
};
await _sqlSugarClient.Updateable(record).IgnoreNullColumns().ExecuteCommandAsync();
}
var step = (int)data.output.progress.current_step;
_logger.LogDebug($"航线进度:{waylineMissionState} {step} {message}");
if (step.Equals(25)) // todo 关于会接收到不同消息问题,如何处理
{
// current_step
var isHandle = IsDuplicate(Md5.Encrypt($"{result.bid}{flightId1}"));
_logger.LogDebug($"md5: {isHandle} 重复否:{IsDuplicate(Md5.Encrypt(message))}" +
$"主题:{topic} 信息:{message} ");
if (isHandle)
{
_logger.LogInformation("跳过处理");
break;
}
var task = await _sqlSugarClient.Queryable<LasaTask>()
.FirstAsync(y => y.Id == taskAssign1.TaskId);
if (task != null && !string.IsNullOrEmpty(task.AIInspection) &&
task.AIInspection.Equals("true") && string.IsNullOrEmpty(task.PushUrl))
{
_logger.LogDebug("执行AI 智能巡检。。。。。");
//var rtmp = "rtmp://box.wisestcity.com:1935/live/7";
var bid = Guid.NewGuid().ToString();
var tid = Guid.NewGuid().ToString();
var param = @$"{{
""bid"": ""{bid}"",
""method"": ""live_start_push"",
""tid"": ""{tid}"",
""timestamp"": {DateTimeOffset.Now.ToUnixTimeMilliseconds()},
""data"": {{
""url_type"": 1,
""url"": ""{rtmp}"",
""video_id"": ""1581F8HGX254V00A0BUY/99-0-0/normal-0"",
""video_quality"": 3
}}
}}";
_logger.LogDebug($"直播参数:{param}");
var topicRequest = $"thing/product/{sn}/services";
// 开启直播
await _mqttClientManager.PublishAsync(topicRequest, param);
liveInfo[$"{tid}{bid}"] = taskAssign1.TaskId;
}
}
}
/*if (result.need_reply.Equals(1))

@ -0,0 +1,31 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OpenAuth.Repository.Domain
{
/// <summary>
/// 变化检测
/// </summary>
[SugarTable("lasa_changedetection")]
public class Lasa_ChangeDetection
{
[SugarColumn(ColumnName = "Id", IsPrimaryKey = true)]
public string Id { get; set; }
public string Title { get; set; }
public string FirstId { get; set; }
public string FirstName { get; set; }
public string SecondId { get; set; }
public string SecondName { get; set; }
public DateTime? CreateTime { get; set; }
public long CreateId { get; set; }
public string AiAchievementId { get; set; }
}
}

@ -86,6 +86,7 @@ namespace OpenAuth.Repository
public SugarRepositiry<LasaModelLabel> LasaModelLabel { get; set; }
public SugarRepositiry<LasaAiAchievement> LasaAiAchievement { get; set; }
public SugarRepositiry<LasaAiAchievementDetail> LasaAiAchievementDetail { get; set; }
public SugarRepositiry<Lasa_ChangeDetection> Lasa_ChangeDetection { get; set; }
public SugarRepositiry<DbfineInfo> DbfineInfo { get; set; }
public SugarRepositiry<SysOpenJob> SysOpenJob { get; set; }

@ -107,5 +107,72 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers
return result;
}
#region 变化检测
/// <summary>
/// 变化检测列表
/// </summary>
/// <param name="page"></param>
/// <param name="limit"></param>
/// <param name="key"></param>
/// <returns></returns>
[HttpGet]
[AllowAnonymous]
public async Task<Response<PageInfo<List<Lasa_ChangeDetection>>>> GetChangeDetectionPageList(int page, int limit, string key)
{
var result = new Response<PageInfo<List<Lasa_ChangeDetection>>>();
try
{
result = await _app.GetChangeDetectionPageList(page, limit, key);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.Message;
}
return result;
}
/// <summary>
/// 添加变化检测
/// </summary>
/// <param name="info"></param>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public async Task<Response<string>> AddChangeDetection(Lasa_ChangeDetection info)
{
var result = new Response<string>();
try
{
result = await _app.AddChangeDetection(info);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.Message;
}
return result;
}
/// <summary>
/// 删除变化检测记录
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public async Task<Response<bool>> DeleteChangeDetection(string id)
{
var result = new Response<bool>();
try
{
result = await _app.DeleteChangeDetection(id);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.Message;
}
return result;
}
#endregion
}
}

@ -225,27 +225,32 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers
/// <param name="secondId"></param>
[HttpPost]
[AllowAnonymous]
public async void BehaviorAlarm(string firstId, string secondId)
public async Task<Response<string>> BehaviorAlarm(string firstId, string secondId, string cdId)
{
var mq = await RabbitMqSender.CreateAsync("123.132.248.154", 9103, "DHCloudg1", "Cloud0#4fCraQrm");
var dataList = await _app.BehaviorAlarm(firstId, secondId);
var dataList = await _app.BehaviorAlarm(firstId, secondId, cdId);
foreach (var data in dataList.Result)
{
await mq.SendAsync("event.capturePic.1.sdhc04", JsonConvert.SerializeObject(data));
}
return new Response<string>()
{
Code = 200,
Result = "执行成功"
};
}
/// <summary>
/// 测试大华
/// </summary>
/// <param name="info"></param>
/// <param name="detectRegionJson"></param>
[HttpPost]
[AllowAnonymous]
public async void DrawingImgAndUploadAsync(string info, int[][] detectRegionJson)
{
await _app.DrawingImgAndUpload(info, detectRegionJson);
///// <summary>
///// 测试大华
///// </summary>
///// <param name="info"></param>
///// <param name="detectRegionJson"></param>
//[HttpPost]
//[AllowAnonymous]
//public async void DrawingImgAndUploadAsync(string info, int[][] detectRegionJson)
//{
// await _app.DrawingImgAndUpload(info, detectRegionJson);
}
//}
/// <summary>
/// 测试插入数据
/// </summary>

@ -64,7 +64,7 @@ namespace OpenAuth.WebApi.Model.RabbitMQService
var body = ea.Body.ToArray();
var message = Encoding.UTF8.GetString(body);
Console.WriteLine($"接收数据[processing_event]: {message}");
//Console.WriteLine($"接收数据[processing_event]: {message}");
// Exchange 来做不同处理
switch (ea.Exchange)
{

Loading…
Cancel
Save