Mercurial Hosting > traffic-intelligence
annotate python/ubc_utils.py @ 52:441c8387f34f
changed type detection to load trajectories
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Tue, 12 Oct 2010 18:24:11 -0400 |
parents | 3aed17fc468d |
children | 0a5bdbf0d1b4 |
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 |
52
441c8387f34f
changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
51
diff
changeset
|
15 fileTypeNames = ['feature', |
441c8387f34f
changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
51
diff
changeset
|
16 'object', |
441c8387f34f
changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
51
diff
changeset
|
17 'prototype', |
441c8387f34f
changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
51
diff
changeset
|
18 'contoursequence'] |
441c8387f34f
changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
51
diff
changeset
|
19 |
47
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
20 def getFileType(s): |
52
441c8387f34f
changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
51
diff
changeset
|
21 'Finds the type in fileTypeNames' |
441c8387f34f
changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
51
diff
changeset
|
22 for fileType in fileTypeNames: |
441c8387f34f
changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
51
diff
changeset
|
23 if s.find(fileType)>0: |
441c8387f34f
changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
51
diff
changeset
|
24 return fileType |
441c8387f34f
changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
51
diff
changeset
|
25 return '' |
441c8387f34f
changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
51
diff
changeset
|
26 |
441c8387f34f
changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
51
diff
changeset
|
27 def isFileType(s, fileType): |
441c8387f34f
changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
51
diff
changeset
|
28 return (s.find(fileType)>0) |
47
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
29 |
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
|
30 def saveTrajectoryUserTypes(inFilename, outFilename, objects): |
47
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
31 '''The program saves the objects, |
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
32 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
|
33 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
|
34 into outFilename''' |
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
35 infile = utils.openCheck(inFilename) |
51
3aed17fc468d
utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
48
diff
changeset
|
36 outfile = utils.openCheck(outFilename,'w') |
47
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
37 |
51
3aed17fc468d
utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
48
diff
changeset
|
38 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
|
39 return |
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
40 |
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
|
41 lines = utils.getLines(infile) |
47
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
42 objNum = 0 |
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
43 while lines != []: |
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
44 i = 0 |
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
45 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
|
46 i+=1 |
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
47 if i<len(objects): |
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
48 l = lines[0].split(' ') |
51
3aed17fc468d
utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
48
diff
changeset
|
49 l[3] = str(objects[i].userType) |
3aed17fc468d
utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
48
diff
changeset
|
50 outfile.write(' '.join(l)+'\n') |
3aed17fc468d
utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
48
diff
changeset
|
51 for l in lines[1:]: |
3aed17fc468d
utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
48
diff
changeset
|
52 outfile.write(l+'\n') |
3aed17fc468d
utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
48
diff
changeset
|
53 outfile.write(utils.delimiterChar+'\n') |
47
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
54 # next object |
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
55 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
|
56 lines = utils.getLines(infile) |
47
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
57 |
51
3aed17fc468d
utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
48
diff
changeset
|
58 print('read {0} objects'.format(objNum)) |
3aed17fc468d
utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
48
diff
changeset
|
59 |
13
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
60 def loadTrajectories(filename, nObjects = -1): |
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
61 '''Loads trajectories''' |
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
62 |
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
63 file = utils.openCheck(filename) |
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
64 if (not file): |
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
65 return [] |
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
66 |
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
67 objects = [] |
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
68 objNum = 0 |
47
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
69 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
|
70 lines = utils.getLines(file) |
13
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
71 while (lines != []) and ((nObjects<0) or (objNum<nObjects)): |
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
72 l = lines[0].split(' ') |
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
73 parsedLine = [int(n) for n in l[:4]] |
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
74 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
|
75 #add = True |
1a2ac2d4f53a
added loading of the rest of the data for objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
25
diff
changeset
|
76 if len(lines) >= 3: |
43
6d11d9e7ad4e
methods for trajectories and objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
42
diff
changeset
|
77 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
|
78 if len(lines) >= 5: |
43
6d11d9e7ad4e
methods for trajectories and objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
42
diff
changeset
|
79 obj.velocities = Trajectory.load(lines[3], lines[4]) |
52
441c8387f34f
changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
51
diff
changeset
|
80 if objectType == 'object': |
42
1a2ac2d4f53a
added loading of the rest of the data for objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
25
diff
changeset
|
81 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
|
82 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
|
83 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
|
84 |
1a2ac2d4f53a
added loading of the rest of the data for objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
25
diff
changeset
|
85 # 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
|
86 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
|
87 obj.contourType = utils.line2Floats(lines[6]) |
43
6d11d9e7ad4e
methods for trajectories and objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
42
diff
changeset
|
88 obj.contourOrigins = Trajectory.load(lines[7], lines[8]) |
6d11d9e7ad4e
methods for trajectories and objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
42
diff
changeset
|
89 obj.contourSizes = Trajectory.load(lines[9], lines[10]) |
52
441c8387f34f
changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
51
diff
changeset
|
90 elif objectType == 'prototype': |
47
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
91 obj.userType = parsedLine[3] |
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
92 obj.nMatchings = int(l[4]) |
13
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
93 |
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
94 if len(lines) != 2: |
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
95 objects.append(obj) |
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
96 objNum+=1 |
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
97 else: |
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
98 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
|
99 |
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
|
100 lines = utils.getLines(file) |
13
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
101 |
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
102 file.close() |
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
103 return objects |
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
104 |
44
be3ae926e4e8
added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
43
diff
changeset
|
105 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
|
106 '''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
|
107 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
|
108 file = utils.openCheck(filename) |
be3ae926e4e8
added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
43
diff
changeset
|
109 if (not file): |
be3ae926e4e8
added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
43
diff
changeset
|
110 return [] |
be3ae926e4e8
added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
43
diff
changeset
|
111 |
be3ae926e4e8
added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
43
diff
changeset
|
112 points = {} |
be3ae926e4e8
added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
43
diff
changeset
|
113 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
|
114 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
|
115 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
|
116 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
|
117 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
|
118 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
|
119 [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
|
120 |
be3ae926e4e8
added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
43
diff
changeset
|
121 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
|
122 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
|
123 |
be3ae926e4e8
added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
43
diff
changeset
|
124 file.close() |
be3ae926e4e8
added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
43
diff
changeset
|
125 return points |