import os import sys import time import pandas as pd import json import numpy as np import math import subprocess import paramiko sys.path.append(os.path.expanduser('~/sources/')) import mailimage import mailkpi WDIR_DEFAULT = os.path.expanduser('~/data/') SDIR_DEFAULT = os.path.abspath('/hdd/') RECFRAME_DEFAULT = 1800 JSON_PATH = '~/sources/configuration.json' SOURCE_DIR = '~/sources/' STORAGE_DIR = '/hdd/' WIDTH_NORMAL = float(4) / 1920 HEIGHT_NORMAL = float(2.25) / 1080 #dataFrame = cam1.csv, conf_cam = conf['cam1'] or conf['cam2'] def sync_coord_main(dataFrame, conf_cam): df = dataFrame cam = conf_cam df.drop_duplicates(['frame']) radian = np.pi/180 * cam['angle'] sin_a = np.sin(radian) cos_a = np.cos(radian) df['x'] = df['x'] * WIDTH_NORMAL df['y'] = df['y'] * HEIGHT_NORMAL g_cam_x = math.sqrt((cam['d_headCoord']**2) - (cam['d_center']**2)) g_cam_y = cam['d_center'] * cos_a g_cam_z = cam['d_center'] * sin_a g_df = pd.DataFrame(data={'x': [], 'y': [], 'z': [], 'frame': []}) g_df['x'] = df['x'] + g_cam_x g_df['frame'] = df['frame'] for index, row in df.iterrows(): A = [[sin_a,-(cos_a)],[cos_a, sin_a]] 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] C = np.linalg.solve(A,B) g_df['y'][index] = C[0] g_df['z'][index] = C[1] g_result = pd.DataFrame(data={'x': g_df['y'], 'y': g_df['x'], 'z': g_df['z'], 'frame': g_df['frame']}) return(g_result) def sync_coord_sub(dataFrame, conf_cam): df = dataFrame cam = conf_cam df.drop_duplicates(['frame']) radian = np.pi/180 * cam['angle'] sin_a = np.sin(radian) cos_a = np.cos(radian) df['x'] = df['x'] * WIDTH_NORMAL df['y'] = df['y'] * HEIGHT_NORMAL g_cam_x = math.sqrt((cam['d_headCoord']**2) - (cam['d_center']**2)) g_cam_y = cam['d_center'] * cos_a g_cam_z = cam['d_center'] * sin_a g_df = pd.DataFrame(data={'x': [], 'y': [], 'z': [], 'frame': []}) g_df['x'] = df['x'] + g_cam_x for index, row in df.iterrows(): A = [[sin_a,cos_a],[cos_a,-(sin_a)]] 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']] C = np.linalg.solve(A,B) g_df['y'][index] = C[0] g_df['z'][index] = C[1] g_result = pd.DataFrame(data={'x': g_df['y'], 'y': g_df['x'], 'z': g_df['z'], 'frame': g_df['frame']}) return(g_result) def loop_sync(): with open (os.path.abspath(os.path.expanduser(JSON_PATH)), "r") as json_file: conf = json.load(json_file) hdd_list = [] hdd_list = os.listdir(os.path.abspath(STORAGE_DIR)) hdd_list.remove('lost+found') tmp_e = hdd_list[0] hdd_list[0] = hdd_list[1] hdd_list[1] = tmp_e for surgeon in hdd_list: surgeondatalist = os.listdir(os.path.abspath(STORAGE_DIR+surgeon)) surgeondatalist = sorted(surgeondatalist) if 'kpi.csv' in surgeondatalist: transport = paramiko.Transport(('mc365.asuscomm.com', 63122)) transport.connect(username='mc365', password='tkadbrdhMC1!') sftp = paramiko.SFTPClient.from_transport(transport) for surgeondata in surgeondatalist: try: sftp.put(os.path.abspath(STORAGE_DIR+surgeon+'/'+surgeondata), '/data/'+surgeon + '/' + surgeondata) except: pass sftp.close() transport.close() subprocess.Popen(['rm', '-rf', os.path.abspath(STORAGE_DIR+surgeon+'/')]) else: if 'cam1.csv' in surgeondatalist: df_1 = pd.read_csv(os.path.abspath(STORAGE_DIR+surgeon+'/cam1.csv')) if conf['mainCam'] == conf['cam1']['SN']: g_cam1=sync_coord_main(df_1, conf['cam1']) g_cam1['cam'] = 1 g_cam1.to_csv(os.path.abspath(STORAGE_DIR+surgeon+'/cam1_coord.csv'),index=False) mailimage.draw_plot_cam_1(g_cam1, os.path.abspath(STORAGE_DIR+surgeon+'/cam1_coord.png')) mailimage.draw_xy(g_cam1, os.path.abspath(STORAGE_DIR+surgeon+'/cam1_coord_xy.png')) mailimage.draw_yz(g_cam1, os.path.abspath(STORAGE_DIR+surgeon+'/cam1_coord_yz.png')) mailimage.draw_xz(g_cam1, os.path.abspath(STORAGE_DIR+surgeon+'/cam1_coord_xz.png')) if 'cam2.csv' not in surgeondatalist: g_cam1 = g_cam1.drop_duplicates(['frame'], keep='first') g_cam1.to_csv(os.path.abspath(STORAGE_DIR+surgeon+'/coordinate.csv'),index=False) g_cam1.to_csv(os.path.abspath(STORAGE_DIR+surgeon+'/coordinate_summary.csv'),index=False) mailimage.draw_plot_total(g_cam1, os.path.abspath(STORAGE_DIR+surgeon+'/coordinate.png')) mailimage.draw_xy(g_cam1, os.path.abspath(STORAGE_DIR+surgeon+'/coordinate_xy.png')) mailimage.draw_yz(g_cam1, os.path.abspath(STORAGE_DIR+surgeon+'/coordinate_yz.png')) mailimage.draw_xz(g_cam1, os.path.abspath(STORAGE_DIR+surgeon+'/coordinate_xz.png')) else: g_cam1=sync_coord_sub(df_1, conf['cam1']) g_cam1['cam'] = 1 g_cam1.to_csv(os.path.abspath(STORAGE_DIR+surgeon+'/cam1_coord.csv'),index=False) mailimage.draw_plot_cam_1(g_cam1, os.path.abspath(STORAGE_DIR+surgeon+'/cam1_coord.png')) mailimage.draw_xy(g_cam1, os.path.abspath(STORAGE_DIR+surgeon+'/cam1_coord_xy.png')) mailimage.draw_yz(g_cam1, os.path.abspath(STORAGE_DIR+surgeon+'/cam1_coord_yz.png')) mailimage.draw_xz(g_cam1, os.path.abspath(STORAGE_DIR+surgeon+'/cam1_coord_xz.png')) if 'cam2.csv' not in surgeondatalist: g_cam1 = g_cam1.drop_duplicates(['frame'], keep='first') g_cam1.to_csv(os.path.abspath(STORAGE_DIR+surgeon+'/coordinate.csv'),index=False) g_cam1.to_csv(os.path.abspath(STORAGE_DIR+surgeon+'/coordinate_summary.csv'),index=False) mailimage.draw_plot_total(g_cam1, os.path.abspath(STORAGE_DIR+surgeon+'/coordinate.png')) mailimage.draw_xy(g_cam1, os.path.abspath(STORAGE_DIR+surgeon+'/coordinate_xy.png')) mailimage.draw_yz(g_cam1, os.path.abspath(STORAGE_DIR+surgeon+'/coordinate_yz.png')) mailimage.draw_xz(g_cam1, os.path.abspath(STORAGE_DIR+surgeon+'/coordinate_xz.png')) if 'cam2.csv' in surgeondatalist: df_2 = pd.read_csv(os.path.abspath(STORAGE_DIR+surgeon+'/cam2.csv')) if conf['mainCam'] == conf['cam2']['SN']: g_cam2 = sync_coord_main(df_2, conf['cam2']) g_cam2['cam'] = 2 g_cam2.to_csv(os.path.abspath(STORAGE_DIR+surgeon+'/cam2_coord.csv'),index=False) mailimage.draw_plot_cam_2(g_cam2, os.path.abspath(STORAGE_DIR+surgeon+'/cam2_coord.png')) mailimage.draw_xy(g_cam2, os.path.abspath(STORAGE_DIR+surgeon+'/cam2_coord_xy.png')) mailimage.draw_yz(g_cam2, os.path.abspath(STORAGE_DIR+surgeon+'/cam2_coord_yz.png')) mailimage.draw_xz(g_cam2, os.path.abspath(STORAGE_DIR+surgeon+'/cam2_coord_xz.png')) g_coor = pd.concat([g_cam1,g_cam2]) g_coor = g_coor.drop_duplicates(['frame'], keep='first') g_coor = g_coor.sort_values('frame') g_coor.to_csv(os.path.abspath(STORAGE_DIR+surgeon+'/coordinate.csv'),index=False) g_coor.to_csv(os.path.abspath(STORAGE_DIR+surgeon+'/coordinate_summary.csv'),index=False) mailimage.draw_plot_total(g_coor, os.path.abspath(STORAGE_DIR+surgeon+'/coordinate.png')) mailimage.draw_xy(g_coor, os.path.abspath(STORAGE_DIR+surgeon+'/coordinate_xy.png')) mailimage.draw_yz(g_coor, os.path.abspath(STORAGE_DIR+surgeon+'/coordinate_yz.png')) mailimage.draw_xz(g_coor, os.path.abspath(STORAGE_DIR+surgeon+'/coordinate_xz.png')) else: g_cam2 = sync_coord_sub(df_2, conf['cam2']) g_cam2['cam'] = 2 g_cam2.to_csv(os.path.abspath(STORAGE_DIR+surgeon+'/cam2_coord.csv'),index=False) mailimage.draw_plot_cam_2(g_cam2, os.path.abspath(STORAGE_DIR+surgeon+'/cam2_coord.png')) mailimage.draw_xy(g_cam2, os.path.abspath(STORAGE_DIR+surgeon+'/cam2_coord_xy.png')) mailimage.draw_yz(g_cam2, os.path.abspath(STORAGE_DIR+surgeon+'/cam2_coord_yz.png')) mailimage.draw_xz(g_cam2, os.path.abspath(STORAGE_DIR+surgeon+'/cam2_coord_xz.png')) g_coor = pd.concat([g_cam1,g_cam2]) g_coor = g_coor.drop_duplicates(['frame'], keep='first') g_coor = g_coor.sort_values('frame') g_coor.to_csv(os.path.abspath(STORAGE_DIR+surgeon+'/coordinate.csv'),index=False) g_coor.to_csv(os.path.abspath(STORAGE_DIR+surgeon+'/coordinate_summary.csv'),index=False) mailimage.draw_plot_total(g_coor, os.path.abspath(STORAGE_DIR+surgeon+'/coordinate.png')) mailimage.draw_xy(g_coor, os.path.abspath(STORAGE_DIR+surgeon+'/coordinate_xy.png')) mailimage.draw_yz(g_coor, os.path.abspath(STORAGE_DIR+surgeon+'/coordinate_yz.png')) mailimage.draw_xz(g_coor, os.path.abspath(STORAGE_DIR+surgeon+'/coordinate_xz.png')) #difference of difference df_kpi = mailkpi.dist(os.path.abspath(STORAGE_DIR+surgeon+'/coordinate.csv')) mailkpi.put_kpi_to_db(df_kpi) df_kpi = pd.DataFrame([df_kpi]) diff = pd.read_csv(os.path.abspath(STORAGE_DIR+surgeon+'/diff.csv')) mailimage.draw_diff_diff(diff,os.path.abspath(STORAGE_DIR+surgeon+'/diff.png')) df_kpi.to_csv(os.path.abspath(STORAGE_DIR+surgeon+'/kpi.csv'), index=False) #subprocess ftp def main(): while True: loop_sync() time.sleep(15) if __name__ == "__main__": main()