annotate python/ubc_utils.py @ 111:48e3de4acb65

corrected bugs in file copying functions and added utility to get concatenate feature numbers for a set of objects
author Nicolas Saunier <nico@confins.net>
date Fri, 15 Jul 2011 19:51:31 -0400
parents fae55a4c7a5a
children 41a5853ec495
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):
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
83 '''Reads filenameIn, replaces the first line with the result of modifyLines 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
84 #sortByNum(objects)
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
85 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
86 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
87
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
88 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
89 trajNum = 0
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
90 while (lines != []):
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
91 modifiedLines = modifyLines(trajNum, lines)
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
92 if modifiedLines:
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
93 for l in modifiedLines:
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
94 fileOut.write(l+"\n")
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
95 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
96 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
97 trajNum += 1
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
98
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
99 fileIn.close()
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
100 fileOut.close()
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
101
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
102 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
103 '''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
104 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
105 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
106 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
107
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
108 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
109 trajNum = 0
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
110 while (lines != []):
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
111 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
112 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
113 fileOut.write(l+"\n")
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
114 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
115 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
116 trajNum += 1
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
117
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
118 fileIn.close()
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
119 fileOut.close()
fae55a4c7a5a added functions to modify and copy subsets of trajectory files
Nicolas Saunier <nico@confins.net>
parents: 67
diff changeset
120
13
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
121 def loadTrajectories(filename, nObjects = -1):
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
122 '''Loads trajectories'''
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
123
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
124 file = utils.openCheck(filename)
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
125 if (not file):
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
126 return []
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
127
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
128 objects = []
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
129 objNum = 0
47
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
130 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
131 lines = utils.getLines(file)
13
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
132 while (lines != []) and ((nObjects<0) or (objNum<nObjects)):
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
133 l = lines[0].split(' ')
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
134 parsedLine = [int(n) for n in l[:4]]
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
135 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
136 #add = True
1a2ac2d4f53a added loading of the rest of the data for objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 25
diff changeset
137 if len(lines) >= 3:
43
6d11d9e7ad4e methods for trajectories and objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 42
diff changeset
138 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
139 if len(lines) >= 5:
43
6d11d9e7ad4e methods for trajectories and objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 42
diff changeset
140 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
141 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
142 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
143 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
144 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
145
1a2ac2d4f53a added loading of the rest of the data for objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 25
diff changeset
146 # 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
147 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
148 obj.contourType = utils.line2Floats(lines[6])
43
6d11d9e7ad4e methods for trajectories and objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 42
diff changeset
149 obj.contourOrigins = Trajectory.load(lines[7], lines[8])
6d11d9e7ad4e methods for trajectories and objects
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 42
diff changeset
150 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
151 elif objectType == 'prototype':
47
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
152 obj.userType = parsedLine[3]
e27598865af3 modified loadtrajectories to load objects and prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 44
diff changeset
153 obj.nMatchings = int(l[4])
13
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
154
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
155 if len(lines) != 2:
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
156 objects.append(obj)
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
157 objNum+=1
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
158 else:
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
159 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
160
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
161 lines = utils.getLines(file)
13
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
162
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
163 file.close()
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
164 return objects
30559b2cf7a9 minimal code to load UBC data
Nicolas Saunier <nico@confins.net>
parents:
diff changeset
165
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
166 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
167 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
168 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
169 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
170 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
171
57
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
172 def loadInteractions(filename, nInteractions = -1):
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
173 'Loads interactions from the old UBC traffic event format'
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
174 from event import Interaction
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
175 from moving import SeverityIndicator
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
176 file = utils.openCheck(filename)
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
177 if (not file):
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
178 return []
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
179
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
180 interactions = []
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
181 interactionNum = 0
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
182 lines = utils.getLines(file)
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
183 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
184 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
185 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
186
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
187 indicatorFrameNums = [int(n) for n in lines[1].split(' ')]
67
ded58c424783 added indicator computation and modified severity indicator constructor
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 62
diff changeset
188 inter.indicators = []
57
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
189 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
190 values = {}
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
191 for i,v in enumerate([float(n) for n in line.split(' ')]):
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
192 values[indicatorFrameNums[i]] = v
67
ded58c424783 added indicator computation and modified severity indicator constructor
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 62
diff changeset
193 inter.indicators.append(SeverityIndicator(severityIndicatorNames[indicatorNum], values, None, mostSevereIsMax[indicatorNum], ignoredValue[indicatorNum]))
57
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
194
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
195 interactions.append(inter)
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
196 interactionNum+=1
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
197 lines = utils.getLines(file)
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
198
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
199 file.close()
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
200 return interactions
b8b3768f8d54 added functions to load interactions and indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 53
diff changeset
201
44
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
202 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
203 '''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
204 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
205 file = utils.openCheck(filename)
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
206 if (not file):
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
207 return []
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
208
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
209 points = {}
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
210 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
211 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
212 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
213 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
214 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
215 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
216 [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
217
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
218 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
219 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
220
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
221 file.close()
be3ae926e4e8 added simple intersection description, function to load collision points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 43
diff changeset
222 return points