123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291 |
- using System;
- using System.Collections.Generic;
- using System.Security.Cryptography;
- using System.Text;
- using Vinno.DataTypes;
- using Vinno.DataManager.Utilities;
- namespace WingAIDiagnosisService.URMManage
- {
- public class UrmProcessRequest
- {
- /// <summary>
- /// GUID
- /// </summary>
- public string GUID { get; set; }
- /// <summary>
- /// RemedicalCode
- /// </summary>
- public string RemedicalCode { get; set; }
- /// <summary>
- /// Token
- /// </summary>
- public string Token { get; set; }
- /// <summary>
- /// 操作类型 0-后处理zoom关,1-colorbar,2-zoom开,3-测量
- /// </summary>
- /// <value></value>
- public int ProcessType { get; set; } = 0;
- //文件路径
- public string DenDataPath { get; set; } = "D:\\Projects\\URMDemo\\URMDemo\\bin\\Debug\\URMTemp\\393f5673dc424b5e87334f8ba4a90aae\\srcDenArray.bin";
- public string DirDataPath { get; set; } = "D:\\Projects\\URMDemo\\URMDemo\\bin\\Debug\\URMTemp\\393f5673dc424b5e87334f8ba4a90aae\\srcDirArray.bin";
- public string VelDataPath { get; set; } = "D:\\Projects\\URMDemo\\URMDemo\\bin\\Debug\\URMTemp\\393f5673dc424b5e87334f8ba4a90aae\\srcVelArray.bin";
- public string AngleDataPath { get; set; } = "D:\\Projects\\URMDemo\\URMDemo\\bin\\Debug\\URMTemp\\393f5673dc424b5e87334f8ba4a90aae\\srcAngleArray.bin";
- public string MaskDataPath { get; set; } = "D:\\Projects\\URMDemo\\URMDemo\\bin\\Debug\\URMTemp\\393f5673dc424b5e87334f8ba4a90aae\\srcMaskArray.bin";
- ///// <summary>
- ///// 生成图片保存路径
- ///// </summary>
- //public string ImgFilePath { get; set; } = "D:\\Projects\\URMDemo\\URMDemo\\bin\\Debug\\URMTemp\\393f5673dc424b5e87334f8ba4a90aae\\test0627.png";
- //探头信息
- public string FamilyName { get; set; } = "Linear";
- public string TypeInfo { get; set; } = "Linear_U5-15LE";
- public string NativeId { get; set; } = "Breast";
- // 图像配置
- public string UrmImageType { get; set; } = "0"; // Den 0, Dir 1, Vel 2, Angle 3
- public int UrmBlend { get; set; }
- // 用于后处理计算的算法参数(需要传入)
- public float DownsampleIndex { get; set; } = 3f;
- public float IntPowerDen { get; set; } = 4f;
- public float IntPowerDir { get; set; } = 4f;
- public float SigmaGauss { get; set; } = 2.4f;
- public float VessScale { get; set; } = 1f;
- public float VelMaxScaler { get; set; } = 1f;
- public float VelMinScaler { get; set; } = 0f;
- public float Iterations { get; set; } = 1f; // URM的基础参数包括分析结果的数据与大小以及Res
- public double Res { get; set; } = 2.5;
- public int Urmsrcwidth { get; set; } = 188; // URM分析后的数据宽度
- public int Urmsrcheight { get; set; } = 1233; // URM分析后的数据高度
- public double ScaleOfPixel_x { get; set; } = 0.214925914347303;
- public double ScaleOfPixel_y { get; set; } = 0.61038961038961;
- public int ImgProcessVer { get; set; } = 1;//后处理算法版本 0 Ver2(<2.7) 1 Ver3(2.7)
- public bool Isliner { get; set; } = true;
- // URM的绘制参数
- public bool ZoomOn { get; set; } = false; // 是否开启 zoom
- public double ZoomRoix { get; set; } = 0; // zoom 区域在 ROI 中的归一化坐标
- public double ZoomRoiy { get; set; } = 0; // zoom 区域在 ROI 中的归一化坐标
- public double ZoomRoiwidth { get; set; } = 1; // zoom 区域在 ROI 中的归一化坐标
- public double ZoomRoiheight { get; set; } = 1; // zoom 区域在 ROI 中的归一化坐标
- public int Roix { get; set; } = 274;// Roi 区域在整个图像中的像素位置
- public int Roiy { get; set; } = 16;// Roi 区域在整个图像中的像素位置
- public int Roiwidth { get; set; } = 243; // Roi 区域在整个图像中的像素位置
- public int Roiheight { get; set; } = 616; // Roi 区域在整个图像中的像素位置
- public bool LeftRight { get; set; } = false;
- public bool UpDown { get; set; } = false;
- public int ScreenWidth { get; set; } = 666;// 输出的图像的尺寸
- public int ScreenHeight { get; set; } = 650; // 输出的图像的尺寸
- public DPoint[] UrmTraceDPoints { get; set; } = new DPoint[0];
- protected virtual string GetUniqueValue()
- {
- var datas = new StringBuilder();
- datas.Append(DenDataPath);
- datas.Append(DirDataPath);
- datas.Append(VelDataPath);
- datas.Append(AngleDataPath);
- datas.Append(MaskDataPath);
- datas.Append(FamilyName);
- datas.Append(TypeInfo);
- datas.Append(NativeId);
- datas.Append(UrmImageType);
- datas.Append(UrmBlend);
- datas.Append(DownsampleIndex);
- datas.Append(IntPowerDen);
- datas.Append(IntPowerDir);
- datas.Append(SigmaGauss);
- datas.Append(VessScale);
- datas.Append(VelMaxScaler);
- datas.Append(VelMinScaler);
- datas.Append(Iterations);
- datas.Append(Res);
- datas.Append(Urmsrcwidth);
- datas.Append(Urmsrcheight);
- datas.Append(ScaleOfPixel_x);
- datas.Append(ScaleOfPixel_y);
- datas.Append(ImgProcessVer);
- datas.Append(Isliner);
- datas.Append(ZoomOn);
- datas.Append(ZoomRoix);
- datas.Append(ZoomRoiy);
- datas.Append(ZoomRoiwidth);
- datas.Append(ZoomRoiheight);
- datas.Append(Roix);
- datas.Append(Roiy);
- datas.Append(Roiwidth);
- datas.Append(Roiheight);
- datas.Append(LeftRight);
- datas.Append(UpDown);
- datas.Append(ScreenWidth);
- datas.Append(ScreenHeight);
- datas.Append(Newtonsoft.Json.JsonConvert.SerializeObject(UrmTraceDPoints));
- return datas.ToString();
- }
- public virtual string GetUniqueCode()
- {
- try
- {
- var datas = new StringBuilder();
- datas.Append(Token);
- datas.Append(RemedicalCode);
- datas.Append(ProcessType);
- return ToSHA256(datas.ToString());
- }
- catch
- {
- return Guid.NewGuid().ToString("N");
- }
- }
- protected string ToSHA256(string originalString)
- {
- using (SHA256 sha256Hash = SHA256.Create())
- {
- byte[] bytes = sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(originalString));
- StringBuilder builder = new StringBuilder();
- for (int i = 0; i < bytes.Length; i++)
- {
- builder.Append(bytes[i].ToString("x2"));
- }
- string encryptedString = builder.ToString().Substring(0, 32); // 获取前32位作为加密后的字符串
- return encryptedString;
- }
- }
- }
- public class UrmMeasureProcessRequest : UrmProcessRequest
- {
- /// <summary>
- /// 测量项枚举
- /// </summary>
- public URMMeasureType UrmMeasureType { get; set; }
- /// <summary>
- /// 点集
- /// </summary>
- public List<DPoint> SrcDPoints { get; set; }
- /// <summary>
- /// 两点物理距离
- /// </summary>
- public double? CMlength { get; set; }
- /// <summary>
- /// 画布物理宽度
- /// </summary>
- public double Phywidth { get; set; }
- /// <summary>
- /// ROI 类型
- /// </summary>
- public URMROIType ROIType { get; set; }
- /// <summary>
- /// Rim 宽度
- /// </summary>
- public double ShellWidth { get; set; }
- protected override string GetUniqueValue()
- {
- var datas = new StringBuilder();
- // datas.Append(UrmMeasureType);
- // datas.Append(CMlength);
- // datas.Append(Phywidth);
- // datas.Append(ROIType);
- // datas.Append(ShellWidth);
- // datas.Append(Newtonsoft.Json.JsonConvert.SerializeObject(SrcDPoints));
- //if (UrmMeasureType == URMMeasureType.URMCurvature)
- //{
- //datas.Append(Token);
- //}
- datas.Append(Token);
- return base.GetUniqueValue() + datas.ToString();
- }
- public override string GetUniqueCode()
- {
- try
- {
- return ToSHA256(GetUniqueValue());
- }
- catch
- {
- return Guid.NewGuid().ToString("N");
- }
- }
- }
- public class URMProcessorClass
- {
- /// <summary>
- /// GUID
- /// </summary>
- public string GUID { get; set; }
- public URMProcess Processor { get; set; }
- public DateTime LastActiveTime { get; set; }
- public bool HasDrawed { get; set; }
- public double UrmMinVal { get; set; }
- public double UrmMaxVal { get; set; }
- public NativeArray DenArray { get; set; }
- public NativeArray DirArray { get; set; }
- public NativeArray VelArray { get; set; }
- public NativeArray AngleArray { get; set; }
- public NativeArray MaskArray { get; set; }
- }
- public class DoUrmVideoProcessRequest : UrmProcessRequest
- {
- // 当前播放帧
- public int VideoFrame { get; set; } = 0;
- // 视频配置
- public float URMVideoScaler { get; set; } = 3;
- public float URMVideoParameter { get; set; } = 2;
- public float URMVideoType { get; set; } = 1;
- //数据路径
- public string PointsDataPath { get; set; } = "D:\\Projects\\URMDemo\\URMDemo\\bin\\Debug\\URMTemp\\393f5673dc424b5e87334f8ba4a90aae\\URMPoints.bin";
- public string PointNumsDataPath { get; set; } = "D:\\Projects\\URMDemo\\URMDemo\\bin\\Debug\\URMTemp\\393f5673dc424b5e87334f8ba4a90aae\\URMPointNums.bin";
- protected override string GetUniqueValue()
- {
- var datas = new StringBuilder();
- datas.Append(URMVideoScaler);
- datas.Append(URMVideoParameter);
- datas.Append(URMVideoType);
- datas.Append(PointsDataPath);
- datas.Append(PointNumsDataPath);
- return base.GetUniqueValue() + datas.ToString();
- }
- public override string GetUniqueCode()
- {
- try
- {
- return ToSHA256(GetUniqueValue());
- }
- catch
- {
- return Guid.NewGuid().ToString("N");
- }
- }
- }
- }
|