Browse Source

远程图像区域缩放

jeremy 9 months ago
parent
commit
6ef2e9d402

BIN
AIDiagnosis/ImageResize/EDSR_x2.pb


BIN
AIDiagnosis/ImageResize/EDSR_x3.pb


BIN
AIDiagnosis/ImageResize/EDSR_x4.pb


BIN
AIDiagnosis/ImageResize/ESPCN_x2.pb


BIN
AIDiagnosis/ImageResize/ESPCN_x3.pb


BIN
AIDiagnosis/ImageResize/ESPCN_x4.pb


BIN
AIDiagnosis/ImageResize/LapSRN_x2.pb


BIN
AIDiagnosis/ImageResize/LapSRN_x4.pb


BIN
AIDiagnosis/ImageResize/LapSRN_x8.pb


BIN
AIDiagnosis/ImageResizeCppLib.dll


BIN
AIDiagnosis/ImageResizeLib.dll


BIN
AIDiagnosis/opencv_dnn452.dll


BIN
AIDiagnosis/opencv_dnn_objdetect452.dll


BIN
AIDiagnosis/opencv_dnn_superres452.dll


BIN
AIDiagnosis/opencv_highgui452.dll


BIN
AIDiagnosis/opencv_superres452.dll


+ 142 - 0
Service/AIDiagnosisService.ImageResize.cs

