Repository for M.A.I.L system's analysis server.
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

mailsync.py 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. import os
  2. import sys
  3. import time
  4. import pandas as pd
  5. import json
  6. import numpy as np
  7. import math
  8. import subprocess
  9. import paramiko
  10. sys.path.append(os.path.expanduser('~/sources/'))
  11. import mailimage
  12. import mailkpi
  13. WDIR_DEFAULT = os.path.expanduser('~/data/')
  14. SDIR_DEFAULT = os.path.abspath('/hdd/')
  15. RECFRAME_DEFAULT = 1800
  16. JSON_PATH = '~/sources/configuration.json'
  17. SOURCE_DIR = '~/sources/'
  18. STORAGE_DIR = '/hdd/'
  19. WIDTH_NORMAL = float(4) / 1920
  20. HEIGHT_NORMAL = float(2.25) / 1080
  21. #dataFrame = cam1.csv, conf_cam = conf['cam1'] or conf['cam2']
  22. def sync_coord_main(dataFrame, conf_cam):
  23. df = dataFrame
  24. cam = conf_cam
  25. df.drop_duplicates(['frame'])
  26. radian = np.pi/180 * cam['angle']
  27. sin_a = np.sin(radian)
  28. cos_a = np.cos(radian)
  29. df['x'] = df['x'] * WIDTH_NORMAL
  30. df['y'] = df['y'] * HEIGHT_NORMAL
  31. g_cam_x = math.sqrt((cam['d_headCoord']**2) - (cam['d_center']**2))
  32. g_cam_y = cam['d_center'] * cos_a
  33. g_cam_z = cam['d_center'] * sin_a
  34. g_df = pd.DataFrame(data={'x': [], 'y': [], 'z': [], 'frame': []})
  35. g_df['x'] = df['x'] + g_cam_x
  36. g_df['frame'] = df['frame']
  37. for index, row in df.iterrows():
  38. A = [[sin_a,-(cos_a)],[cos_a, sin_a]]
  39. B = [row['y']-g_cam_y*sin_a-g_cam_z*cos_a, row['z']-g_cam_y*cos_a+g_cam_z*sin_a]
  40. C = np.linalg.solve(A,B)
  41. g_df['y'][index] = C[0]
  42. g_df['z'][index] = C[1]
  43. g_result = pd.DataFrame(data={'x': g_df['y'], 'y': g_df['x'], 'z': g_df['z'], 'frame': g_df['frame']})
  44. return(g_result)
  45. def sync_coord_sub(dataFrame, conf_cam):
  46. df = dataFrame
  47. cam = conf_cam
  48. df.drop_duplicates(['frame'])
  49. radian = np.pi/180 * cam['angle']
  50. sin_a = np.sin(radian)
  51. cos_a = np.cos(radian)
  52. df['x'] = df['x'] * WIDTH_NORMAL
  53. df['y'] = df['y'] * HEIGHT_NORMAL
  54. g_cam_x = math.sqrt((cam['d_headCoord']**2) - (cam['d_center']**2))
  55. g_cam_y = cam['d_center'] * cos_a
  56. g_cam_z = cam['d_center'] * sin_a
  57. g_df = pd.DataFrame(data={'x': [], 'y': [], 'z': [], 'frame': []})
  58. g_df['x'] = df['x'] + g_cam_x
  59. for index, row in df.iterrows():
  60. A = [[sin_a,cos_a],[cos_a,-(sin_a)]]
  61. B = [g_cam_y*sin_a + g_cam_z*cos_a - row['y'],-(g_cam_y*cos_a)-g_cam_z*sin_a-row['z']]
  62. C = np.linalg.solve(A,B)
  63. g_df['y'][index] = C[0]
  64. g_df['z'][index] = C[1]
  65. g_result = pd.DataFrame(data={'x': g_df['y'], 'y': g_df['x'], 'z': g_df['z'], 'frame': g_df['frame']})
  66. return(g_result)
  67. def loop_sync():
  68. with open (os.path.abspath(os.path.expanduser(JSON_PATH)), "r") as json_file:
  69. conf = json.load(json_file)
  70. hdd_list = []
  71. hdd_list = os.listdir(os.path.abspath(STORAGE_DIR))
  72. hdd_list.remove('lost+found')
  73. tmp_e = hdd_list[0]
  74. hdd_list[0] = hdd_list[1]
  75. hdd_list[1] = tmp_e
  76. for surgeon in hdd_list:
  77. surgeondatalist = os.listdir(os.path.abspath(STORAGE_DIR+surgeon))
  78. surgeondatalist = sorted(surgeondatalist)
  79. if 'kpi.csv' in surgeondatalist:
  80. transport = paramiko.Transport(('mc365.asuscomm.com', 63122))
  81. transport.connect(username='mc365', password='tkadbrdhMC1!')
  82. sftp = paramiko.SFTPClient.from_transport(transport)
  83. for surgeondata in surgeondatalist:
  84. try:
  85. sftp.put(os.path.abspath(STORAGE_DIR+surgeon+'/'+surgeondata), '/data/'+surgeon + '/' + surgeondata)
  86. except:
  87. pass
  88. sftp.close()
  89. transport.close()
  90. subprocess.Popen(['rm', '-rf', os.path.abspath(STORAGE_DIR+surgeon+'/')])
  91. else:
  92. if 'cam1.csv' in surgeondatalist:
  93. df_1 = pd.read_csv(os.path.abspath(STORAGE_DIR+surgeon+'/cam1.csv'))
  94. if conf['mainCam'] == conf['cam1']['SN']:
  95. g_cam1=sync_coord_main(df_1, conf['cam1'])
  96. g_cam1['cam'] = 1
  97. g_cam1.to_csv(os.path.abspath(STORAGE_DIR+surgeon+'/cam1_coord.csv'),index=False)
  98. mailimage.draw_plot_cam_1(g_cam1, os.path.abspath(STORAGE_DIR+surgeon+'/cam1_coord.png'))
  99. mailimage.draw_xy(g_cam1, os.path.abspath(STORAGE_DIR+surgeon+'/cam1_coord_xy.png'))
  100. mailimage.draw_yz(g_cam1, os.path.abspath(STORAGE_DIR+surgeon+'/cam1_coord_yz.png'))
  101. mailimage.draw_xz(g_cam1, os.path.abspath(STORAGE_DIR+surgeon+'/cam1_coord_xz.png'))
  102. if 'cam2.csv' not in surgeondatalist:
  103. g_cam1 = g_cam1.drop_duplicates(['frame'], keep='first')
  104. g_cam1.to_csv(os.path.abspath(STORAGE_DIR+surgeon+'/coordinate.csv'),index=False)
  105. g_cam1.to_csv(os.path.abspath(STORAGE_DIR+surgeon+'/coordinate_summary.csv'),index=False)
  106. mailimage.draw_plot_total(g_cam1, os.path.abspath(STORAGE_DIR+surgeon+'/coordinate.png'))
  107. mailimage.draw_xy(g_cam1, os.path.abspath(STORAGE_DIR+surgeon+'/coordinate_xy.png'))
  108. mailimage.draw_yz(g_cam1, os.path.abspath(STORAGE_DIR+surgeon+'/coordinate_yz.png'))
  109. mailimage.draw_xz(g_cam1, os.path.abspath(STORAGE_DIR+surgeon+'/coordinate_xz.png'))
  110. else:
  111. g_cam1=sync_coord_sub(df_1, conf['cam1'])
  112. g_cam1['cam'] = 1
  113. g_cam1.to_csv(os.path.abspath(STORAGE_DIR+surgeon+'/cam1_coord.csv'),index=False)
  114. mailimage.draw_plot_cam_1(g_cam1, os.path.abspath(STORAGE_DIR+surgeon+'/cam1_coord.png'))
  115. mailimage.draw_xy(g_cam1, os.path.abspath(STORAGE_DIR+surgeon+'/cam1_coord_xy.png'))
  116. mailimage.draw_yz(g_cam1, os.path.abspath(STORAGE_DIR+surgeon+'/cam1_coord_yz.png'))
  117. mailimage.draw_xz(g_cam1, os.path.abspath(STORAGE_DIR+surgeon+'/cam1_coord_xz.png'))
  118. if 'cam2.csv' not in surgeondatalist:
  119. g_cam1 = g_cam1.drop_duplicates(['frame'], keep='first')
  120. g_cam1.to_csv(os.path.abspath(STORAGE_DIR+surgeon+'/coordinate.csv'),index=False)
  121. g_cam1.to_csv(os.path.abspath(STORAGE_DIR+surgeon+'/coordinate_summary.csv'),index=False)
  122. mailimage.draw_plot_total(g_cam1, os.path.abspath(STORAGE_DIR+surgeon+'/coordinate.png'))
  123. mailimage.draw_xy(g_cam1, os.path.abspath(STORAGE_DIR+surgeon+'/coordinate_xy.png'))
  124. mailimage.draw_yz(g_cam1, os.path.abspath(STORAGE_DIR+surgeon+'/coordinate_yz.png'))
  125. mailimage.draw_xz(g_cam1, os.path.abspath(STORAGE_DIR+surgeon+'/coordinate_xz.png'))
  126. if 'cam2.csv' in surgeondatalist:
  127. df_2 = pd.read_csv(os.path.abspath(STORAGE_DIR+surgeon+'/cam2.csv'))
  128. if conf['mainCam'] == conf['cam2']['SN']:
  129. g_cam2 = sync_coord_main(df_2, conf['cam2'])
  130. g_cam2['cam'] = 2
  131. g_cam2.to_csv(os.path.abspath(STORAGE_DIR+surgeon+'/cam2_coord.csv'),index=False)
  132. mailimage.draw_plot_cam_2(g_cam2, os.path.abspath(STORAGE_DIR+surgeon+'/cam2_coord.png'))
  133. mailimage.draw_xy(g_cam2, os.path.abspath(STORAGE_DIR+surgeon+'/cam2_coord_xy.png'))
  134. mailimage.draw_yz(g_cam2, os.path.abspath(STORAGE_DIR+surgeon+'/cam2_coord_yz.png'))
  135. mailimage.draw_xz(g_cam2, os.path.abspath(STORAGE_DIR+surgeon+'/cam2_coord_xz.png'))
  136. g_coor = pd.concat([g_cam1,g_cam2])
  137. g_coor = g_coor.drop_duplicates(['frame'], keep='first')
  138. g_coor = g_coor.sort_values('frame')
  139. g_coor.to_csv(os.path.abspath(STORAGE_DIR+surgeon+'/coordinate.csv'),index=False)
  140. g_coor.to_csv(os.path.abspath(STORAGE_DIR+surgeon+'/coordinate_summary.csv'),index=False)
  141. mailimage.draw_plot_total(g_coor, os.path.abspath(STORAGE_DIR+surgeon+'/coordinate.png'))
  142. mailimage.draw_xy(g_coor, os.path.abspath(STORAGE_DIR+surgeon+'/coordinate_xy.png'))
  143. mailimage.draw_yz(g_coor, os.path.abspath(STORAGE_DIR+surgeon+'/coordinate_yz.png'))
  144. mailimage.draw_xz(g_coor, os.path.abspath(STORAGE_DIR+surgeon+'/coordinate_xz.png'))
  145. else:
  146. g_cam2 = sync_coord_sub(df_2, conf['cam2'])
  147. g_cam2['cam'] = 2
  148. g_cam2.to_csv(os.path.abspath(STORAGE_DIR+surgeon+'/cam2_coord.csv'),index=False)
  149. mailimage.draw_plot_cam_2(g_cam2, os.path.abspath(STORAGE_DIR+surgeon+'/cam2_coord.png'))
  150. mailimage.draw_xy(g_cam2, os.path.abspath(STORAGE_DIR+surgeon+'/cam2_coord_xy.png'))
  151. mailimage.draw_yz(g_cam2, os.path.abspath(STORAGE_DIR+surgeon+'/cam2_coord_yz.png'))
  152. mailimage.draw_xz(g_cam2, os.path.abspath(STORAGE_DIR+surgeon+'/cam2_coord_xz.png'))
  153. g_coor = pd.concat([g_cam1,g_cam2])
  154. g_coor = g_coor.drop_duplicates(['frame'], keep='first')
  155. g_coor = g_coor.sort_values('frame')
  156. g_coor.to_csv(os.path.abspath(STORAGE_DIR+surgeon+'/coordinate.csv'),index=False)
  157. g_coor.to_csv(os.path.abspath(STORAGE_DIR+surgeon+'/coordinate_summary.csv'),index=False)
  158. mailimage.draw_plot_total(g_coor, os.path.abspath(STORAGE_DIR+surgeon+'/coordinate.png'))
  159. mailimage.draw_xy(g_coor, os.path.abspath(STORAGE_DIR+surgeon+'/coordinate_xy.png'))
  160. mailimage.draw_yz(g_coor, os.path.abspath(STORAGE_DIR+surgeon+'/coordinate_yz.png'))
  161. mailimage.draw_xz(g_coor, os.path.abspath(STORAGE_DIR+surgeon+'/coordinate_xz.png'))
  162. #difference of difference
  163. df_kpi = mailkpi.dist(os.path.abspath(STORAGE_DIR+surgeon+'/coordinate.csv'))
  164. mailkpi.put_kpi_to_db(df_kpi)
  165. df_kpi = pd.DataFrame([df_kpi])
  166. diff = pd.read_csv(os.path.abspath(STORAGE_DIR+surgeon+'/diff.csv'))
  167. mailimage.draw_diff_diff(diff,os.path.abspath(STORAGE_DIR+surgeon+'/diff.png'))
  168. df_kpi.to_csv(os.path.abspath(STORAGE_DIR+surgeon+'/kpi.csv'), index=False)
  169. #subprocess ftp
  170. def main():
  171. while True:
  172. loop_sync()
  173. time.sleep(15)
  174. if __name__ == "__main__":
  175. main()