Browse Source

小鼠PW频谱

jeremy 9 months ago
parent
commit
b61a6eda44

BIN
AIDiagnosis/AutoTraceCppLib.dll


BIN
AIDiagnosis/AutoTraceLib.dll


BIN
AIDiagnosis/concrt140.dll


BIN
AIDiagnosis/msmpi.dll


BIN
AIDiagnosis/msvcp140.dll


BIN
AIDiagnosis/msvcr100.dll


BIN
AIDiagnosis/msvcr120.dll


+ 16 - 8
Service/AIDiagnosisService.ImageResize.cs

@@ -119,7 +119,7 @@ namespace WingAIDiagnosisService.Service
                                     {
                                         byte[] imageBytes = data.ToArray();
                                         resultData.Base64String = Convert.ToBase64String(imageBytes);
-        
+
                                     }
                                 }
                                 Logger.WriteLineInfo($"AIDiagnosisService VidImageZoomAsync end, remedicalCode:{remedicalCode}");
@@ -152,18 +152,26 @@ namespace WingAIDiagnosisService.Service
 
         private void ImageResize_NotifyError(object sender, ErrorEventArgs e)
         {
-            Logger.WriteLineWarn($"AIDiagnosisService ImageResize_NotifyError: {e.GetException()}");
+            try
+            {
+                Logger.WriteLineWarn($"AIDiagnosisService ImageResize_NotifyError: {e.GetException()}");
+            }
+            catch { }
         }
         private void ImageResize_NotifyLog(object sender, LogEventArgs e)
         {
-            if (e?.LogType == EnumLogType.WarnLog || e?.LogType == EnumLogType.ErrorLog)
-            {
-                Logger.WriteLineWarn($"AIDiagnosisService ImageResize_NotifyLog. LogType: {e.LogType}, Msg: {e.Msg}");
-            }
-            else
+            try
             {
-                Logger.WriteLineInfo($"AIDiagnosisService ImageResize_NotifyLog. LogType: {e.LogType}, Msg: {e.Msg}");
+                if (e?.LogType == EnumLogType.WarnLog || e?.LogType == EnumLogType.ErrorLog)
+                {
+                    Logger.WriteLineWarn($"AIDiagnosisService ImageResize_NotifyLog. LogType: {e.LogType}, Msg: {e.Msg}");
+                }
+                else
+                {
+                    Logger.WriteLineInfo($"AIDiagnosisService ImageResize_NotifyLog. LogType: {e.LogType}, Msg: {e.Msg}");
+                }
             }
+            catch { }
         }
 
 

+ 93 - 1
Service/AIDiagnosisService.Vet.cs

@@ -3,6 +3,14 @@ using WingInterfaceLibrary.Interface;
 using System.Threading.Tasks;
 using WingServerCommon.Log;
 using WingInterfaceLibrary.Request.AIDiagnosis;
