|
|
|
|
@ -1,4 +1,7 @@
|
|
|
|
|
using Infrastructure;
|
|
|
|
|
using Infrastructure.CloudSdk.minio;
|
|
|
|
|
using Infrastructure.Extensions;
|
|
|
|
|
using Minio;
|
|
|
|
|
using Newtonsoft.Json;
|
|
|
|
|
using OpenAuth.App.BaseApp.Base;
|
|
|
|
|
using OpenAuth.App.Interface;
|
|
|
|
|
@ -9,7 +12,11 @@ using OpenAuth.Repository.Domain;
|
|
|
|
|
using SqlSugar;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Drawing;
|
|
|
|
|
using System.Drawing.Drawing2D;
|
|
|
|
|
using System.Drawing.Imaging;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Net;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Text.Json.Nodes;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
@ -19,9 +26,11 @@ namespace OpenAuth.App.ServiceApp.Algo
|
|
|
|
|
|
|
|
|
|
public class DaHuaAiApp : SqlSugarBaseApp<LasaAlgorithmsRepository, SugarDbContext>
|
|
|
|
|
{
|
|
|
|
|
public DaHuaAiApp(ISugarUnitOfWork<SugarDbContext> unitWork,
|
|
|
|
|
public MinioService _minioService;
|
|
|
|
|
public DaHuaAiApp(ISugarUnitOfWork<SugarDbContext> unitWork, MinioService minioService,
|
|
|
|
|
ISimpleClient<LasaAlgorithmsRepository> repository, IAuth auth) : base(unitWork, repository, auth)
|
|
|
|
|
{
|
|
|
|
|
_minioService = minioService;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#region 大华算法
|
|
|
|
|
@ -101,12 +110,17 @@ namespace OpenAuth.App.ServiceApp.Algo
|
|
|
|
|
using (var db = UnitWork.CreateContext())
|
|
|
|
|
{
|
|
|
|
|
var data = JsonConvert.DeserializeObject<dynamic>(info);
|
|
|
|
|
LasaAiAchievement lasaAiAchievement = new LasaAiAchievement();
|
|
|
|
|
lasaAiAchievement.Id = Guid.NewGuid().ToString();
|
|
|
|
|
lasaAiAchievement.Title = "疑似耕地破坏";
|
|
|
|
|
lasaAiAchievement.CreateTime = DateTime.Now;
|
|
|
|
|
lasaAiAchievement.AiModel = "DaHuaAi";
|
|
|
|
|
string detectRegionJson = JsonConvert.SerializeObject(data.info.detectRegion);
|
|
|
|
|
var regionArray = JsonConvert.DeserializeObject<dynamic>(detectRegionJson);
|
|
|
|
|
LasaAiAchievement lasaAiAchievement = new LasaAiAchievement
|
|
|
|
|
{
|
|
|
|
|
Id = Guid.NewGuid().ToString(),
|
|
|
|
|
Title = "耕地破坏区域报警",
|
|
|
|
|
CreateTime = DateTime.Now,
|
|
|
|
|
AiModel = "DaHuaAi"
|
|
|
|
|
};
|
|
|
|
|
var imageList = data.imageInfoList;
|
|
|
|
|
int index = 0;
|
|
|
|
|
foreach (var item in imageList)
|
|
|
|
|
{
|
|
|
|
|
//插入详情
|
|
|
|
|
@ -114,14 +128,26 @@ namespace OpenAuth.App.ServiceApp.Algo
|
|
|
|
|
{
|
|
|
|
|
Id = Guid.NewGuid().ToString(),
|
|
|
|
|
Image = item.imgUrl,
|
|
|
|
|
AiAchievementId = lasaAiAchievement.Id
|
|
|
|
|
AiAchievementId = lasaAiAchievement.Id,
|
|
|
|
|
Lng = (double?)item.longitude ?? 0.0,
|
|
|
|
|
Lat = (double?)item.latitude ?? 0.0,
|
|
|
|
|
};
|
|
|
|
|
//// 如果是第二张图片 -> 画区域 + 上传
|
|
|
|
|
//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++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
await db.LasaAiAchievement.InsertAsync(lasaAiAchievement);
|
|
|
|
|
if (db.Commit())
|
|
|
|
|
return new Response<bool>
|
|
|
|
|
@ -137,6 +163,97 @@ namespace OpenAuth.App.ServiceApp.Algo
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public async Task<string> DrawingImgAndUpload(string url, dynamic regionArray)
|
|
|
|
|
{
|
|
|
|
|
//var regionArray = JsonConvert.DeserializeObject<int[][]>(detectRegionJson);
|
|
|
|
|
Console.WriteLine($"regionArray 是否为空: {regionArray == null}, 长度: {regionArray?.Length}");
|
|
|
|
|
|
|
|
|
|
if (regionArray == null || regionArray.Length == 0)
|
|
|
|
|
throw new ArgumentException("detectRegion 参数无效");
|
|
|
|
|
|
|
|
|
|
Point[] polygon = new Point[regionArray.Length];
|
|
|
|
|
for (int i = 0; i < regionArray.Length; i++)
|
|
|
|
|
{
|
|
|
|
|
polygon[i] = new Point(regionArray[i][0], regionArray[i][1]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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))
|
|
|
|
|
using (var g = Graphics.FromImage(bmp))
|
|
|
|
|
{
|
|
|
|
|
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);
|
|
|
|
|
return uploadedUrl;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public async void DrawingImgAsync()
|
|
|
|
|
{
|
|
|
|
|
string url = "http://123.132.248.154:6015/DroneEnforcement/2025/20250514/lQLPJyIVimQWGKnNA4PNA6Gw1D3q5gbxUvQIiumcIx4vAA_929_899.png";
|
|
|
|
|
string savePath = "output.png";
|
|
|
|
|
|
|
|
|
|
// detectRegion JSON(可以直接替换成你的接口返回数据)
|
|
|
|
|
string detectRegionJson = "[[0, 0],[8063, 647],[8017, 7774],[552, 8033]]";
|
|
|
|
|
|
|
|
|
|
// 解析 JSON
|
|
|
|
|
var regionArray = JsonConvert.DeserializeObject<int[][]>(detectRegionJson);
|
|
|
|
|
if (regionArray == null)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("解析 detectRegion 失败");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Point[] polygon = new Point[regionArray.Length];
|
|
|
|
|
for (int i = 0; i < regionArray.Length; i++)
|
|
|
|
|
{
|
|
|
|
|
polygon[i] = new Point(regionArray[i][0], regionArray[i][1]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
using (HttpClient client = new HttpClient())
|
|
|
|
|
{
|
|
|
|
|
var bytes = await client.GetByteArrayAsync(url);
|
|
|
|
|
|
|
|
|
|
using (var ms = new System.IO.MemoryStream(bytes))
|
|
|
|
|
using (var image = Image.FromStream(ms))
|
|
|
|
|
using (var bmp = new Bitmap(image))
|
|
|
|
|
using (var g = Graphics.FromImage(bmp))
|
|
|
|
|
{
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bmp.Save(savePath, ImageFormat.Png);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Console.WriteLine("已保存图片: " + savePath);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
@ -175,18 +292,19 @@ namespace OpenAuth.App.ServiceApp.Algo
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (item.class_id == 1 || item.class_id == 2 || item.class_id == 3 || item.class_id == 5 || item.class_id == 6 || item.class_id == 7)
|
|
|
|
|
{
|
|
|
|
|
lasaAiAchievement.Title = "车辆识别";
|
|
|
|
|
}
|
|
|
|
|
else if (item.class_id == 0)
|
|
|
|
|
{
|
|
|
|
|
lasaAiAchievement.Title = "人员识别";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
lasaAiAchievement.Title = "其他识别";
|
|
|
|
|
}
|
|
|
|
|
lasaAiAchievement.Title = "其他识别";
|
|
|
|
|
//if (item.class_id == 1 || item.class_id == 2 || item.class_id == 3 || item.class_id == 5 || item.class_id == 6 || item.class_id == 7)
|
|
|
|
|
//{
|
|
|
|
|
// lasaAiAchievement.Title = "车辆识别";
|
|
|
|
|
//}
|
|
|
|
|
//else if (item.class_id == 0)
|
|
|
|
|
//{
|
|
|
|
|
// lasaAiAchievement.Title = "人员识别";
|
|
|
|
|
//}
|
|
|
|
|
//else
|
|
|
|
|
//{
|
|
|
|
|
// lasaAiAchievement.Title = "其他识别";
|
|
|
|
|
//}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|