Repository for M.A.I.L system's analysis server.
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

kpi.py 5.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. import os
  2. import time
  3. import math
  4. import sys
  5. import numpy as np
  6. import pandas as pd
  7. from pandas import DataFrame as df
  8. from sklearn.cluster import DBSCAN
  9. import matplotlib.pyplot as plt
  10. ssd_dir = str(sys.argv[1])
  11. file_path = '/hdd/' + ssd_dir[5:]
  12. count = 1
  13. def get_quad(df):
  14. if df['x'] >= 0 and df['y'] >= 0:
  15. return 1
  16. elif df['x'] >= 0 and df['y'] < 0:
  17. return 2
  18. elif df['x'] < 0 and df['y'] < 0:
  19. return 3
  20. elif df['x'] < 0 and df['y'] >= 0:
  21. return 4
  22. def get_inc_num(df):
  23. global count
  24. prev_count = 0
  25. if abs(df['diff_diff']) > 0.0008:
  26. prev_count = df['inc_num']
  27. df['inc_num'] = count
  28. #print(prev_count)
  29. return count
  30. else:
  31. if prev_count != 0:
  32. count += 1
  33. df['inc_num'] = 0
  34. prev_count = df['inc_num']
  35. return 0
  36. else:
  37. df['inc_num'] = 0
  38. prev_count = df['inc_num']
  39. return 0
  40. def count_inc(df):
  41. e= 0
  42. count = 1
  43. prev_count = 0
  44. for x in df['diff_diff']:
  45. if abs(x) > 8:
  46. df['inc_num'][e] = count
  47. prev_count = count
  48. e +=1
  49. else:
  50. if prev_count != 0:
  51. count += 1
  52. df['inc_num'][e] = 0
  53. prev_count = 0
  54. e +=1
  55. else:
  56. df['inc_num'][e] = 0
  57. prev_count = 0
  58. e +=1
  59. def stroke_count(df):
  60. e = 0
  61. count = 1
  62. for x in df['diff_diff']:
  63. if x > 1.2:
  64. df['stroke_count'][e] = count
  65. e +=1
  66. else:
  67. df['stroke_count'][e] = 0
  68. e+=1
  69. def get_sqrt(df):
  70. e =0
  71. count = 1
  72. prev_x = 0.0
  73. prev_y = 0.0
  74. prev_z = 0.0
  75. for x in range(len(df)):
  76. df['sqrt'][e] = np.sqrt((df['x'][e] - prev_x) **2 + (df['y'][e] - prev_y) ** 2 +(df['z'][e] - prev_z) ** 2)
  77. prev_x = df['x'][e]
  78. prev_y = df['y'][e]
  79. prev_z = df['z'][e]
  80. e += 1
  81. def dist():
  82. file = os.path.join(file_path, 'coordinate.csv')
  83. norm = pd.read_csv(file)
  84. norm = norm.drop(norm.columns[0], axis=1)
  85. norm = norm.fillna(0)
  86. data = norm[['x', 'y', 'z']]
  87. norm['sqrt'] = 0.0
  88. get_sqrt(norm)
  89. #norm = norm.apply(lambda x:np.sqrt(x) if x.name in ['sqrt'] else x, axis =1)
  90. norm['diff'] = norm.diff()['sqrt']
  91. norm['diff_diff'] = norm.diff()['diff']
  92. norm['quad'] = norm.apply(get_quad, axis =1)
  93. norm = norm.fillna(0)
  94. norm['inc_num'] = 0
  95. #norm['inc_num'] = norm.apply(get_inc_num, axis = 1)
  96. count_inc(norm)
  97. norm['stroke_count'] = 0
  98. stroke_count(norm)
  99. print('num of inc')
  100. print(norm['inc_num'].unique())
  101. print('total stroke')
  102. #print(norm['stroke_count'].unique())
  103. print(norm)
  104. plt.plot(norm['frame'],norm['diff_diff'])
  105. plt.savefig('/sources/diff_diff.png')
  106. kpi = pd.DataFrame(index=range(0,1))
  107. quad_count = norm[norm['stroke_count'] != 0]
  108. quad1_c = quad_count[quad_count['quad'] == 1]
  109. quad2_c = quad_count[quad_count['quad'] == 2]
  110. quad3_c = quad_count[quad_count['quad'] == 3]
  111. quad4_c = quad_count[quad_count['quad'] == 4]
  112. print(len(quad1_c))
  113. print(len(quad2_c))
  114. print(len(quad3_c))
  115. print(len(quad4_c))
  116. print(quad1_c)
  117. kpi['PK'] = ssd_dir[5:]
  118. kpi['qaud1_c'] = len(quad1_c)
  119. kpi['qaud2_c'] = len(quad2_c)
  120. kpi['qaud3_c'] = len(quad3_c)
  121. kpi['qaud4_c'] = len(quad4_c)
  122. kpi['qaud1_s'] = quad1_c['sqrt'].mean() / 30
  123. kpi['qaud2_s'] = quad2_c['sqrt'].mean() / 30
  124. kpi['qaud3_s'] = quad3_c['sqrt'].mean() / 30
  125. kpi['qaud4_s'] = quad4_c['sqrt'].mean() / 30
  126. kpi['qaud1_d'] = quad1_c['sqrt'].mean() / 45
  127. kpi['qaud2_d'] = quad2_c['sqrt'].mean() / 45
  128. kpi['qaud3_d'] = quad3_c['sqrt'].mean() / 45
  129. kpi['qaud4_d'] = quad4_c['sqrt'].mean() / 45
  130. kpi_1 = {
  131. "stroke": [len(quad1_c),len(quad2_c),len(quad3_c),len(quad4_c)],
  132. "velocity": [quad1_c['sqrt'].mean() / 30, quad2_c['sqrt'].mean() / 30, quad3_c['sqrt'].mean() / 30, quad4_c['sqrt'].mean() / 30],
  133. "depth": [quad1_c['sqrt'].mean() / 45, quad2_c['sqrt'].mean() / 45, quad3_c['sqrt'].mean() / 45, quad4_c['sqrt'].mean() / 45]
  134. }
  135. print(kpi)
  136. val_list = []
  137. #PK =
  138. val_list.append(str(ssd_dir[5:-1]))
  139. #t_stroke =
  140. val_list.append(sum(kpi_1['stroke']))
  141. #t_vel
  142. val_list.append("{:.4f}".format(sum(kpi_1['velocity'])/4))
  143. #t_dep
  144. val_list.append("{:.4f}".format(sum(kpi_1['depth'])/4))
  145. #ud_s_rate =
  146. val_list.append("{:.4f}".format((kpi_1['stroke'][0] + kpi_1['stroke'][3] - kpi_1['stroke'][1] - kpi_1['stroke'][2]) / sum(kpi_1['stroke'])*100))
  147. #ud_v_rate =
  148. val_list.append("{:.4f}".format((kpi_1['velocity'][0] + kpi_1['velocity'][3] - kpi_1['velocity'][1] - kpi_1['velocity'][2])/2))
  149. #ud_d_rate =
  150. val_list.append("{:.4f}".format((kpi_1['depth'][0] + kpi_1['depth'][3] - kpi_1['depth'][1] - kpi_1['depth'][2])/2))
  151. #lr_s_rate =
  152. val_list.append("{:.4f}".format((kpi_1['stroke'][2] + kpi_1['stroke'][3] - kpi_1['stroke'][0] - kpi_1['stroke'][1]) / sum(kpi_1['stroke'])*100))
  153. #lr_v_rate =
  154. val_list.append("{:.4f}".format((kpi_1['velocity'][2] + kpi_1['velocity'][3] - kpi_1['velocity'][0] - kpi_1['velocity'][1])/2))
  155. #lr_d_rate =
  156. val_list.append("{:.4f}".format((kpi_1['depth'][2] + kpi_1['depth'][3] - kpi_1['depth'][0] - kpi_1['depth'][1])/2))
  157. print(val_list)
  158. dist()