import os import time import math import sys import numpy as np from numpy.lib.function_base import append import pandas as pd from pandas import DataFrame as df from sklearn.cluster import DBSCAN import pymssql #import matplotlib.pyplot as plt #ssd_dir = str(sys.argv[1]) #file_path = '/hdd/' + ssd_dir[5:] def put_kpi_to_db(kpi): try: conn = pymssql.connect(server='52.231.39.219',port=1433, user='mc365', password='tkadbrdhmc1!', database='master') #print("INSERT INTO tsfmc_mailsystem.dbo.KPI(surgeryID, totalStrokeCount, totalStrokeVelocity, totalStrokeDepth, upDownTotalStrokeCount, upDownTotalStrokeVelocity, upDownTotalStrokeDepth, leftRightTotalStrokeCount, leftRightTotalStrokeVelocity, leftRightTotalStrokeDepth, quadrant1TotalStrokeCount, quadrant1TotalStrokeVelocity, quadrant1TotalStrokeDepth, quadrant2TotalStrokeCount, quadrant2TotalStrokeVelocity, quadrant2TotalStrokeDepth, quadrant3TotalStrokeCount, quadrant3TotalStrokeVelocity, quadrant3TotalStrokeDepth, quadrant4TotalStrokeCount, quadrant4TotalStrokeVelocity, quadrant4TotalStrokeDepth) VALUES (" + str(kpi[0]) + ", "+str(kpi[1])+", "+str(kpi[2])+", "+str(kpi[3])+", "+str(kpi[4])+", "+str(kpi[5])+", "+str(kpi[6])+", "+str(kpi[7])+", "+str(kpi[8])+", "+str(kpi[9])+", "+str(kpi[10])+", "+str(kpi[11])+", "+str(kpi[12])+", "+str(kpi[13])+", "+str(kpi[14])+", "+str(kpi[15])+", "+str(kpi[16])+", "+str(kpi[17])+", "+str(kpi[18])+", "+str(kpi[19])+", "+str(kpi[20])+", "+str(kpi[21])+")") #print("INSERT INTO tsfmc_mailsystem.dbo.KPI(surgeryID, totalStrokeCount, totalStrokeVelocity, totalStrokeDepth, upDownTotalStrokeCount, upDownTotalStrokeVelocity, upDownTotalStrokeDepth, leftRightTotalStrokeCount, leftRightTotalStrokeVelocity, leftRightTotalStrokeDepth, quadrant1TotalStrokeCount, quadrant1TotalStrokeVelocity, quadrant1TotalStrokeDepth, quadrant2TotalStrokeCount, quadrant2TotalStrokeVelocity, quadrant2TotalStrokeDepth, quadrant3TotalStrokeCount, quadrant3TotalStrokeVelocity, quadrant3TotalStrokeDepth, quadrant4TotalStrokeCount, quadrant4TotalStrokeVelocity, quadrant4TotalStrokeDepth) VALUES ( '" + str(kpi[0]) + "', '"+str(kpi[1])+"', '"+str(kpi[2])+"', '"+str(kpi[3])+"', '"+str(kpi[4])+"', '"+str(kpi[5])+"', '"+str(kpi[6])+"', '"+str(kpi[7])+"', '"+str(kpi[8])+"', '"+str(kpi[9])+"', '"+str(kpi[10])+"', '"+str(kpi[11])+"', '"+str(kpi[12])+"', '"+str(kpi[13])+"', '"+str(kpi[14])+"', '"+str(kpi[15])+"', '"+str(kpi[16])+"', '"+str(kpi[17])+"', '"+str(kpi[18])+"', '"+str(kpi[19])+"', '"+str(kpi[20])+"', '"+str(kpi[21])+"')") cursor = conn.cursor() cursor.execute("INSERT INTO tsfmc_mailsystem.dbo.KPI(surgeryID, totalStrokeCount, totalStrokeVelocity, totalStrokeDepth, upDownTotalStrokeCount, upDownTotalStrokeVelocity, upDownTotalStrokeDepth, leftRightTotalStrokeCount, leftRightTotalStrokeVelocity, leftRightTotalStrokeDepth, quadrant1TotalStrokeCount, quadrant1TotalStrokeVelocity, quadrant1TotalStrokeDepth, quadrant2TotalStrokeCount, quadrant2TotalStrokeVelocity, quadrant2TotalStrokeDepth, quadrant3TotalStrokeCount, quadrant3TotalStrokeVelocity, quadrant3TotalStrokeDepth, quadrant4TotalStrokeCount, quadrant4TotalStrokeVelocity, quadrant4TotalStrokeDepth) VALUES ( '" + str(kpi[0]) + "', '"+str(kpi[1])+"', '"+str(kpi[2])+"', '"+str(kpi[3])+"', '"+str(kpi[4])+"', '"+str(kpi[5])+"', '"+str(kpi[6])+"', '"+str(kpi[7])+"', '"+str(kpi[8])+"', '"+str(kpi[9])+"', '"+str(kpi[10])+"', '"+str(kpi[11])+"', '"+str(kpi[12])+"', '"+str(kpi[13])+"', '"+str(kpi[14])+"', '"+str(kpi[15])+"', '"+str(kpi[16])+"', '"+str(kpi[17])+"', '"+str(kpi[18])+"', '"+str(kpi[19])+"', '"+str(kpi[20])+"', '"+str(kpi[21])+"')") conn.commit() conn.close() except: pass def get_quad(df): if df['x'] >= 0 and df['y'] >= 0: return 1 elif df['x'] >= 0 and df['y'] < 0: return 2 elif df['x'] < 0 and df['y'] < 0: return 3 elif df['x'] < 0 and df['y'] >= 0: return 4 def get_inc_num(df): count = 1 prev_count = 0 if abs(df['diff_diff']) > 0.0008: prev_count = df['inc_num'] df['inc_num'] = count #print(prev_count) return count else: if prev_count != 0: count += 1 df['inc_num'] = 0 prev_count = df['inc_num'] return 0 else: df['inc_num'] = 0 prev_count = df['inc_num'] return 0 def count_inc(df): e= 0 count = 1 prev_count = 0 for x in df['diff_diff']: if abs(x) > 0.05: df['inc_num'][e] = count prev_count = count e +=1 else: if prev_count != 0: count += 1 df['inc_num'][e] = 0 prev_count = 0 e +=1 else: df['inc_num'][e] = 0 prev_count = 0 e +=1 def stroke_count(df): e = 0 count = 1 for x in df['diff_diff']: if x > 0.03: df['stroke_count'][e] = count e +=1 else: df['stroke_count'][e] = 0 e+=1 def get_sqrt(df): prev_x = 0.0 prev_y = 0.0 prev_z = 0.0 for index, row in df.iterrows(): df['sqrt'][index] = np.sqrt((df['x'][index] - prev_x) **2 + (df['y'][index] - prev_y) ** 2 +(df['z'][index] - prev_z) ** 2) prev_x = df['x'][index] prev_y = df['y'][index] prev_z = df['z'][index] df['sqrt'][0] = 0.0 def dist(filepath): file = filepath surgeon_dir = file.split('/') #print(surgeon_dir) #filepath_slice = file.slice('/') norm = pd.read_csv(file) #print(norm) #norm = norm.drop(norm.columns[0], axis=1) #norm = norm.fillna(0) data = norm[['x', 'y', 'z']] norm['sqrt'] = 0.0 get_sqrt(norm) #norm = norm.apply(lambda x:np.sqrt(x) if x.name in ['sqrt'] else x, axis =1) norm['diff'] = norm.diff()['sqrt'] norm['diff_diff'] = norm.diff()['diff'] norm['quad'] = norm.apply(get_quad, axis =1) norm = norm.fillna(0) norm['inc_num'] = 0 #norm['inc_num'] = norm.apply(get_inc_num, axis = 1) count_inc(norm) norm['stroke_count'] = 0 stroke_count(norm) #print('num of inc') #print(norm['inc_num'].unique()) #print('total stroke') #print(norm['stroke_count'].unique()) #print(norm) diff_csv = norm[['frame','diff_diff']] norm.to_csv(os.path.join(file[:-14]+ 'norm.csv'), index=False) diff_csv.to_csv(os.path.join(file[:-14]+ 'diff.csv')) #plt.plot(norm['frame'],norm['diff_diff']) #plt.savefig('./diff_diff.png') kpi = pd.DataFrame(index=range(0,1)) quad_count = norm[norm['stroke_count'] != 0] quad1_c = quad_count[quad_count['quad'] == 1] quad2_c = quad_count[quad_count['quad'] == 2] quad3_c = quad_count[quad_count['quad'] == 3] quad4_c = quad_count[quad_count['quad'] == 4] #print(len(quad1_c)) #print(len(quad2_c)) #print(len(quad3_c)) #print(len(quad4_c)) #print(quad1_c) kpi['PK'] = surgeon_dir[2] kpi['qaud1_c'] = len(quad1_c) kpi['qaud2_c'] = len(quad2_c) kpi['qaud3_c'] = len(quad3_c) kpi['qaud4_c'] = len(quad4_c) #FIXME: this values are huristic value. please change this values after research kpi['qaud1_s'] = quad1_c['sqrt'].mean() / 30 kpi['qaud2_s'] = quad2_c['sqrt'].mean() / 30 kpi['qaud3_s'] = quad3_c['sqrt'].mean() / 30 kpi['qaud4_s'] = quad4_c['sqrt'].mean() / 30 kpi['qaud1_d'] = quad1_c['sqrt'].mean() / 45 kpi['qaud2_d'] = quad2_c['sqrt'].mean() / 45 kpi['qaud3_d'] = quad3_c['sqrt'].mean() / 45 kpi['qaud4_d'] = quad4_c['sqrt'].mean() / 45 kpi = kpi.fillna(0) kpi_1 = { "stroke": [len(quad1_c),len(quad2_c),len(quad3_c),len(quad4_c)], "velocity": [quad1_c['sqrt'].mean() / 30, quad2_c['sqrt'].mean() / 30, quad3_c['sqrt'].mean() / 30, quad4_c['sqrt'].mean() / 30], "depth": [quad1_c['sqrt'].mean() / 45, quad2_c['sqrt'].mean() / 45, quad3_c['sqrt'].mean() / 45, quad4_c['sqrt'].mean() / 45] } #print(kpi) val_list = [] #PK = val_list.append(str(surgeon_dir[2])) #t_stroke = val_list.append(sum(kpi_1['stroke'])) #t_vel val_list.append("{:.4f}".format(sum(kpi_1['velocity'])/4)) #t_dep val_list.append("{:.4f}".format(sum(kpi_1['depth'])/4)) #ud_s_rate = 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)) #ud_v_rate = val_list.append("{:.4f}".format((kpi_1['velocity'][0] + kpi_1['velocity'][3] - kpi_1['velocity'][1] - kpi_1['velocity'][2])/2)) #ud_d_rate = val_list.append("{:.4f}".format((kpi_1['depth'][0] + kpi_1['depth'][3] - kpi_1['depth'][1] - kpi_1['depth'][2])/2)) #lr_s_rate = 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)) #lr_v_rate = val_list.append("{:.4f}".format((kpi_1['velocity'][2] + kpi_1['velocity'][3] - kpi_1['velocity'][0] - kpi_1['velocity'][1])/2)) #lr_d_rate = val_list.append("{:.4f}".format((kpi_1['depth'][2] + kpi_1['depth'][3] - kpi_1['depth'][0] - kpi_1['depth'][1])/2)) #q1 s, v, d val_list.append(str(len(quad1_c))) val_list.append(str(quad1_c['sqrt'].mean() / 30)) val_list.append(str(quad1_c['sqrt'].mean() / 45)) val_list.append(str(len(quad2_c))) val_list.append(str(quad2_c['sqrt'].mean() / 30)) val_list.append(str(quad2_c['sqrt'].mean() / 45)) val_list.append(str(len(quad3_c))) val_list.append(str(quad3_c['sqrt'].mean() / 30)) val_list.append(str(quad3_c['sqrt'].mean() / 45)) val_list.append(str(len(quad4_c))) val_list.append(str(quad4_c['sqrt'].mean() / 30)) val_list.append(str(quad4_c['sqrt'].mean() / 45)) #print(val_list) for x in range(0,len(val_list)): if val_list[x] == 'nan': val_list[x] = 0 #print(val_list) return val_list #print(val_list) def main(): kpi = dist() #kpi_csv = pd.DataFrame([kpi]) #kpi_csv = kpi_csv.fillna(0) #kpi_csv.to_csv(os.path.join(file[:-14],'kpi.csv')) #put_kpi_to_db(kpi_csv) if __name__ == "__main__": main()