|
|
|
|
@ -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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|