UrmProcessRequest.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Security.Cryptography;
  4. using System.Text;
  5. using Vinno.DataTypes;
  6. using Vinno.DataManager.Utilities;
  7. namespace WingAIDiagnosisService.URMManage
  8. {
  9. public class UrmProcessRequest
  10. {
  11. /// <summary>
  12. /// GUID
  13. /// </summary>
  14. public string GUID { get; set; }
  15. /// <summary>
  16. /// RemedicalCode
  17. /// </summary>
  18. public string RemedicalCode { get; set; }
  19. /// <summary>
  20. /// Token
  21. /// </summary>
  22. public string Token { get; set; }
  23. /// <summary>
  24. /// 操作类型 0-后处理zoom关,1-colorbar,2-zoom开,3-测量
  25. /// </summary>
  26. /// <value></value>
  27. public int ProcessType { get; set; } = 0;
  28. //文件路径
  29. public string DenDataPath { get; set; } = "D:\\Projects\\URMDemo\\URMDemo\\bin\\Debug\\URMTemp\\393f5673dc424b5e87334f8ba4a90aae\\srcDenArray.bin";
  30. public string DirDataPath { get; set; } = "D:\\Projects\\URMDemo\\URMDemo\\bin\\Debug\\URMTemp\\393f5673dc424b5e87334f8ba4a90aae\\srcDirArray.bin";
  31. public string VelDataPath { get; set; } = "D:\\Projects\\URMDemo\\URMDemo\\bin\\Debug\\URMTemp\\393f5673dc424b5e87334f8ba4a90aae\\srcVelArray.bin";
  32. public string AngleDataPath { get; set; } = "D:\\Projects\\URMDemo\\URMDemo\\bin\\Debug\\URMTemp\\393f5673dc424b5e87334f8ba4a90aae\\srcAngleArray.bin";
  33. public string MaskDataPath { get; set; } = "D:\\Projects\\URMDemo\\URMDemo\\bin\\Debug\\URMTemp\\393f5673dc424b5e87334f8ba4a90aae\\srcMaskArray.bin";
  34. ///// <summary>
  35. ///// 生成图片保存路径
  36. ///// </summary>
  37. //public string ImgFilePath { get; set; } = "D:\\Projects\\URMDemo\\URMDemo\\bin\\Debug\\URMTemp\\393f5673dc424b5e87334f8ba4a90aae\\test0627.png";
  38. //探头信息
  39. public string FamilyName { get; set; } = "Linear";
  40. public string TypeInfo { get; set; } = "Linear_U5-15LE";
  41. public string NativeId { get; set; } = "Breast";
  42. // 图像配置
  43. public string UrmImageType { get; set; } = "0"; // Den 0, Dir 1, Vel 2, Angle 3
  44. public int UrmBlend { get; set; }
  45. // 用于后处理计算的算法参数(需要传入)
  46. public float DownsampleIndex { get; set; } = 3f;
  47. public float IntPowerDen { get; set; } = 4f;
  48. public float IntPowerDir { get; set; } = 4f;
  49. public float SigmaGauss { get; set; } = 2.4f;
  50. public float VessScale { get; set; } = 1f;
  51. public float VelMaxScaler { get; set; } = 1f;
  52. public float VelMinScaler { get; set; } = 0f;
  53. public float Iterations { get; set; } = 1f; // URM的基础参数包括分析结果的数据与大小以及Res
  54. public double Res { get; set; } = 2.5;
  55. public int Urmsrcwidth { get; set; } = 188; // URM分析后的数据宽度
  56. public int Urmsrcheight { get; set; } = 1233; // URM分析后的数据高度
  57. public double ScaleOfPixel_x { get; set; } = 0.214925914347303;
  58. public double ScaleOfPixel_y { get; set; } = 0.61038961038961;
  59. public int ImgProcessVer { get; set; } = 1;//后处理算法版本 0 Ver2(<2.7) 1 Ver3(2.7)
  60. public bool Isliner { get; set; } = true;
  61. // URM的绘制参数
  62. public bool ZoomOn { get; set; } = false; // 是否开启 zoom
  63. public double ZoomRoix { get; set; } = 0; // zoom 区域在 ROI 中的归一化坐标
  64. public double ZoomRoiy { get; set; } = 0; // zoom 区域在 ROI 中的归一化坐标
  65. public double ZoomRoiwidth { get; set; } = 1; // zoom 区域在 ROI 中的归一化坐标
  66. public double ZoomRoiheight { get; set; } = 1; // zoom 区域在 ROI 中的归一化坐标
  67. public int Roix { get; set; } = 274;// Roi 区域在整个图像中的像素位置
  68. public int Roiy { get; set; } = 16;// Roi 区域在整个图像中的像素位置
  69. public int Roiwidth { get; set; } = 243; // Roi 区域在整个图像中的像素位置
  70. public int Roiheight { get; set; } = 616; // Roi 区域在整个图像中的像素位置
  71. public bool LeftRight { get; set; } = false;
  72. public bool UpDown { get; set; } = false;
  73. public int ScreenWidth { get; set; } = 666;// 输出的图像的尺寸
  74. public int ScreenHeight { get; set; } = 650; // 输出的图像的尺寸
  75. public DPoint[] UrmTraceDPoints { get; set; } = new DPoint[0];
  76. protected virtual string GetUniqueValue()
  77. {
  78. var datas = new StringBuilder();
  79. datas.Append(DenDataPath);
  80. datas.Append(DirDataPath);
  81. datas.Append(VelDataPath);
  82. datas.Append(AngleDataPath);
  83. datas.Append(MaskDataPath);
  84. datas.Append(FamilyName);
  85. datas.Append(TypeInfo);
  86. datas.Append(NativeId);
  87. datas.Append(UrmImageType);
  88. datas.Append(UrmBlend);
  89. datas.Append(DownsampleIndex);
  90. datas.Append(IntPowerDen);
  91. datas.Append(IntPowerDir);
  92. datas.Append(SigmaGauss);
  93. datas.Append(VessScale);
  94. datas.Append(VelMaxScaler);
  95. datas.Append(VelMinScaler);
  96. datas.Append(Iterations);
  97. datas.Append(Res);
  98. datas.Append(Urmsrcwidth);
  99. datas.Append(Urmsrcheight);
  100. datas.Append(ScaleOfPixel_x);
  101. datas.Append(ScaleOfPixel_y);
  102. datas.Append(ImgProcessVer);
  103. datas.Append(Isliner);
  104. datas.Append(ZoomOn);
  105. datas.Append(ZoomRoix);
  106. datas.Append(ZoomRoiy);
  107. datas.Append(ZoomRoiwidth);
  108. datas.Append(ZoomRoiheight);
  109. datas.Append(Roix);
  110. datas.Append(Roiy);
  111. datas.Append(Roiwidth);
  112. datas.Append(Roiheight);
  113. datas.Append(LeftRight);
  114. datas.Append(UpDown);
  115. datas.Append(ScreenWidth);
  116. datas.Append(ScreenHeight);
  117. datas.Append(Newtonsoft.Json.JsonConvert.SerializeObject(UrmTraceDPoints));
  118. return datas.ToString();
  119. }
  120. public virtual string GetUniqueCode()
  121. {
  122. try
  123. {
  124. var datas = new StringBuilder();
  125. datas.Append(Token);
  126. datas.Append(RemedicalCode);
  127. datas.Append(ProcessType);
  128. return ToSHA256(datas.ToString());
  129. }
  130. catch
  131. {
  132. return Guid.NewGuid().ToString("N");
  133. }
  134. }
  135. protected string ToSHA256(string originalString)
  136. {
  137. using (SHA256 sha256Hash = SHA256.Create())
  138. {
  139. byte[] bytes = sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(originalString));
  140. StringBuilder builder = new StringBuilder();
  141. for (int i = 0; i < bytes.Length; i++)
  142. {
  143. builder.Append(bytes[i].ToString("x2"));
  144. }
  145. string encryptedString = builder.ToString().Substring(0, 32); // 获取前32位作为加密后的字符串
  146. return encryptedString;
  147. }
  148. }
  149. }
  150. public class UrmMeasureProcessRequest : UrmProcessRequest
  151. {
  152. /// <summary>
  153. /// 测量项枚举
  154. /// </summary>
  155. public URMMeasureType UrmMeasureType { get; set; }
  156. /// <summary>
  157. /// 点集
  158. /// </summary>
  159. public List<DPoint> SrcDPoints { get; set; }
  160. /// <summary>
  161. /// 两点物理距离
  162. /// </summary>
  163. public double? CMlength { get; set; }
  164. /// <summary>
  165. /// 画布物理宽度
  166. /// </summary>
  167. public double Phywidth { get; set; }
  168. /// <summary>
  169. /// ROI 类型
  170. /// </summary>
  171. public URMROIType ROIType { get; set; }
  172. /// <summary>
  173. /// Rim 宽度
  174. /// </summary>
  175. public double ShellWidth { get; set; }
  176. protected override string GetUniqueValue()
  177. {
  178. var datas = new StringBuilder();
  179. // datas.Append(UrmMeasureType);
  180. // datas.Append(CMlength);
  181. // datas.Append(Phywidth);
  182. // datas.Append(ROIType);
  183. // datas.Append(ShellWidth);
  184. // datas.Append(Newtonsoft.Json.JsonConvert.SerializeObject(SrcDPoints));
  185. //if (UrmMeasureType == URMMeasureType.URMCurvature)
  186. //{
  187. //datas.Append(Token);
  188. //}
  189. datas.Append(Token);
  190. return base.GetUniqueValue() + datas.ToString();
  191. }
  192. public override string GetUniqueCode()
  193. {
  194. try
  195. {
  196. return ToSHA256(GetUniqueValue());
  197. }
  198. catch
  199. {
  200. return Guid.NewGuid().ToString("N");
  201. }
  202. }
  203. }
  204. public class URMProcessorClass
  205. {
  206. /// <summary>
  207. /// GUID
  208. /// </summary>
  209. public string GUID { get; set; }
  210. public URMProcess Processor { get; set; }
  211. public DateTime LastActiveTime { get; set; }
  212. public bool HasDrawed { get; set; }
  213. public double UrmMinVal { get; set; }
  214. public double UrmMaxVal { get; set; }
  215. public NativeArray DenArray { get; set; }
  216. public NativeArray DirArray { get; set; }
  217. public NativeArray VelArray { get; set; }
  218. public NativeArray AngleArray { get; set; }
  219. public NativeArray MaskArray { get; set; }
  220. }
  221. public class DoUrmVideoProcessRequest : UrmProcessRequest
  222. {
  223. // 当前播放帧
  224. public int VideoFrame { get; set; } = 0;
  225. // 视频配置
  226. public float URMVideoScaler { get; set; } = 3;
  227. public float URMVideoParameter { get; set; } = 2;
  228. public float URMVideoType { get; set; } = 1;
  229. //数据路径
  230. public string PointsDataPath { get; set; } = "D:\\Projects\\URMDemo\\URMDemo\\bin\\Debug\\URMTemp\\393f5673dc424b5e87334f8ba4a90aae\\URMPoints.bin";
  231. public string PointNumsDataPath { get; set; } = "D:\\Projects\\URMDemo\\URMDemo\\bin\\Debug\\URMTemp\\393f5673dc424b5e87334f8ba4a90aae\\URMPointNums.bin";
  232. protected override string GetUniqueValue()
  233. {
  234. var datas = new StringBuilder();
  235. datas.Append(URMVideoScaler);
  236. datas.Append(URMVideoParameter);
  237. datas.Append(URMVideoType);
  238. datas.Append(PointsDataPath);
  239. datas.Append(PointNumsDataPath);
  240. return base.GetUniqueValue() + datas.ToString();
  241. }
  242. public override string GetUniqueCode()
  243. {
  244. try
  245. {
  246. return ToSHA256(GetUniqueValue());
  247. }
  248. catch
  249. {
  250. return Guid.NewGuid().ToString("N");
  251. }
  252. }
  253. }
  254. }