Mercurial > hg > nsaunier > traffic-intelligence
annotate python/ubc_utils.py @ 49:1fb5606506ae
re-arrangement
| author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
|---|---|
| date | Sat, 25 Sep 2010 11:33:07 -0400 |
| parents | 8aed225f71d8 |
| children | 3aed17fc468d |
| 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 |
|
47
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
9 def getFileType(s): |
|
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
10 filePrefix = utils.removeExtension(s) |
|
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
11 i = filePrefix.rfind('-') |
|
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
12 if i>0: |
|
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
13 return filePrefix[i+1:] |
|
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
14 else: |
|
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
15 return '' |
|
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
16 |
|
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
|
17 def saveTrajectoryUserTypes(inFilename, outFilename, objects): |
|
47
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
18 '''The program saves the objects, |
|
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
19 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
|
20 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
|
21 into outFilename''' |
|
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
22 infile = utils.openCheck(inFilename) |
|
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
23 outfile = utils.openCheck(outFilename) |
|
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
24 |
|
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
25 if (not infile) | (not outfile): |
|
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
26 return |
|
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
27 |
|
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
|
28 lines = utils.getLines(infile) |
|
47
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
29 objNum = 0 |
|
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
30 while lines != []: |
|
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
31 i = 0 |
|
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
32 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
|
33 i+=1 |
|
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
34 if i<len(objects): |
|
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
35 l = lines[0].split(' ') |
|
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
36 outfile.write() |
|
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
37 # next object |
|
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
38 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
|
39 lines = utils.getLines(infile) |
|
47
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
40 |
|
13
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
41 def loadTrajectories(filename, nObjects = -1): |
|
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
42 '''Loads trajectories''' |
|
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
43 |
|
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
44 file = utils.openCheck(filename) |
|
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
45 if (not file): |
|
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
46 return [] |
|
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
47 |
|
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
48 objects = [] |
|
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
49 objNum = 0 |
|
47
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
50 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
|
51 lines = utils.getLines(file) |
|
13
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
52 while (lines != []) and ((nObjects<0) or (objNum<nObjects)): |
|
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
53 l = lines[0].split(' ') |
|
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
54 parsedLine = [int(n) for n in l[:4]] |
|
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
55 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
|
56 #add = True |
|
1a2ac2d4f53a
added loading of the rest of the data for objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
25
diff
changeset
|
57 if len(lines) >= 3: |
|
43
6d11d9e7ad4e
methods for trajectories and objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
42
diff
changeset
|
58 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
|
59 if len(lines) >= 5: |
|
43
6d11d9e7ad4e
methods for trajectories and objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
42
diff
changeset
|
60 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
|
61 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
|
62 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
|
63 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
|
64 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
|
65 |
|
1a2ac2d4f53a
added loading of the rest of the data for objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
25
diff
changeset
|
66 # 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
|
67 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
|
68 obj.contourType = utils.line2Floats(lines[6]) |
|
43
6d11d9e7ad4e
methods for trajectories and objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
42
diff
changeset
|
69 obj.contourOrigins = Trajectory.load(lines[7], lines[8]) |
|
6d11d9e7ad4e
methods for trajectories and objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
42
diff
changeset
|
70 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
|
71 elif objectType == 'prototypes': |
|
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
72 obj.userType = parsedLine[3] |
|
e27598865af3
modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
44
diff
changeset
|
73 obj.nMatchings = int(l[4]) |
|
13
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
74 |
|
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
75 if len(lines) != 2: |
|
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
76 objects.append(obj) |
|
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
77 objNum+=1 |
|
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
78 else: |
|
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
79 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
|
80 |
|
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
|
81 lines = utils.getLines(file) |
|
13
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
82 |
|
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
83 file.close() |
|
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
84 return objects |
|
30559b2cf7a9
minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
85 |
|
44
be3ae926e4e8
added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
43
diff
changeset
|
86 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
|
87 '''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
|
88 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
|
89 file = utils.openCheck(filename) |
|
be3ae926e4e8
added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
43
diff
changeset
|
90 if (not file): |
|
be3ae926e4e8
added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
43
diff
changeset
|
91 return [] |
|
be3ae926e4e8
added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
43
diff
changeset
|
92 |
|
be3ae926e4e8
added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
43
diff
changeset
|
93 points = {} |
|
be3ae926e4e8
added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
43
diff
changeset
|
94 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
|
95 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
|
96 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
|
97 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
|
98 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
|
99 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
|
100 [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
|
101 |
|
be3ae926e4e8
added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
43
diff
changeset
|
102 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
|
103 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
|
104 |
|
be3ae926e4e8
added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
43
diff
changeset
|
105 file.close() |
|
be3ae926e4e8
added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
43
diff
changeset
|
106 return points |
