annotate trafficintelligence/ubc_utils.py @ 1212:af329f3330ba

work in progress on 3D safety analysis
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Tue, 02 May 2023 17:11:24 -0400
parents e23828659a66
children
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
1101
e23828659a66 bug fixes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1030
diff changeset
4 from trafficintelligence import utils, events, storage, indicators
1028
cc5cb04b04b0 major update using the trafficintelligence package name and install through pip
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 998
diff changeset
5 from trafficintelligence.moving import MovingObject, TimeInterval, Trajectory
13
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
52
441c8387f34f changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 51
diff changeset
8 fileTypeNames = ['feature',
441c8387f34f changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 51
diff changeset
9 'object',
441c8387f34f changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 51
diff changeset
10 'prototype',
441c8387f34f changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 51
diff changeset
11 'contoursequence']
441c8387f34f changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 51
diff changeset
12
57
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
13 severityIndicatorNames = ['Distance',
341
2f39c4ed0b62 first version of indicator saving to sqlite
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 329
diff changeset
14 'Collision Course Cosine',
57
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
15 'Velocity Cosine',
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
16 'Speed Differential',
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
17 'Collision Probability',
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
18 'Severity Index',
341
2f39c4ed0b62 first version of indicator saving to sqlite
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 329
diff changeset
19 'Time to Collision']
57
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
20
329
a70c205ebdd9 added sqlite code, in particular to load and save road user type
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 306
diff changeset
21 userTypeNames = ['car',
a70c205ebdd9 added sqlite code, in particular to load and save road user type
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 306
diff changeset
22 'pedestrian',
a70c205ebdd9 added sqlite code, in particular to load and save road user type
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 306
diff changeset
23 'twowheels',
a70c205ebdd9 added sqlite code, in particular to load and save road user type
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 306
diff changeset
24 'bus',
a70c205ebdd9 added sqlite code, in particular to load and save road user type
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 306
diff changeset
25 'truck']
a70c205ebdd9 added sqlite code, in particular to load and save road user type
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 306
diff changeset
26
57
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
27 # severityIndicator = {'Distance': 0,
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
28 # 'Cosine': 1,
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
29 # 'Velocity Cosine': 2,
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
30 # 'Speed Differential': 3,
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
31 # 'Collision Probability': 4,
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
32 # 'Severity Index': 5,
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
33 # 'TTC': 6}
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
34
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
35 mostSevereIsMax = [False,
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 True,
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
38 True,
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
39 True,
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
40 True,
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
41 False]
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
42
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
43 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
44
47
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
45 def getFileType(s):
52
441c8387f34f changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 51
diff changeset
46 'Finds the type in fileTypeNames'
441c8387f34f changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 51
diff changeset
47 for fileType in fileTypeNames:
441c8387f34f changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 51
diff changeset
48 if s.find(fileType)>0:
441c8387f34f changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 51
diff changeset
49 return fileType
441c8387f34f changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 51
diff changeset
50 return ''
441c8387f34f changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 51
diff changeset
51
441c8387f34f changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 51
diff changeset
52 def isFileType(s, fileType):
441c8387f34f changed type detection to load trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 51
diff changeset
53 return (s.find(fileType)>0)
47
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
54
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
55 def saveTrajectoryUserTypes(inFilename, outFilename, objects):
47
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
56 '''The program saves the objects,
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
57 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
58 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
59 into outFilename'''
1030
aafbc0bab925 moved method around to avoid cross-dependencies
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1028
diff changeset
60 infile = utils.openCheck(inFilename)
aafbc0bab925 moved method around to avoid cross-dependencies
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1028
diff changeset
61 outfile = utils.openCheck(outFilename,'w')
47
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
62
1101
e23828659a66 bug fixes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1030
diff changeset
63 if (inFilename.find('features') >= 0) or infile is None or outfile is None:
47
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
64 return
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
65
1101
e23828659a66 bug fixes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1030
diff changeset
66 lines = utils.getLines(infile)
53
0a5bdbf0d1b4 added comments
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 52
diff changeset
67 objNum = 0 # in inFilename
47
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
68 while lines != []:
53
0a5bdbf0d1b4 added comments
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 52
diff changeset
69 # 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
70 i = 0
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
71 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
72 i+=1
53
0a5bdbf0d1b4 added comments
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 52
diff changeset
73
47
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
74 if i<len(objects):
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
75 l = lines[0].split(' ')
51
3aed17fc468d utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 48
diff changeset
76 l[3] = str(objects[i].userType)
3aed17fc468d utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 48
diff changeset
77 outfile.write(' '.join(l)+'\n')
3aed17fc468d utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 48
diff changeset
78 for l in lines[1:]:
3aed17fc468d utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 48
diff changeset
79 outfile.write(l+'\n')
3aed17fc468d utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 48
diff changeset
80 outfile.write(utils.delimiterChar+'\n')
47
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
81 # next object
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
82 objNum += 1
1101
e23828659a66 bug fixes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1030
diff changeset
83 lines = utils.getLines(infile)
47
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
84
51
3aed17fc468d utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 48
diff changeset
85 print('read {0} objects'.format(objNum))
3aed17fc468d utils to save object types
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 48
diff changeset
86
110
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
87 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
88 '''Reads filenameIn, replaces the lines with the result of modifyLines and writes the result in filenameOut'''
1030
aafbc0bab925 moved method around to avoid cross-dependencies
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1028
diff changeset
89 fileIn = utils.openCheck(filenameIn, 'r', True)
aafbc0bab925 moved method around to avoid cross-dependencies
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1028
diff changeset
90 fileOut = utils.openCheck(filenameOut, "w", True)
110
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
91
1101
e23828659a66 bug fixes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1030
diff changeset
92 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
93 trajNum = 0
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
94 while (lines != []):
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
95 modifiedLines = modifyLines(trajNum, lines)
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
96 if modifiedLines:
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
97 for l in modifiedLines:
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
98 fileOut.write(l+"\n")
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
99 fileOut.write(utils.delimiterChar+"\n")
1101
e23828659a66 bug fixes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1030
diff changeset
100 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
101 trajNum += 1
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
102
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
103 fileIn.close()
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
104 fileOut.close()
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
105
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
106 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
107 '''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
108 and writes the result in filenameOut'''
1030
aafbc0bab925 moved method around to avoid cross-dependencies
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1028
diff changeset
109 fileIn = utils.openCheck(filenameIn, 'r', True)
aafbc0bab925 moved method around to avoid cross-dependencies
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1028
diff changeset
110 fileOut = utils.openCheck(filenameOut, "w", True)
110
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
111
1101
e23828659a66 bug fixes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1030
diff changeset
112 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
113 trajNum = 0
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
114 while (lines != []):
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
115 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
116 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
117 fileOut.write(l+"\n")
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
118 fileOut.write(utils.delimiterChar+"\n")
1101
e23828659a66 bug fixes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1030
diff changeset
119 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
120 trajNum += 1
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
121
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
122 fileIn.close()
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
123 fileOut.close()
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
124
13
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
125 def loadTrajectories(filename, nObjects = -1):
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
126 '''Loads trajectories'''
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
127
1101
e23828659a66 bug fixes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1030
diff changeset
128 f = utils.openCheck(filename)
e23828659a66 bug fixes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1030
diff changeset
129 if f is None:
13
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
130 return []
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
131
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
132 objects = []
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
133 objNum = 0
47
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
134 objectType = getFileType(filename)
1101
e23828659a66 bug fixes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1030
diff changeset
135 lines = utils.getLines(f)
13
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
136 while (lines != []) and ((nObjects<0) or (objNum<nObjects)):
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
137 l = lines[0].split(' ')
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
138 parsedLine = [int(n) for n in l[:4]]
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
139 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
140 #add = True
1a2ac2d4f53a added loading of the rest of the data for objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 25
diff changeset
141 if len(lines) >= 3:
43
6d11d9e7ad4e methods for trajectories and objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 42
diff changeset
142 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
143 if len(lines) >= 5:
43
6d11d9e7ad4e methods for trajectories and objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 42
diff changeset
144 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
145 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
146 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
147 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
148 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
149
1a2ac2d4f53a added loading of the rest of the data for objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 25
diff changeset
150 # 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
151 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
152 obj.contourType = utils.line2Floats(lines[6])
43
6d11d9e7ad4e methods for trajectories and objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 42
diff changeset
153 obj.contourOrigins = Trajectory.load(lines[7], lines[8])
6d11d9e7ad4e methods for trajectories and objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 42
diff changeset
154 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
155 elif objectType == 'prototype':
47
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
156 obj.userType = parsedLine[3]
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
157 obj.nMatchings = int(l[4])
13
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
158
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
159 if len(lines) != 2:
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
160 objects.append(obj)
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
161 objNum+=1
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
162 else:
998
933670761a57 updated code to python 3 (tests pass and scripts run, but non-executed parts of code are probably still not correct)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 722
diff changeset
163 print("Error two lines of data for feature {}".format(f.num))
13
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
164
1101
e23828659a66 bug fixes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1030
diff changeset
165 lines = utils.getLines(f)
13
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
166
1101
e23828659a66 bug fixes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1030
diff changeset
167 f.close()
13
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
168 return objects
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
169
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
170 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
171 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
172 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
173 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
174 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
175
57
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
176 def loadInteractions(filename, nInteractions = -1):
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
177 'Loads interactions from the old UBC traffic event format'
1101
e23828659a66 bug fixes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1030
diff changeset
178 f = utils.openCheck(filename)
e23828659a66 bug fixes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1030
diff changeset
179 if f is None:
57
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
180 return []
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
181
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
182 interactions = []
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
183 interactionNum = 0
1101
e23828659a66 bug fixes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1030
diff changeset
184 lines = utils.getLines(f)
57
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
185 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
186 parsedLine = [int(n) for n in lines[0].split(' ')]
1101
e23828659a66 bug fixes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1030
diff changeset
187 inter = events.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
188
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
189 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
190 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
191 values = {}
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
192 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
193 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
194 values[indicatorFrameNums[i]] = v
1101
e23828659a66 bug fixes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1030
diff changeset
195 inter.addIndicator(indicators.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
196
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
197 interactions.append(inter)
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
198 interactionNum+=1
1101
e23828659a66 bug fixes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1030
diff changeset
199 lines = utils.getLines(f)
57
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
200
1101
e23828659a66 bug fixes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1030
diff changeset
201 f.close()
57
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
202 return interactions
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
203
44
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
204 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
205 '''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
206 with keys as a pair of the numbers of the two interacting objects'''
1101
e23828659a66 bug fixes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1030
diff changeset
207 f = utils.openCheck(filename)
e23828659a66 bug fixes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1030
diff changeset
208 if f is None:
44
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
209 return []
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
210
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
211 points = {}
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
212 num = 0
1101
e23828659a66 bug fixes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1030
diff changeset
213 lines = utils.getLines(f)
44
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
214 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
215 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
216 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
217 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
218 [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
219
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
220 num+=1
1101
e23828659a66 bug fixes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1030
diff changeset
221 lines = utils.getLines(f)
44
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
222
1101
e23828659a66 bug fixes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1030
diff changeset
223 f.close()
44
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
224 return points