UrmProcessRequest.cs 10 KB

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