@@ -0,0 +1,142 @@
+using WingServerCommon.Service;
+using WingInterfaceLibrary.Interface;
+using System.Threading.Tasks;
+using WingServerCommon.Log;
+using WingInterfaceLibrary.Request.AIDiagnosis;
+using ImageResizeLib;
+using System.IO;
+using System;
+using AI.Common;
+using Vinno.vCloud.Common.Vid2;
+using SkiaSharp;
+using System.Collections.Generic;
+using System.Linq;
+using AI.Common.Log;
+
+namespace WingAIDiagnosisService.Service
+{
+    /// <summary>
+    /// URM分析服务
+    /// </summary>
+    public partial class AIDiagnosisService : JsonRpcService, IAIDiagnosisService
+    {
+        private ImageResize _imageResize;
+
+        private ImageResize ImageResize
+        {
+            get
+            {
+                if (_imageResize == null)
+                {
+                    var modelFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "AIDiagnosis", "ImageResize");
+                    _imageResize = new ImageResize(modelFolder);
+                    _imageResize.NotifyError += ImageResize_NotifyError;
+                    _imageResize.NotifyLog += ImageResize_NotifyLog;
+                }
+                return _imageResize;
+            }
+        }
+
+        /// <summary>
+        /// 远程图像区域缩放
+        /// </summary>
+        /// <param name="request">远程图像区域缩放请求实体</param>
+        /// <returns>远程图像区域缩放结果</returns>
+        /// <value></value>
+        /// <errorCodes></errorCodes>
+        public async Task<VidImageZoomResult> VidImageZoomAsync(VidImageZoomRequest request)
+        {
+            var remedicalCode = request.RemedicalCode;
+            var currentFolder = string.Empty;
+
+            var resultData = new VidImageZoomResult();
+            try
+            {
+                if (!string.IsNullOrWhiteSpace(remedicalCode))
+                {
+                    Logger.WriteLineInfo($"AIDiagnosisService VidImageZoomAsync start, remedicalCode:{remedicalCode}");
+                    var remedical = await _remedicalDBService.GetRemedicalByCodeAsync(remedicalCode, false);
+                    if (remedical != null && !string.IsNullOrWhiteSpace(remedical.TerminalImages?.OriginImageUrl))
+                    {
+                        var fileToken = remedical.TerminalImages.OriginImageUrl;
+                        var origialName = Path.GetFileName(fileToken);
+
+                        currentFolder = Path.Combine(_urmTempFolder, Guid.NewGuid().ToString("N"));
+                        if (!Directory.Exists(currentFolder))
+                        {
+                            Directory.CreateDirectory(currentFolder);
+                        }
+                        var origialFile = Path.Combine(currentFolder, origialName);
+                        if (!File.Exists(origialFile))
+                        {
+                            await DownloadToLocalAsync(fileToken, origialFile);
+                        }
+                        Logger.WriteLineInfo($"AIDiagnosisService VidImageZoomAsync download success, remedicalCode:{remedicalCode}");
+                        using (var imageData = new VinnoImageData(origialFile, OperationMode.Open))
+                        {
+                            var frameIndex = request.FrameIndex;
+                            if (imageData.ImageCount < frameIndex)
+                            {
+                                frameIndex = 0;
+                            }
+                            var frameImage = imageData.GetImage(frameIndex);
+                            using (var bitmap = CreateBitmap(frameImage))
+                            {
+                                Logger.WriteLineInfo($"AIDiagnosisService VidImageZoomAsync RawImage, remedicalCode:{remedicalCode}");
+                                var rawImage = new RawImage(bitmap.Bytes, bitmap.Width, bitmap.Height, MapTo(bitmap.ColorType));
+                                Logger.WriteLineInfo($"AIDiagnosisService VidImageZoomAsync ImageRegion, remedicalCode:{remedicalCode}");
+                                var imageRegion = new List<Rect>();
+                                if (request.ImageRegion?.Any() ?? false)
+                                {
+                                    foreach (var item in request.ImageRegion)
+                                    {
+                                        imageRegion.Add(new Rect((int)item.Left, (int)item.Top, (int)item.Width, (int)item.Height));
+                                    }
+                                }
+                                var sampleBox = new Rectangle(new Point2D((int)request.SampleBox.X, (int)request.SampleBox.Y), (int)request.SampleBox.Width, (int)request.SampleBox.Height);
+                                var resizeType = (EnumResizeMethodType)request.ResizeType;
+                                Logger.WriteLineInfo($"AIDiagnosisService VidImageZoomAsync PushOneImage, remedicalCode:{remedicalCode}");
+                                var imageResizeResult = ImageResize.PushOneImage(rawImage, imageRegion.ToArray(), sampleBox, resizeType);
+                                if (imageResizeResult?.DataBuffer?.Any() ?? false)
+                                {
+                                    resultData.Base64String = Convert.ToBase64String(imageResizeResult.DataBuffer);
+                                }
+                                Logger.WriteLineInfo($"AIDiagnosisService VidImageZoomAsync end, remedicalCode:{remedicalCode}");
+                            }
+
+                        }
+
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                Logger.WriteLineWarn($"AIDiagnosisService VidImageZoomAsync error, remedicalCode:{remedicalCode}, ex:{ex}");
+            }
+            finally
+            {
+                Logger.WriteLineInfo($"AIDiagnosisService VidImageZoomAsync finally, remedicalCode:{remedicalCode}");
+                try
+                {
+                    if (Directory.Exists(currentFolder))
+                    {
+                        Directory.Delete(currentFolder, true);
+                    }
+                }
+                catch { }
+            }
+            return resultData;
+        }
+
+
+        private void ImageResize_NotifyError(object sender, ErrorEventArgs e)
+        {
+            Logger.WriteLineError($"AIDiagnosisService ImageResize_NotifyError: {e.GetException()}");
+        }
+        private void ImageResize_NotifyLog(object sender, LogEventArgs e)
+        {
+            Logger.WriteLineError($"AIDiagnosisService ImageResize_NotifyLog. LogType: {e.LogType}, Msg: {e.Msg}");
+        }
+    }
+}
+

+ 0 - 12
Service/AIDiagnosisService.URM.cs

@@ -387,18 +387,6 @@ namespace WingAIDiagnosisService.Service
             return result;
         }
 
-        /// <summary>
-        /// 远程图像区域缩放
-        /// </summary>
-        /// <param name="request">远程图像区域缩放请求实体</param>
-        /// <returns>远程图像区域缩放结果</returns>
-        /// <value></value>
-        /// <errorCodes></errorCodes>
-        public async Task<VidImageZoomResult> VidImageZoomAsync(VidImageZoomRequest request)
-        {
-            return new VidImageZoomResult();
-        }
-
         private async Task DownloadUrmBinFiles(string currentFolder, List<ImgItem> imgList)
         {
             // 10-srcDenArray.bin,11-srcDirArray.bin,12-srcVelArray.bin,13-srcAngleArray.bin,14-srcMaskArray.bin,15-URMPoints.bin,16-URMPointNums.bin

+ 3 - 0
WingAIDiagnosisService.csproj

@@ -36,6 +36,9 @@
     <Reference Include="ContourModifyUtils">
       <HintPath>AIDiagnosis\ContourModifyUtils.dll</HintPath>
     </Reference>
+    <Reference Include="ImageResizeLib">
+      <HintPath>AIDiagnosis\ImageResizeLib.dll</HintPath>
+    </Reference>
     
     <Reference Include="Vinno.Core">
       <HintPath>URM\Vinno.Core.dll</HintPath>