ソースを参照

create script for each procedure

V1.2
Jeong Geol Kim 3年前
コミット
ab499e3b5f
3個のファイルの変更162行の追加22行の削除
  1. 70
    0
      script/createfulltrace.py
  2. 35
    22
      script/createhandletrace.py
  3. 57
    0
      script/createinterpolation.py

+ 70
- 0
script/createfulltrace.py ファイルの表示

@@ -0,0 +1,70 @@
1
+import os,sys
2
+sys.path.append('.')
3
+import modules.coordsi as csi
4
+import modules.wavacc as wav
5
+import numpy as np
6
+import pandas as pd
7
+import scipy as sp
8
+import csv
9
+
10
+def main(input):
11
+    if len(input) != 2:
12
+        print('Usage: python3 ./scripts/createkpi.py <parent path of interpolation csv>')
13
+        sys.exit(1)
14
+    root = input[1]
15
+    handledir = './handletrace/'
16
+    if not os.path.exists('./fulltrace'):
17
+        try:
18
+            os.makedirs('./fulltrace')
19
+        except Exception as e:
20
+            print(e)
21
+    listdir = os.listdir(root)
22
+    for index in listdir:
23
+        try:
24
+            filepath = os.path.join(root, index)
25
+            print(filepath)
26
+            filename = os.path.join(index)
27
+            original_wave=[]
28
+            with open(filepath, 'r') as f:
29
+                reader = csv.reader(f)
30
+                for row in reader:
31
+                    original_wave = row
32
+            for x in range(0, len(original_wave)):
33
+                original_wave[x] = float(original_wave[x])
34
+            stroke = []
35
+            threshold = 0.15
36
+            s_start = 0
37
+            s_end = 0
38
+            for i in range(1, len(original_wave)-1):
39
+               if original_wave[i] < -threshold and original_wave[i+1] > threshold:
40
+                   s_start = i
41
+               elif original_wave[i] > threshold and original_wave[i+1] < -threshold:
42
+                   if s_start != 0:
43
+                       s_end = i
44
+               if s_start != 0 and s_end != 0:
45
+                   stroke.append([s_start, s_end])
46
+                   s_start = 0
47
+                   s_end = 0
48
+            df = pd.read_csv(os.path.join('./handletrace/', filename))
49
+            df['status'] = 'idle'
50
+
51
+            for i in stroke:
52
+                #set df['status'] == 'in' when sroke[i][0] is same as index of df.
53
+                df.loc[i[0]:i[0], 'status'] = 'in'
54
+                ##set df['status'] == 'out' when sroke[i][1] is same as index of df.
55
+                df.loc[i[1]:i[1], 'status'] = 'out'
56
+                for frame in range(i[0]+1, i[1]):
57
+                    df.loc[frame:frame, 'status'] = 'suction'
58
+            df.to_csv(os.path.join('./fulltrace/', index), index=False)
59
+        except Exception as e:
60
+            print(e)
61
+            continue
62
+
63
+
64
+
65
+if __name__ == '__main__':
66
+    try:
67
+        main(sys.argv)
68
+    except Exception as e:
69
+        print(e)
70
+        sys.exit(1)

+ 35
- 22
script/createhandletrace.py ファイルの表示

@@ -1,33 +1,46 @@
1 1
 import os, sys
2 2
 import pandas as pd
3
-import numpy as np
4
-sys.path.append('..')
3
+sys.path.append('.')
5 4
 import modules.coordsi as csi
6 5
 import math
7 6
 import time
8 7
 
9
-# initialize root path
10
-root = './List_Data_Call/'
8
+def main(input):
9
+    if len(input) != 2:
10
+        print('Usage: python3 ./scripts/createhandletrace.py <parent path of surgery ID> ')
11
+        sys.exit(1)
12
+    root = input[1]
13
+    summary_1 = csi.summaryOriginCoord(root, camid=1)
11 14
 
