-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsequence_helper.py
46 lines (38 loc) · 1.37 KB
/
sequence_helper.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
import pandas as pd
def load_motchallenge(fname, **kwargs):
sep = kwargs.pop('sep', r'\s+|\t+|,')
min_confidence = kwargs.pop('min_confidence', -1)
df = pd.read_csv(
fname,
sep=sep,
index_col=[0, 1],
skipinitialspace=True,
header=None,
names=['FrameId', 'Id', 'X', 'Y', 'Width', 'Height', 'Confidence', 'ClassId', 'Visibility', 'unused'],
engine='python'
)
del df['unused']
return df[df['Confidence'] >= min_confidence]
class SequenceIterator:
def __init__(self, dataset):
self.dataset = dataset
self.index = 1
self.current_sequence_name = None
def __iter__(self):
self.index = 1
img, _, info_imgs, ids = self.dataset[self.index]
self.current_sequence_name = info_imgs[-1].split('/')[0]
return self
def sequence_iterator(self):
for i in range(self.index, len(self.dataset)):
img, _, info_imgs, ids = self.dataset[self.index]
sequence_name = info_imgs[-1].split('/')[0]
if sequence_name != self.current_sequence_name:
self.current_sequence_name = sequence_name
break
yield self.dataset[self.index]
self.index += 1
def __next__(self):
if self.index > len(self.dataset):
raise StopIteration
return self.sequence_iterator