annotate python/ubc_utils.py @ 306:93d851d0d21e

bug correction, minor work on indicators
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Tue, 02 Apr 2013 15:27:42 -0400
parents 1f253f218b9f
children a70c205ebdd9
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
52
441c8387f34f changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 51
diff changeset
9 fileTypeNames = ['feature',
441c8387f34f changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 51
diff changeset
10 'object',
441c8387f34f changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 51
diff changeset
11 'prototype',
441c8387f34f changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 51
diff changeset
12 'contoursequence']
441c8387f34f changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 51
diff changeset
13
57
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
14 severityIndicatorNames = ['Distance',
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
15 'Cosine',
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
16 'Velocity Cosine',
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
17 'Speed Differential',
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
18 'Collision Probability',
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
19 'Severity Index',
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
20 'TTC']
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
21
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
22 # severityIndicator = {'Distance': 0,
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
23 # 'Cosine': 1,
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
24 # 'Velocity Cosine': 2,
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
25 # 'Speed Differential': 3,
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
26 # 'Collision Probability': 4,
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
27 # 'Severity Index': 5,
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
28 # 'TTC': 6}
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
29
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
30 mostSevereIsMax = [False,
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
31 False,
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
32 True,
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
33 True,
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
34 True,
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
35 True,
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
36 False]
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
37
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
38 ignoredValue = [None, None, None, None, None, None, -1]
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
39
47
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
40 def getFileType(s):
52
441c8387f34f changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 51
diff changeset
41 'Finds the type in fileTypeNames'
441c8387f34f changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 51
diff changeset
42 for fileType in fileTypeNames:
441c8387f34f changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 51
diff changeset
43 if s.find(fileType)>0:
441c8387f34f changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 51
diff changeset
44 return fileType
441c8387f34f changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 51
diff changeset
45 return ''
441c8387f34f changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 51
diff changeset
46
441c8387f34f changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 51
diff changeset
47 def isFileType(s, fileType):
441c8387f34f changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 51
diff changeset
48 return (s.find(fileType)>0)
47
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
49
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
50 def saveTrajectoryUserTypes(inFilename, outFilename, objects):
47
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
51 '''The program saves the objects,
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
52 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
53 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
54 into outFilename'''
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
55 infile = utils.openCheck(inFilename)
51
3aed17fc468d utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 48
diff changeset
56 outfile = utils.openCheck(outFilename,'w')
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 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
59 return
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
60
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
61 lines = utils.getLines(infile)
53
0a5bdbf0d1b4 added comments
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 52
diff changeset
62 objNum = 0 # in inFilename
47
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
63 while lines != []:
53
0a5bdbf0d1b4 added comments
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 52
diff changeset
64 # find object in objects (index i)
47
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
65 i = 0
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
66 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
67 i+=1
53
0a5bdbf0d1b4 added comments
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 52
diff changeset
68
47
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
69 if i<len(objects):
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
70 l = lines[0].split(' ')
51
3aed17fc468d utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 48
diff changeset
71 l[3] = str(objects[i].userType)
3aed17fc468d utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 48
diff changeset
72 outfile.write(' '.join(l)+'\n')
3aed17fc468d utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 48
diff changeset
73 for l in lines[1:]:
3aed17fc468d utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 48
diff changeset
74 outfile.write(l+'\n')
3aed17fc468d utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 48
diff changeset
75 outfile.write(utils.delimiterChar+'\n')
47
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
76 # next object
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
77 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
78 lines = utils.getLines(infile)
47
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
79
51
3aed17fc468d utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 48
diff changeset
80 print('read {0} objects'.format(objNum))
3aed17fc468d utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 48
diff changeset
81
110
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
82 def modifyTrajectoryFile(modifyLines, filenameIn, filenameOut):
161
41a5853ec495 added utility to offset the time intervales of complete trajectory files
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 111
diff changeset
83 '''Reads filenameIn, replaces the lines with the result of modifyLines and writes the result in filenameOut'''
110
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
84 fileIn = utils.openCheck(filenameIn, 'r', True)
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
85 fileOut = utils.openCheck(filenameOut, "w", True)
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
86
111
48e3de4acb65 corrected bugs in file copying functions and added utility to get concatenate feature numbers for a set of objects
Nicolas Saunier <nico@confins.net>
parents: 110
diff changeset
87 lines = utils.getLines(fileIn)
110
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
88 trajNum = 0
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
89 while (lines != []):
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
90 modifiedLines = modifyLines(trajNum, lines)
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
91 if modifiedLines:
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
92 for l in modifiedLines:
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
93 fileOut.write(l+"\n")
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
94 fileOut.write(utils.delimiterChar+"\n")
111
48e3de4acb65 corrected bugs in file copying functions and added utility to get concatenate feature numbers for a set of objects
Nicolas Saunier <nico@confins.net>
parents: 110
diff changeset
95 lines = utils.getLines(fileIn)
110
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
96 trajNum += 1
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
97
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
98 fileIn.close()
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
99 fileOut.close()
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
100
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
101 def copyTrajectoryFile(keepTrajectory, filenameIn, filenameOut):
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
102 '''Reads filenameIn, keeps the trajectories for which the function keepTrajectory(trajNum, lines) is True
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
103 and writes the result in filenameOut'''
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
104 fileIn = utils.openCheck(filenameIn, 'r', True)
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
105 fileOut = utils.openCheck(filenameOut, "w", True)
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
106
111
48e3de4acb65 corrected bugs in file copying functions and added utility to get concatenate feature numbers for a set of objects
Nicolas Saunier <nico@confins.net>
parents: 110
diff changeset
107 lines = utils.getLines(fileIn)
110
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
108 trajNum = 0
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
109 while (lines != []):
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
110 if keepTrajectory(trajNum, lines):
111
48e3de4acb65 corrected bugs in file copying functions and added utility to get concatenate feature numbers for a set of objects
Nicolas Saunier <nico@confins.net>
parents: 110
diff changeset
111 for l in lines:
110
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
112 fileOut.write(l+"\n")
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
113 fileOut.write(utils.delimiterChar+"\n")
111
48e3de4acb65 corrected bugs in file copying functions and added utility to get concatenate feature numbers for a set of objects
Nicolas Saunier <nico@confins.net>
parents: 110
diff changeset
114 lines = utils.getLines(fileIn)
110
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
115 trajNum += 1
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
116
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
117 fileIn.close()
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
118 fileOut.close()
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
119
13
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
120 def loadTrajectories(filename, nObjects = -1):
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
121 '''Loads trajectories'''
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
122
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
123 file = utils.openCheck(filename)
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
124 if (not file):
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
125 return []
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
126
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
127 objects = []
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
128 objNum = 0
47
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
129 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
130 lines = utils.getLines(file)
13
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
131 while (lines != []) and ((nObjects<0) or (objNum<nObjects)):
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
132 l = lines[0].split(' ')
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
133 parsedLine = [int(n) for n in l[:4]]
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
134 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
135 #add = True
1a2ac2d4f53a added loading of the rest of the data for objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 25
diff changeset
136 if len(lines) >= 3:
43
6d11d9e7ad4e methods for trajectories and objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 42
diff changeset
137 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
138 if len(lines) >= 5:
43
6d11d9e7ad4e methods for trajectories and objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 42
diff changeset
139 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
140 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
141 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
142 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
143 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
144
1a2ac2d4f53a added loading of the rest of the data for objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 25
diff changeset
145 # 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
146 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
147 obj.contourType = utils.line2Floats(lines[6])
43
6d11d9e7ad4e methods for trajectories and objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 42
diff changeset
148 obj.contourOrigins = Trajectory.load(lines[7], lines[8])
6d11d9e7ad4e methods for trajectories and objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 42
diff changeset
149 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
150 elif objectType == 'prototype':
47
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
151 obj.userType = parsedLine[3]
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
152 obj.nMatchings = int(l[4])
13
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
153
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
154 if len(lines) != 2:
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
155 objects.append(obj)
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
156 objNum+=1
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
157 else:
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
158 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
159
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
160 lines = utils.getLines(file)
13
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
161
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
162 file.close()
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
163 return objects
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
164
111
48e3de4acb65 corrected bugs in file copying functions and added utility to get concatenate feature numbers for a set of objects
Nicolas Saunier <nico@confins.net>
parents: 110
diff changeset
165 def getFeatureNumbers(objects):
48e3de4acb65 corrected bugs in file copying functions and added utility to get concatenate feature numbers for a set of objects
Nicolas Saunier <nico@confins.net>
parents: 110
diff changeset
166 featureNumbers=[]
48e3de4acb65 corrected bugs in file copying functions and added utility to get concatenate feature numbers for a set of objects
Nicolas Saunier <nico@confins.net>
parents: 110
diff changeset
167 for o in objects:
48e3de4acb65 corrected bugs in file copying functions and added utility to get concatenate feature numbers for a set of objects
Nicolas Saunier <nico@confins.net>
parents: 110
diff changeset
168 featureNumbers += o.featureNumbers
48e3de4acb65 corrected bugs in file copying functions and added utility to get concatenate feature numbers for a set of objects
Nicolas Saunier <nico@confins.net>
parents: 110
diff changeset
169 return featureNumbers
48e3de4acb65 corrected bugs in file copying functions and added utility to get concatenate feature numbers for a set of objects
Nicolas Saunier <nico@confins.net>
parents: 110
diff changeset
170
57
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
171 def loadInteractions(filename, nInteractions = -1):
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
172 'Loads interactions from the old UBC traffic event format'
306
93d851d0d21e bug correction, minor work on indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 294
diff changeset
173 from events import Interaction
274
ea2a8e8e4e77 corrected bug from moving interaction classes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 161
diff changeset
174 from indicators import SeverityIndicator
57
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
175 file = utils.openCheck(filename)
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
176 if (not file):
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
177 return []
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
178
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
179 interactions = []
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
180 interactionNum = 0
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
181 lines = utils.getLines(file)
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
182 while (lines != []) and ((nInteractions<0) or (interactionNum<nInteractions)):
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
183 parsedLine = [int(n) for n in lines[0].split(' ')]
61
a8c6d544f015 corrected bug loading Interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 57
diff changeset
184 inter = Interaction(interactionNum, TimeInterval(parsedLine[1],parsedLine[2]), parsedLine[3], parsedLine[4], categoryNum = parsedLine[5])
57
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
185
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
186 indicatorFrameNums = [int(n) for n in lines[1].split(' ')]
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
187 for indicatorNum,line in enumerate(lines[2:]):
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
188 values = {}
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
189 for i,v in enumerate([float(n) for n in line.split(' ')]):
286
fa95796a76b3 simplified indicators (only non-measured values, whether measurable or not)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 274
diff changeset
190 if not ignoredValue[indicatorNum] or v != ignoredValue[indicatorNum]:
fa95796a76b3 simplified indicators (only non-measured values, whether measurable or not)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 274
diff changeset
191 values[indicatorFrameNums[i]] = v
294
1f253f218b9f evolution of indicators and their computation in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 286
diff changeset
192 inter.addIndicator(SeverityIndicator(severityIndicatorNames[indicatorNum], values, None, mostSevereIsMax[indicatorNum]))
57
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
193
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
194 interactions.append(inter)
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
195 interactionNum+=1
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
196 lines = utils.getLines(file)
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
197
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
198 file.close()
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
199 return interactions
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
200
44
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
201 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
202 '''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
203 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
204 file = utils.openCheck(filename)
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
205 if (not file):
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
206 return []
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
207
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
208 points = {}
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
209 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
210 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
211 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
212 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
213 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
214 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
215 [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
216
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
217 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
218 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
219
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
220 file.close()
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
221 return points