123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using AI.Common;
- using AI.DiagSystem;
- using Newtonsoft.Json;
- using Newtonsoft.Json.Linq;
- using WingInterfaceLibrary.Enum;
- namespace WingAIDiagnosisService.Manage
- {
- public class AIDiagnosisPerImageModel
- {
- public AIDiagnosisPerImageModel() { }
- public AIDiagnosisPerImageModel(int index, AIDiagResultPerImg diagResult)
- {
- Index = index;
- PriorityScore = diagResult.PriorityScore;
- DiagResultsForEachOrgan = diagResult?.DiagResultsForEachOrgan.Select(o => new AIDiagnosisResultPerOrgan(o))?.ToList() ?? new List<AIDiagnosisResultPerOrgan>();
- }
- public int Index { get; set; }
- public float PriorityScore { get; set; }
- public List<AIDiagnosisResultPerOrgan> DiagResultsForEachOrgan { get; set; } = new List<AIDiagnosisResultPerOrgan>();
- }
- public class AIDiagnosisResultPerOrgan
- {
- public AIDiagnosisResultPerOrgan() { }
- public AIDiagnosisResultPerOrgan(AIDiagResultPerOrgan perOrgan)
- {
- var organ = DiagnosisOrganEnum.Null;
- var organName = Enum.GetName(typeof(DiagnosisOrganEnum), (int)perOrgan.Organ);
- if (!string.IsNullOrWhiteSpace(organName))
- {
- organ = (DiagnosisOrganEnum)perOrgan.Organ;
- }
- Organ = organ;
- OrganBoundBox = new AIDiagnosisRect(perOrgan.OrganBoundBox);
- var organContours = new List<AIDiagnosisPoint2D>();
- if (perOrgan.OrganContours != null && perOrgan.OrganContours.Length > 0)
- {
- var coutours = perOrgan.OrganContours[0];
- if (coutours != null && coutours.Length > 0)
- {
- foreach (var coutour in coutours)
- {
- organContours.Add(new AIDiagnosisPoint2D(coutour));
- }
- }
- }
- OrganContours = organContours;
- OrganDescriptions = perOrgan.OrganDescriptions.Select(d => new AIDiagnosisDescription(d))?.ToList() ?? new List<AIDiagnosisDescription>();
- DetectedObjects = perOrgan.DetectedObjects?.Select(d => new AIDetectedObject(d))?.ToList() ?? new List<AIDetectedObject>();
- }
- public DiagnosisOrganEnum Organ { get; set; }
- public AIDiagnosisRect OrganBoundBox { get; set; }
- public List<AIDiagnosisPoint2D> OrganContours { get; set; }
- public List<AIDiagnosisDescription> OrganDescriptions { get; set; }
- public List<AIDetectedObject> DetectedObjects { get; set; }
- }
- public class AIDiagnosisRect
- {
- public AIDiagnosisRect() { }
- public AIDiagnosisRect(Rect rect)
- {
- Right = rect.Right;
- Bottom = rect.Bottom;
- Left = rect.Left;
- Top = rect.Top;
- Width = rect.Width;
- Height = rect.Height;
- }
- public int Right { get; }
- public int Bottom { get; }
- public int Left { get; set; }
- public int Top { get; set; }
- public int Width { get; set; }
- public int Height { get; set; }
- }
- public class AIDiagnosisPoint2D
- {
- public AIDiagnosisPoint2D() { }
- public AIDiagnosisPoint2D(Point2D point)
- {
- X = point.X;
- Y = point.Y;
- }
- public int X { get; set; }
- public int Y { get; set; }
- }
- public class AIDetectedObject
- {
- public AIDetectedObject() { }
- public AIDetectedObject(DetectedObject detectedObject)
- {
- Label = detectedObject.Label;
- Confidence = detectedObject.Confidence;
- if (!detectedObject.BoundingBox.IsEmpty())
- {
- BoundingBox = new AIDiagnosisRect(detectedObject.BoundingBox);
- }
- var contours = new List<AIDiagnosisPoint2D>();
- if (detectedObject.Contours != null && detectedObject.Contours.Length > 0)
- {
- var coutours = detectedObject.Contours[0];
- if (coutours != null && coutours.Length > 0)
- {
- foreach (var coutour in coutours)
- {
- contours.Add(new AIDiagnosisPoint2D(coutour));
- }
- }
- }
- Contours = contours;
- Descriptions = detectedObject.Descriptions?.Select(d => new AIDiagnosisDescription(d))?.ToList() ?? new List<AIDiagnosisDescription>();
- }
- public int Label { get; set; }
- public float Confidence { get; set; }
- public AIDiagnosisRect BoundingBox { get; set; }
- public List<AIDiagnosisPoint2D> Contours { get; set; }
- public List<AIDiagnosisDescription> Descriptions { get; set; }
- }
- public class AIDiagnosisDescription
- {
- public AIDiagnosisDescription() { }
- public AIDiagnosisDescription(IDescription description)
- {
- Type = (DiagnosisDescription)description.Type;
- if (description is DescriptionLesionSize lesionSize)
- {
- var lesionSizeInfo = lesionSize.Value;
- if (lesionSizeInfo != null)
- {
- var lz = new AIDiagnosisLesionSize
- {
- HorizontalLengthInPixel = lesionSizeInfo.HorizontalLengthInPixel,
- VerticalLengthInPixel = lesionSizeInfo.VerticalLengthInPixel,
- };
- if (lesionSizeInfo.HorizontalPoint1 != null)
- {
- lz.HorizontalPoint1 = new AIDiagnosisPoint2D { X = lesionSizeInfo.HorizontalPoint1.X, Y = lesionSizeInfo.HorizontalPoint1.Y };
- }
- if (lesionSizeInfo.HorizontalPoint2 != null)
- {
- lz.HorizontalPoint2 = new AIDiagnosisPoint2D { X = lesionSizeInfo.HorizontalPoint2.X, Y = lesionSizeInfo.HorizontalPoint2.Y };
- }
- if (lesionSizeInfo.VerticalPoint1 != null)
- {
- lz.VerticalPoint1 = new AIDiagnosisPoint2D { X = lesionSizeInfo.VerticalPoint1.X, Y = lesionSizeInfo.VerticalPoint1.Y };
- }
- if (lesionSizeInfo.VerticalPoint2 != null)
- {
- lz.VerticalPoint2 = new AIDiagnosisPoint2D { X = lesionSizeInfo.VerticalPoint2.X, Y = lesionSizeInfo.VerticalPoint2.Y };
- }
- Value = Newtonsoft.Json.JsonConvert.SerializeObject(lz);
- }
- }
- else if (description is DescriptionShape shape)
- {
- Value = shape.Value.ToString();
- }
- else if (description is DescriptionOrientation orientation)
- {
- Value = orientation.Value.ToString();
- }
- else if (description is DescriptionEchoPattern echoPattern)
- {
- Value = echoPattern.Value.ToString();
- }
- else if (description is DescriptionLesionBoundary lesionBoundary)
- {
- Value = lesionBoundary.Value.ToString();
- }
- else if (description is DescriptionMargin margin)
- {
- Value = margin.Value.ToString();
- }
- else if (description is DescriptionCalcifications calcifications)
- {
- Value = calcifications.Value.ToString();
- }
- }
- public DiagnosisDescription Type { get; set; }
- public string Value { get; set; }
- }
- public class AIDiagnosisLesionSize
- {
- public AIDiagnosisLesionSize() { }
- public AIDiagnosisPoint2D HorizontalPoint1 { get; set; }
- public AIDiagnosisPoint2D HorizontalPoint2 { get; set; }
- public int HorizontalLengthInPixel { get; set; }
- public AIDiagnosisPoint2D VerticalPoint1 { get; set; }
- public AIDiagnosisPoint2D VerticalPoint2 { get; set; }
- public int VerticalLengthInPixel { get; set; }
- }
- }
|