annotate python/ubc_utils.py @ 51:3aed17fc468d

utils to save object types
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Sat, 25 Sep 2010 11:38:42 -0400
parents 8aed225f71d8
children 441c8387f34f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
1 #! /usr/bin/env python
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
2 '''Various utilities to load data saved by the UBC tool(s)'''
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
3
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
4 import utils
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
5 from moving import MovingObject, TimeInterval, Trajectory
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
6
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
7 __metaclass__ = type
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
8
51
3aed17fc468d utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 48
diff changeset
9 userTypeNames = ['car',
3aed17fc468d utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 48
diff changeset
10 'pedestrian',
3aed17fc468d utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 48
diff changeset
11 'twowheels',
3aed17fc468d utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 48
diff changeset
12 'bus'
3aed17fc468d utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 48
diff changeset
13 'truck']
3aed17fc468d utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 48
diff changeset
14
47
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
15 def getFileType(s):
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
16 filePrefix = utils.removeExtension(s)
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
17 i = filePrefix.rfind('-')
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
18 if i>0:
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
19 return filePrefix[i+1:]
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
20 else:
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
21 return ''
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
22
48
8aed225f71d8 rearranged code for function readline and getlines (and characters), moved invertHomography to cvutils
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 47
diff changeset
23 def saveTrajectoryUserTypes(inFilename, outFilename, objects):
47
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
24 '''The program saves the objects,
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
25 by just copying the corresponding trajectory and velocity data
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
26 from the inFilename, and saving the characteristics in objects (first line)
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
27 into outFilename'''
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
28 infile = utils.openCheck(inFilename)
51
3aed17fc468d utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 48
diff changeset
29 outfile = utils.openCheck(outFilename,'w')
47
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
30
51
3aed17fc468d utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 48
diff changeset
31 if (inFilename.find('features') >= 0) or (not infile) or (not outfile):
47
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
32 return
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
33
48
8aed225f71d8 rearranged code for function readline and getlines (and characters), moved invertHomography to cvutils
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 47
diff changeset
34 lines = utils.getLines(infile)
47
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
35 objNum = 0
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
36 while lines != []:
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
37 i = 0
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
38 while (i<len(objects)) and (objects[i].num != objNum):
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
39 i+=1
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
40 if i<len(objects):
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
41 l = lines[0].split(' ')
51
3aed17fc468d utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 48
diff changeset
42 l[3] = str(objects[i].userType)
3aed17fc468d utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 48
diff changeset
43 outfile.write(' '.join(l)+'\n')
3aed17fc468d utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 48
diff changeset
44 for l in lines[1:]:
3aed17fc468d utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 48
diff changeset
45 outfile.write(l+'\n')
3aed17fc468d utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 48
diff changeset
46 outfile.write(utils.delimiterChar+'\n')
47
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
47 # next object
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
48 objNum += 1
48
8aed225f71d8 rearranged code for function readline and getlines (and characters), moved invertHomography to cvutils
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 47
diff changeset
49 lines = utils.getLines(infile)
47
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
50
51
3aed17fc468d utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 48
diff changeset
51 print('read {0} objects'.format(objNum))
3aed17fc468d utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 48
diff changeset
52
13
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
53 def loadTrajectories(filename, nObjects = -1):
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
54 '''Loads trajectories'''
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
55
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
56 file = utils.openCheck(filename)
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
57 if (not file):
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
58 return []
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
59
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
60 objects = []
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
61 objNum = 0
47
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
62 objectType = getFileType(filename)
48
8aed225f71d8 rearranged code for function readline and getlines (and characters), moved invertHomography to cvutils
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 47
diff changeset
63 lines = utils.getLines(file)
13
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
64 while (lines != []) and ((nObjects<0) or (objNum<nObjects)):
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
65 l = lines[0].split(' ')
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
66 parsedLine = [int(n) for n in l[:4]]
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
67 obj = MovingObject(num = objNum, timeInterval = TimeInterval(parsedLine[1],parsedLine[2]))
42
1a2ac2d4f53a added loading of the rest of the data for objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 25
diff changeset
68 #add = True
1a2ac2d4f53a added loading of the rest of the data for objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 25
diff changeset
69 if len(lines) >= 3:
43
6d11d9e7ad4e methods for trajectories and objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 42
diff changeset
70 obj.positions = Trajectory.load(lines[1], lines[2])
42
1a2ac2d4f53a added loading of the rest of the data for objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 25
diff changeset
71 if len(lines) >= 5:
43
6d11d9e7ad4e methods for trajectories and objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 42
diff changeset
72 obj.velocities = Trajectory.load(lines[3], lines[4])
47
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
73 if objectType == 'objects':
42
1a2ac2d4f53a added loading of the rest of the data for objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 25
diff changeset
74 obj.userType = parsedLine[3]
1a2ac2d4f53a added loading of the rest of the data for objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 25
diff changeset
75 obj.nObjects = float(l[4])
1a2ac2d4f53a added loading of the rest of the data for objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 25
diff changeset
76 obj.featureNumbers = [int(n) for n in l[5:]]
1a2ac2d4f53a added loading of the rest of the data for objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 25
diff changeset
77
1a2ac2d4f53a added loading of the rest of the data for objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 25
diff changeset
78 # load contour data if available
1a2ac2d4f53a added loading of the rest of the data for objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 25
diff changeset
79 if len(lines) >= 6:
1a2ac2d4f53a added loading of the rest of the data for objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 25
diff changeset
80 obj.contourType = utils.line2Floats(lines[6])
43
6d11d9e7ad4e methods for trajectories and objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 42
diff changeset
81 obj.contourOrigins = Trajectory.load(lines[7], lines[8])
6d11d9e7ad4e methods for trajectories and objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 42
diff changeset
82 obj.contourSizes = Trajectory.load(lines[9], lines[10])
47
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
83 elif objectType == 'prototypes':
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
84 obj.userType = parsedLine[3]
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
85 obj.nMatchings = int(l[4])
13
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
86
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
87 if len(lines) != 2:
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
88 objects.append(obj)
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
89 objNum+=1
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
90 else:
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
91 print("Error two lines of data for feature %d"%(f.num))
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
92
48
8aed225f71d8 rearranged code for function readline and getlines (and characters), moved invertHomography to cvutils
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 47
diff changeset
93 lines = utils.getLines(file)
13
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
94
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
95 file.close()
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
96 return objects
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
97
44
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
98 def loadCollisionPoints(filename, nPoints = -1):
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
99 '''Loads collision points and returns a dict
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
100 with keys as a pair of the numbers of the two interacting objects'''
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
101 file = utils.openCheck(filename)
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
102 if (not file):
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
103 return []
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
104
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
105 points = {}
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
106 num = 0
48
8aed225f71d8 rearranged code for function readline and getlines (and characters), moved invertHomography to cvutils
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 47
diff changeset
107 lines = utils.getLines(file)
44
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
108 while (lines != []) and ((nPoints<0) or (num<nPoints)):
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
109 parsedLine = [int(n) for n in lines[0].split(' ')]
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
110 protagonistNums = (parsedLine[0], parsedLine[1])
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
111 points[protagonistNums] = [[float(n) for n in lines[1].split(' ')],
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
112 [float(n) for n in lines[2].split(' ')]]
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
113
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
114 num+=1
48
8aed225f71d8 rearranged code for function readline and getlines (and characters), moved invertHomography to cvutils
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 47
diff changeset
115 lines = utils.getLines(file)
44
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
116
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
117 file.close()
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
118 return points