-
Notifications
You must be signed in to change notification settings - Fork 0
/
get_meta_by.py
104 lines (82 loc) · 4.07 KB
/
get_meta_by.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
"""
From the original EgoHands code from Indiana University-
get_meta_by Returns EgoHands video metadata structures for videos which
match the argument filters. For a description of the metadata structure
see buildMetadata help.
C = get_meta_by() returns metadata for all videos.
C = get_meta_by(FilterName, Value, ...) returns metadat for all videos
matching the filters. Possible filters and values are listed below:
Filter Possible Values Info
---------- -------------------- ------------------------
'Location' 'OFFICE','COURTYARD', Video background location
'LIVINGROOM'
'Activity' 'CHESS','JENGA', Activity in video
'PUZZLE','CARDS'
'Viewer' 'B','S','T','H' Identity of egocentric viewer
'Partner' 'B','S','T','H' Identity of egocentric partner
Multiple filters and values can be mixed, for example:
get_meta_by('Location','OFFICE, COURTYARD', 'Activity','CHESS', 'Viewer', 'B,S,T')
would return all videos of Chess played with B,S, or T as the egocentric
observer filmed at the Office or Courtyard locations.
"""
import scipy.io as sio
import pandas as pd
def get_meta_by(*args):
"""
:param location: OFFICE, COURTYARD, LIVINGROOM
:param activity: CHESS, JENGA, PUZZLE, CARDS
:param viewer: B, S, T, H
:param partner: B, S, T, H
:param main_split: TRAIN, TEST, VALID
:return: A list of queried video data by input parameters:
location, activity, viewer, partner, main_split
"""
location_params = 'OFFICE, COURTYARD, LIVINGROOM'
viewer_params = 'B, S, T, H'
partner_params = 'B, S, T, H'
activity_params = 'CHESS, JENGA, PUZZLE, CARDS'
## assigning from arguments given
for arg in args:
if arg == "Location":
parameter_check = "Location"
elif parameter_check == "Location":
location_params = arg
parameter_check = 'n/a'
if arg == "Activity":
parameter_check = "Activity"
elif parameter_check == "Activity":
activity_params = arg
parameter_check = 'n/a'
if arg == "Viewer":
parameter_check = "Viewer"
elif parameter_check == "Viewer":
viewer_params = arg
parameter_check = 'n/a'
if arg == "Partner":
parameter_check = "Partner"
elif parameter_check == "Partner":
partner_params = arg
parameter_check = 'n/a'
# splitting each input variable so we can check multiple conditions
location = location_params.split(", ")
activity = activity_params.split(", ")
viewer = viewer_params.split(", ")
partner = partner_params.split(", ")
# loading metadata.mat
meta_contents = sio.loadmat('./metadata.mat')
annotations = meta_contents['video'][0]
annotations_df = pd.DataFrame(annotations, columns=['video_id', 'partner_video_id',
'ego_viewer_id', 'partner_id',
'location_id', 'activity_id',
'labelled_frames'])
# data cleaning operation. when we load the np array -> pandas df object,
# single entries are actually list-type of length 1
annotations_df['ego_viewer_id'] = annotations_df['ego_viewer_id'].apply(lambda x: x[0])
queried_activities = annotations_df.loc[annotations_df['ego_viewer_id'].isin(viewer)]
annotations_df['partner_id'] = annotations_df['partner_id'].apply(lambda x: x[0])
queried_activities = queried_activities.loc[annotations_df['partner_id'].isin(partner)]
annotations_df['location_id'] = annotations_df['location_id'].apply(lambda x: x[0])
queried_activities = queried_activities.loc[annotations_df['location_id'].isin(location)]
annotations_df['activity_id'] = annotations_df['activity_id'].apply(lambda x: x[0])
queried_activities = queried_activities.loc[annotations_df['activity_id'].isin(activity)]
return queried_activities