+using AutoTraceLib;
+using System.IO;
+using AI.Common.Log;
+using AI.Common;
+using SkiaSharp;
+using System.Collections.Generic;
+using System.Linq;
+using System;
 
 namespace WingAIDiagnosisService.Service
 {
@@ -11,6 +19,22 @@ namespace WingAIDiagnosisService.Service
     /// </summary>
     public partial class AIDiagnosisService : JsonRpcService, IAIDiagnosisService
     {
+        private VetAutoTrace _vetAutoTrace;
+
+        private VetAutoTrace VetAutoTrace
+        {
+            get
+            {
+                if (_vetAutoTrace == null)
+                {
+                    _vetAutoTrace = new VetAutoTrace();
+                    _vetAutoTrace.NotifyError += VetAutoTrace_NotifyError;
+                    _vetAutoTrace.NotifyLog += VetAutoTrace_NotifyLog;
+                }
+                return _vetAutoTrace;
+            }
+        }
+
         /// <summary>
         /// 小鼠频谱包络
         /// </summary>
@@ -20,8 +44,76 @@ namespace WingAIDiagnosisService.Service
         /// <errorCodes></errorCodes>
         public async Task<VetAutoTraceImageResult> VetAutoTraceImageAsync(VetAutoTraceImageRequest request)
         {
-            return null;
+            var resultData = new VetAutoTraceImageResult { PWTraceInfos = new Dictionary<int, PWTraceDTO>() };
+            try
+            {
+                var imageReq = request.ImageInfo;
+                var rowImage = new RawImage(imageReq.Data, imageReq.Width, imageReq.Height, MapTo((SKColorType)imageReq.SKColorType));
+                var rectReq = request.RectInfo;
+                var rect = new Rect(rectReq.Left, rectReq.Top, rectReq.Width, rectReq.Height);
+                var autoRes = VetAutoTrace.ProcessOneImage(rowImage, rect);
+                if (autoRes != null && autoRes.Any())
+                {
+                    foreach (var key in autoRes.Keys)
+                    {
+                        var item = autoRes[key];
+                        var traceInfo = new PWTraceDTO();
+                        traceInfo.EnableCalCycle = item.enableCalCycle;
+                        traceInfo.Contour = item.Contour?.Select(c => new PWTracePointDTO
+                        {
+                            X = c.X,
+                            Y = c.Y,
+                        })?.ToList() ?? new List<PWTracePointDTO>();
+                        traceInfo.CycleInfos = item.CycleInfos?.Select(c => new PWTraceCycleDTO
+                        {
+                            CycleStart = c.CycleStart,
+                            CycleEnd = c.CycleEnd,
+                            Epeak = c.Epeak,
+                            Apeak = c.Apeak,
+                        })?.ToList() ?? new List<PWTraceCycleDTO>();
+                        traceInfo.BestCycles = new PWTraceBestCycleDTO
+                        {
+                            OneBestCycle = new PWTraceBestCycleIndexDTO { BestStart = item.BestCycles.OneBestCycle.BestStart, BestEnd = item.BestCycles.OneBestCycle.BestEnd },
+                            TwoBestCycle = new PWTraceBestCycleIndexDTO { BestStart = item.BestCycles.TwoBestCycle.BestStart, BestEnd = item.BestCycles.TwoBestCycle.BestEnd },
+                            ThreeBestCycle = new PWTraceBestCycleIndexDTO { BestStart = item.BestCycles.ThreeBestCycle.BestStart, BestEnd = item.BestCycles.ThreeBestCycle.BestEnd },
+                            FourBestCycle = new PWTraceBestCycleIndexDTO { BestStart = item.BestCycles.FourBestCycle.BestStart, BestEnd = item.BestCycles.FourBestCycle.BestEnd },
+                            FiveBestCycle = new PWTraceBestCycleIndexDTO { BestStart = item.BestCycles.FiveBestCycle.BestStart, BestEnd = item.BestCycles.FiveBestCycle.BestEnd },
+                        };
+                        resultData.PWTraceInfos.Add((int)key, traceInfo);
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                Logger.WriteLineWarn($"AIDiagnosisService VetAutoTraceImageAsync fail, ex:{ex}");
+            }
+            return resultData;
+        }
+
+        private void VetAutoTrace_NotifyError(object sender, ErrorEventArgs e)
+        {
+            try
+            {
+                Logger.WriteLineWarn($"AIDiagnosisService VetAutoTrace_NotifyError: {e.GetException()}");
+            }
+            catch { }
         }
+        private void VetAutoTrace_NotifyLog(object sender, LogEventArgs e)
+        {
+            try
+            {
+                if (e?.LogType == EnumLogType.WarnLog || e?.LogType == EnumLogType.ErrorLog)
+                {
+                    Logger.WriteLineWarn($"AIDiagnosisService VetAutoTrace_NotifyLog. LogType: {e.LogType}, Msg: {e.Msg}");
+                }
+                else
+                {
+                    Logger.WriteLineInfo($"AIDiagnosisService VetAutoTrace_NotifyLog. LogType: {e.LogType}, Msg: {e.Msg}");
+                }
+            }
+            catch { }
+        }
+
     }
 }
 

+ 3 - 0
WingAIDiagnosisService.csproj

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