-
Notifications
You must be signed in to change notification settings - Fork 1
/
actionDirectoryCreator.py
133 lines (123 loc) · 4.33 KB
/
actionDirectoryCreator.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
from os import walk
import xml.etree.ElementTree as ET
import json
import skeleton_extractor as extractor
def mov_to_scenario(mov_name):
dictionary = {
'TennisServe': 'Tennis',
'Clap': 'Misc',
'KickRight': 'Fighting',
'KickLeft': 'Fighting',
'ThrowBowlingBall': 'Bowling',
'Run': 'FPS',
'Jump': 'FPS',
'TennisSwingBackhand': 'Tennis',
'PunchLeft': 'Fighting',
'SteerRight': 'Driving',
'TennisSwingForehand': 'Tennis',
'Crouch': 'FPS',
'Walk': 'FPS',
'Flap': 'Misc',
'AimAndFireGun': 'FPS',
'GolfSwing': 'Golf',
'SteerCentre': 'Driving',
'SteerLeft': 'Driving',
'Defend': 'Fighting',
'Climb': 'FPS',
'Wave': 'Misc',
'PunchRight': 'Fighting'
}
if mov_name in dictionary:
return dictionary[mov_name]
else:
print('Unexpected value in mov_to_scenario')
return ''
def folder_to_actor(folder_number):
if folder_number <=42:
return 1
if folder_number <=63:
return 2
if folder_number <=84:
return 3
if folder_number <=105:
return 4
if folder_number <=126:
return 5
if folder_number <=147:
return 6
if folder_number <=168:
return 7
if folder_number <=189:
return 8
if folder_number <=210:
return 9
if folder_number <=234:
return 10
print('Unexpected Folder: '+folder_number)
def get_breaks(folder_id, last_frame):
break_actions = []
for item in action_list:
actor = item[1]
if item[0] == folder_id:
break_actions.append(item)
breaks = []
for index, act in enumerate(break_actions):
folder,actor,mov_name,frame=(act[0],act[1],act[2],act[3])
if index < (len(break_actions) - 1):
next_frame = break_actions[index+1][3]-1
else:
next_frame = last_frame
breaks.append((mov_name,frame,next_frame))
return actor, breaks
action_list = []
action_points_folder = 'dataset/ActionPoints'
for (directory_path, directory_names, filenames) in walk(action_points_folder):
for filename in filenames:
tree = ET.parse(f'{action_points_folder}/{filename}')
root = tree.getroot()
if len(root) > 0:
for action_point in root:
action = action_point[0].text
frame_start = action_point[1].text
action_list.append((int(filename[12:][:-4]),folder_to_actor(int(filename[12:][:-4])), action, int(frame_start)))
else:
f'ActionPoints/{filename} is empty'
def sorting(obj):
return obj[0]
action_list.sort(key=sorting)
folders = set()
for action_point in action_list:
folders.add((action_point[0],mov_to_scenario(action_point[2])))
folders = list(folders)
last_frames = {}
movement_id = 0
folders_processed = 0
for folder,scene in folders:
frames_directory = f'dataset/{scene}/KinectOutput{folder}/Skeleton'
frame_ids = []
frames = {}
for (dirpath, dirnames, filenames) in walk(frames_directory):
for filename in filenames:
frame_id = int(filename[9:-4])
frame_ids.append(frame_id)
frames[frame_id] = extractor.extract_skeleton(f'{frames_directory}/{filename}')
last_frames[folder]=max(frame_ids)
actor, breaks = get_breaks(folder,last_frames[folder])
#print(folder,actor,breaks)
folders_processed=folders_processed+1
print(f'folders_saved: {folders_processed}')
for movement_name, start, stop in breaks:
movement = []
for frame_id in range(start, stop-1):
if frame_id in frames:
movement.append(frames[frame_id])
with open(f'json_frames/{actor}/{movement_name}/{movement_id}.json', "w") as write_file:
movement_id = movement_id + 1
json.dump(movement, write_file)
#print('saved a movement: ',folder,actor,start,stop,stop-start,len(movement),'frames')
testing = False
if testing:
with open("skeletons.json", "w") as write_file:
json.dump([frames[frame_id] for frame_id in range(min(frame_ids)+1,max(frame_ids))], write_file)
print('saved all movements on skeletons')
break