12
-summary_1 = csi.summaryOriginCoord(root, camid=1)
15
+    if not os.path.exists('./handletrace'):
16
+        try:
17
+            os.makedirs('./handletrace')
18
+        except Exception as e:
19
+            print(e)
20
+    #make a loop for each index
21
+    for index, row in summary_1.iterrows():
22
+        timestamp = []
23
+        start_time = time.time()
24
+        df = csi.readCam(os.path.join(index,'cam1.csv'))
25
+        df = csi.convertToSI(df, 3.5, 1.5, 3.4)
26
+        df = csi.getVelocity(df)
27
+        df = csi.getAcceleration(df)
28
+        df = csi.getFullTrace(df,row['approx_total_frame'] )
29
+        df = csi.addValidDetection(df, 25.0)
30
+        try:
31
+            df.to_csv(os.path.join('./handletrace/', index[17:]+'.csv'), index=False)
32
+        #save spend time and index of summary_1 in timestamp list    
33
+            timestamp.append([index, time.time() - start_time])
34
+            print([index, time.time() - start_time])
35
+        except Exception as e:
36
+            print(e)
37
+            continue
38
+    #save timestamp list to csv file
39
+    pd.DataFrame(timestamp, columns=['index', 'time']).to_csv('./handletrace/timestamp.csv', index=False)
13 40
 
14
-#make a loop for each index
15
-for index, row in summary_1.iterrows():
16
-    timestamp = []
17
-    start_time = time.time()
18
-    df = csi.readCam(os.path.join(index,'cam1.csv'))
19
-    df = csi.convertToSI(df, 3.5, 1.5, 3.4)
20
-    df = csi.getVelocity(df)
21
-    df = csi.getAcceleration(df)
22
-    df = csi.getFullTrace(df,row['approx_total_frame'] )
23
-    df = csi.addValidDetection(df, 25.0)
41
+if __name__ == '__main__':
24 42
     try:
25
-        df.to_csv(os.path.join('./handletrace/', index[17:]+'.csv'), index=False)
26
-    #save spend time and index of summary_1 in timestamp list    
27
-        timestamp.append([index, time.time() - start_time])
28
-        print([index, time.time() - start_time])
43
+        main(sys.argv)
29 44
     except Exception as e:
30 45
         print(e)
31
-        continue
32
-#save timestamp list to csv file
33
-pd.DataFrame(timestamp, columns=['index', 'time']).to_csv('./handletrace/timestamp.csv', index=False)
46
+        sys.exit(1)

+ 57
- 0
script/createinterpolation.py ファイルの表示

@@ -0,0 +1,57 @@
1
+import os,sys
2
+sys.path.append('.')
3
+import modules.coordsi as csi
4
+import modules.wavacc as wav
5
+import numpy as np
6
+import pandas as pd
7
+import scipy as sp
8
+import csv
9
+
10
+def main(input):
11
+    if len(input) != 2:
12
+        print('Usage: python3 ./scripts/createinterpolation.py <path of handletrace dir> ')
13
+        sys.exit(1)
14
+    root = input[1]
15
+    if not os.path.exists('./interpolation'):
16
+        try:
17
+            os.makedirs('./interpolation')
18
+        except Exception as e:
19
+            print(e)
20
+    listdir = os.listdir(root)
21
+
22
+    for index in listdir:
23
+        try:
24
+            df = wav.openDataframe(os.path.join(root, index))
25
+            frame = list(df.index.values)
26
+            acc = pd.Series.tolist(df['acceleration'])
27
+            val = pd.Series.tolist(df['isValid'])
28
+            vel = pd.Series.tolist(df['velocity'])
29
+            merged = []
30
+            for i in range(0, len(val)):
31
+                merged.append([frame[i], val[i], acc[i]])
32
+            for i in range(0, len(merged)):
33
+                if merged[i][1] == 0 and merged[i][2] != 0:
34
+                    merged[i][2] = 0
35
+            valid_frame = []
36
+            vaild_dot = []
37
+            for i in range(0, len(merged)):
38
+                if merged[i][1] == 1:
39
+                    valid_frame.append(merged[i][0])
40
+                    vaild_dot.append(merged[i][2])
41
+            cubic_interpolation = sp.interpolate.interp1d(frame, acc, kind='cubic')
42
+            cubic_interpolation = cubic_interpolation(frame)            
43
+            with open(os.path.join('./interpolation', index), 'w') as f:
44
+                #save cubic interpolation only
45
+                writer = csv.writer(f)
46
+                writer.writerow(cubic_interpolation)
47
+        except Exception as e:
48
+            print(e)
49
+            continue
50
+
51
+
52
+if __name__ == '__main__':
53
+    try:
54
+        main(sys.argv)
55
+    except Exception as e:
56
+        print(e)
57
+        sys.exit(1)

読み込み中…
キャンセル
保存