def to_descfile(self): df = DescFile() df.data = [] for i, f in enumerate(self.frames): lines = [[i+self.first_frame]+p for p in f] df.data += lines self.headers['type'] = 'PointsFile v.1.0' self.headers['width'] = str(self.width) self.headers['height'] = str(self.height) self.headers['uid'] = str(self.uid) df.headers = OrderedDict(self.headers) df.tags = ['f']+copy.copy(self.tags) return df
def from_string(points_desc_str=""): self = PointsDesc() df = DescFile.from_string(points_desc_str) assert( df.headers["type"] == "PointsFile v.1.0" ) assert( "width" in df.headers and "height" in df.headers ) self.headers = OrderedDict(df.headers) self.tags = copy.copy(df.tags)[1:] self.width = int(df.headers["width"]) self.height = int(df.headers["height"]) self.uid = int(df.headers["uid"]) first_frame = None last_frame = None frames = [] if len(df.data) > 0: nfields = len(df.data[0]) assert( nfields >= 3 ) self.nfields = nfields for entry in df.data: f = entry[0] if abs( f - int(f)) > 0.01: raise Exception("Error: first entry should be a frame number!") f = int(f) if first_frame == None or f < first_frame: first_frame = f if last_frame == None or f > last_frame: last_frame = f frames = [ [] for k in range(last_frame-first_frame+1) ] for entry in df.data: f = int(entry[0])-first_frame frames[f].append(entry[1:]) self.first_frame = first_frame self.frames = frames return self