瀏覽代碼

修复视频频繁调用

fly 8 月之前
父節點
當前提交
b89be7d078
共有 2 個文件被更改,包括 22 次插入21 次删除
  1. 12 13
      Service/AIDiagnosisService.URM.cs
  2. 10 8
      URMManage/ImagePostProcess.cs

+ 12 - 13
Service/AIDiagnosisService.URM.cs

@@ -552,15 +552,14 @@ namespace WingAIDiagnosisService.Service
 
                         Logger.WriteLineInfo($"AIDiagnosisService URMVideoProcessAsync DoUrmVideoProcess start, remedicalCode:{remedicalCode}");
                         Logger.WriteLineInfo($"urmProcessRequest:{JsonConvert.SerializeObject(urmProcessRequest)}");
-                        double urmMinVal = 0;
-                        double urmMaxVal = 0;
-                        var base64String = URMAnalysisManager.DoUrmVideoProcess(urmProcessRequest, ref urmMinVal, ref urmMaxVal);
-                        Logger.WriteLineInfo($"AIDiagnosisService URMVideoProcessAsync DoUrmVideoProcess end, remedicalCode:{remedicalCode}, base64String-Length:{base64String.Length}");
+
+                        var result = await URMAnalysisManager.DoUrmVideoProcess(urmProcessRequest);
+                        Logger.WriteLineInfo($"AIDiagnosisService URMVideoProcessAsync DoUrmVideoProcess end, remedicalCode:{remedicalCode}, base64String-Length:{result.Item1.Length}");
                         return new URMVideoProcessResult
                         {
-                            Base64String = base64String,
-                            UrmMinVal = urmMinVal,
-                            UrmMaxVal = urmMaxVal,
+                            Base64String = result.Item1,
+                            UrmMinVal = result.Item2,
+                            UrmMaxVal = result.Item3,
                         };
                     }
                 }
@@ -792,7 +791,7 @@ namespace WingAIDiagnosisService.Service
 
                         urmProcessRequest.GUID = urmProcessRequest.GetUniqueCode();
 
-                        var imgList = MergeUrmImages(remedicalCode, currentFolder, request.BackgroundImage, urmProcessRequest, request);
+                        var imgList = await MergeUrmImages(remedicalCode, currentFolder, request.BackgroundImage, urmProcessRequest, request);
                         Logger.WriteLineInfo($"AIDiagnosisService URMGenerateVideoAsync DoUrmVideoProcess, remedicalCode:{remedicalCode}, imgCount:{imgList.Count}");
                         if (imgList.Count >= 150)
                         {
@@ -837,7 +836,7 @@ namespace WingAIDiagnosisService.Service
             return new URMGenerateVideoResult();
         }
 
-        private List<string> MergeUrmImages(string remedicalCode, string currentFolder, string backgroundImageBase64, DoUrmVideoProcessRequest urmProcessRequest, URMGenerateVideoRequest request)
+        private async Task<List<string>> MergeUrmImages(string remedicalCode, string currentFolder, string backgroundImageBase64, DoUrmVideoProcessRequest urmProcessRequest, URMGenerateVideoRequest request)
         {
             //colorbar的数值和单位
             var unit = "mm/s";
@@ -851,18 +850,18 @@ namespace WingAIDiagnosisService.Service
                     urmProcessRequest.VideoFrame = i;
                     double urmMinVal = 0;
                     double urmMaxVal = 0;
-                    var base64String = URMAnalysisManager.DoUrmVideoProcess(urmProcessRequest, ref urmMinVal, ref urmMaxVal);
-                    if (!string.IsNullOrWhiteSpace(base64String))
+                    var result = await URMAnalysisManager.DoUrmVideoProcess(urmProcessRequest);
+                    if (!string.IsNullOrWhiteSpace(result.Item1))
                     {
                         if (string.IsNullOrWhiteSpace(backgroundImageBase64))
                         {
-                            base64String = AddLogAndColorBar(base64String);
+                            var base64String = AddLogAndColorBar(result.Item1);
                             imgList.Add(base64String);
                         }
                         else
                         {
                             byte[] bgImageBytes = Convert.FromBase64String(backgroundImageBase64);
-                            byte[] currImageBytes = Convert.FromBase64String(base64String);
+                            byte[] currImageBytes = Convert.FromBase64String(result.Item1);
                             byte[] logoImageBytes = Convert.FromBase64String(_logoBase64);
                             byte[] colorbarImageBytes = Convert.FromBase64String(_urmColorbarBase64);
                             using (MemoryStream streamBg = new MemoryStream(bgImageBytes))

+ 10 - 8
URMManage/ImagePostProcess.cs

@@ -312,26 +312,28 @@ namespace WingAIDiagnosisService.URMManage
         /// </summary>
         /// <param name="request"></param>
         /// <returns></returns>
-        public string DoUrmVideoProcess(DoUrmVideoProcessRequest request, ref double urmMinVal, ref double urmMaxVal)
+        public async Task<Tuple<string,double,double>> DoUrmVideoProcess(DoUrmVideoProcessRequest request)
         {
             var imgBase64 = "";
-            urmMinVal = 0;
-            urmMaxVal = 0;
+            double urmMinVal = 0;
+            double urmMaxVal = 0;
             InitVideoProcessor(request);
             try
             {
                 var videoProcessor = VideoProcessorList.FirstOrDefault(x => x.GUID == request.GUID);
                 videoProcessor.LastActiveTime = DateTime.UtcNow;
-
-                urmMinVal = videoProcessor.UrmMinVal;
-                urmMaxVal = videoProcessor.UrmMaxVal;
-                imgBase64 = videoProcessor.Processor.getURMVideoImg(request.VideoFrame);
+                using (await _lockManager.Acquire(request.GUID))
+                {
+                    urmMinVal = videoProcessor.UrmMinVal;
+                    urmMaxVal = videoProcessor.UrmMaxVal;
+                    imgBase64 = videoProcessor.Processor.getURMVideoImg(request.VideoFrame);
+                }
             }
             catch (Exception ex)
             {
                 Logger.WriteLineWarn($"AIService URMAnalysisManager DoUrmVideoProcess error, ex:{ex}");
             }
-            return imgBase64;
+            return Tuple.Create<string,double,double>(imgBase64,urmMinVal,urmMaxVal);
         }