|
@@ -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
|
|
|
+{
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ 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}");
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|