Mercurial Hosting > traffic-intelligence
comparison python/events.py @ 320:419f30491a4b
renamed fields movingObject to roadUser, etc
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Mon, 06 May 2013 17:20:07 +0200 |
parents | d280b881e860 |
children | a5e40bd04cf4 |
comparison
equal
deleted
inserted
replaced
319:6b65b26c1e46 | 320:419f30491a4b |
---|---|
20 | 20 |
21 link to the moving objects | 21 link to the moving objects |
22 contains the indicators in a dictionary with the names as keys | 22 contains the indicators in a dictionary with the names as keys |
23 ''' | 23 ''' |
24 | 24 |
25 categories = {'headon': 0, | 25 categories = {'Head On': 0, |
26 'rearend': 1, | 26 'rearend': 1, |
27 'side': 2, | 27 'side': 2, |
28 'parallel': 3} | 28 'parallel': 3} |
29 | 29 |
30 def __init__(self, num = None, timeInterval = None, roaduserNum1 = None, roaduserNum2 = None, movingObject1 = None, movingObject2 = None, categoryNum = None): | 30 indicatorNames = ['Collision Course Dot Product', |
31 'Collision Course Angle', | |
32 'Distance', | |
33 'Minimum Distance', | |
34 'Speed Differential'] | |
35 | |
36 def __init__(self, num = None, timeInterval = None, roaduserNum1 = None, roaduserNum2 = None, roadUser1 = None, roadUser2 = None, categoryNum = None): | |
31 moving.STObject.__init__(self, num, timeInterval) | 37 moving.STObject.__init__(self, num, timeInterval) |
32 self.roaduserNumbers = set([roaduserNum1, roaduserNum2]) | 38 self.roaduserNumbers = set([roaduserNum1, roaduserNum2]) |
33 self.movingObject1 = movingObject1 | 39 self.roadUser1 = roadUser1 |
34 self.movingObject2 = movingObject2 | 40 self.roadUser2 = roadUser2 |
35 self.categoryNum = categoryNum | 41 self.categoryNum = categoryNum |
36 self.indicators = {} | 42 self.indicators = {} |
37 | 43 |
38 def getIndicator(self, indicatorName): | 44 def getIndicator(self, indicatorName): |
39 return self.indicators[indicatorName] | 45 return self.indicators[indicatorName] |
42 self.indicators[indicator.name] = indicator | 48 self.indicators[indicator.name] = indicator |
43 | 49 |
44 def computeIndicators(self): | 50 def computeIndicators(self): |
45 '''Computes the collision course cosine only if the cosine is positive''' | 51 '''Computes the collision course cosine only if the cosine is positive''' |
46 collisionCourseDotProducts = {}#[0]*int(self.timeInterval.length()) | 52 collisionCourseDotProducts = {}#[0]*int(self.timeInterval.length()) |
47 collisionCourseCosines = {} | 53 collisionCourseAngles = {} |
48 distances = {}#[0]*int(self.timeInterval.length()) | 54 distances = {}#[0]*int(self.timeInterval.length()) |
49 speedDifferentials = {} | 55 speedDifferentials = {} |
50 for instant in self.timeInterval: | 56 for instant in self.timeInterval: |
51 deltap = self.movingObject1.getPositionAtInstant(instant)-self.movingObject2.getPositionAtInstant(instant) | 57 deltap = self.roadUser1.getPositionAtInstant(instant)-self.roadUser2.getPositionAtInstant(instant) |
52 deltav = self.movingObject2.getVelocityAtInstant(instant)-self.movingObject1.getVelocityAtInstant(instant) | 58 deltav = self.roadUser2.getVelocityAtInstant(instant)-self.roadUser1.getVelocityAtInstant(instant) |
53 collisionCourseDotProducts[instant] = moving.Point.dot(deltap, deltav) | 59 collisionCourseDotProducts[instant] = moving.Point.dot(deltap, deltav) |
54 distances[instant] = deltap.norm2() | 60 distances[instant] = deltap.norm2() |
55 speedDifferentials[instant] = deltav.norm2() | 61 speedDifferentials[instant] = deltav.norm2() |
56 if collisionCourseDotProducts[instant] > 0: | 62 #if collisionCourseDotProducts[instant] > 0: |
57 collisionCourseAngles[instant] = arccos(collisionCourseDotProducts[instant]/(distances[instant]*speedDifferentials[instant])) | 63 collisionCourseAngles[instant] = arccos(collisionCourseDotProducts[instant]/(distances[instant]*speedDifferentials[instant])) |
58 | 64 |
59 # todo shorten the time intervals based on the interaction definition | 65 # todo shorten the time intervals based on the interaction definition |
60 self.addIndicator(indicators.SeverityIndicator('Collision Course Dot Product', collisionCourseDotProducts)) | 66 self.addIndicator(indicators.SeverityIndicator('Collision Course Dot Product', collisionCourseDotProducts)) |
67 self.addIndicator(indicators.SeverityIndicator('Collision Course Angle', collisionCourseAngles)) | |
61 self.addIndicator(indicators.SeverityIndicator('Distance', distances)) | 68 self.addIndicator(indicators.SeverityIndicator('Distance', distances)) |
62 self.addIndicator(indicators.SeverityIndicator('Speed Differential', speedDifferentials)) | 69 self.addIndicator(indicators.SeverityIndicator('Speed Differential', speedDifferentials)) |
63 self.addIndicator(indicators.SeverityIndicator('Collision Course Angle', collisionCourseAngles)) | |
64 | 70 |
65 # todo test for interaction instants and interval, compute indicators | 71 # todo test for interaction instants and interval, compute indicators |
66 | 72 |
67 # if we have features, compute other indicators | 73 # if we have features, compute other indicators |
68 if self.movingObject1.features and self.movingObject2.features: | 74 if self.roadUser1.features and self.roadUser2.features: |
69 from scipy.spatial.distance import cdist | 75 from scipy.spatial.distance import cdist |
70 minDistance={} | 76 minDistance={} |
71 for instant in self.timeInterval: | 77 for instant in self.timeInterval: |
72 positions1 = [f.getPositionAtInstant(instant).astuple() for f in self.movingObject1.features if f.existsAtInstant(instant)] | 78 positions1 = [f.getPositionAtInstant(instant).astuple() for f in self.roadUser1.features if f.existsAtInstant(instant)] |
73 positions2 = [f.getPositionAtInstant(instant).astuple() for f in self.movingObject2.features if f.existsAtInstant(instant)] | 79 positions2 = [f.getPositionAtInstant(instant).astuple() for f in self.roadUser2.features if f.existsAtInstant(instant)] |
74 distance = cdist(positions1, positions2, metric = 'euclidean') | 80 distance = cdist(positions1, positions2, metric = 'euclidean') |
75 minDistance[instant] = distance.min() | 81 minDistance[instant] = distance.min() |
76 self.addIndicator(indicators.SeverityIndicator('Minimum Distance', minDistance)) | 82 self.addIndicator(indicators.SeverityIndicator('Minimum Distance', minDistance)) |
77 | 83 |
78 def computeCollisionPoints(self, predictionParameters, collisionDistanceThreshold, timeHorizon): | 84 def computeCollisionPoints(self, predictionParameters, collisionDistanceThreshold, timeHorizon): |
79 if self.movingObject1.features and self.movingObject2.features: | 85 if self.roadUser1.features and self.roadUser2.features: |
80 collisionPoints = prediction.computeCollisions(self.movingObject1, self.movingObject2, predictionParameters, collisionDistanceThreshold, timeHorizon) | 86 collisionPoints = prediction.computeCollisions(self.roadUser1, self.roadUser2, predictionParameters, collisionDistanceThreshold, timeHorizon) |
81 self.addIndicator(indicators.SeverityIndicator('collisionPoints', collisionPoints)) | 87 self.addIndicator(indicators.SeverityIndicator('Collision Points', collisionPoints)) |
82 else: | 88 else: |
83 print('Features not associated with objects') | 89 print('Features not associated with objects') |
84 | 90 |
85 def addVideoFilename(self,videoFilename): | 91 def addVideoFilename(self,videoFilename): |
86 self.videoFilename= videoFilename | 92 self.videoFilename= videoFilename |
106 | 112 |
107 # TODO: | 113 # TODO: |
108 #http://stackoverflow.com/questions/3288595/multiprocessing-using-pool-map-on-a-function-defined-in-a-class | 114 #http://stackoverflow.com/questions/3288595/multiprocessing-using-pool-map-on-a-function-defined-in-a-class |
109 #http://www.rueckstiess.net/research/snippets/show/ca1d7d90 | 115 #http://www.rueckstiess.net/research/snippets/show/ca1d7d90 |
110 def calculateIndicatorPipe(pairs, predParam, timeHorizon=75,collisionDistanceThreshold=1.8): | 116 def calculateIndicatorPipe(pairs, predParam, timeHorizon=75,collisionDistanceThreshold=1.8): |
111 collisionPoints, crossingZones = prediction.computeCrossingsCollisions(pairs.movingObject1, pairs.movingObject2, predParam, collisionDistanceThreshold, timeHorizon) | 117 collisionPoints, crossingZones = prediction.computeCrossingsCollisions(pairs.roadUser1, pairs.roadUser2, predParam, collisionDistanceThreshold, timeHorizon) |
112 #print pairs.num | 118 #print pairs.num |
113 # Ignore empty collision points | 119 # Ignore empty collision points |
114 empty = 1 | 120 empty = 1 |
115 for i in collisionPoints: | 121 for i in collisionPoints: |
116 if(collisionPoints[i] != []): | 122 if(collisionPoints[i] != []): |
153 pool.close() | 159 pool.close() |
154 else: | 160 else: |
155 #prog = Tools.ProgressBar(0, len(self.pairs), 77) #Removed in traffic-intelligenc port | 161 #prog = Tools.ProgressBar(0, len(self.pairs), 77) #Removed in traffic-intelligenc port |
156 for j in xrange(len(self.pairs)): | 162 for j in xrange(len(self.pairs)): |
157 #prog.updateAmount(j) #Removed in traffic-intelligenc port | 163 #prog.updateAmount(j) #Removed in traffic-intelligenc port |
158 collisionPoints, crossingZones = prediction.computeCrossingsCollisions(self.pairs[j].movingObject1, self.pairs[j].movingObject2, predParam, collisionDistanceThreshold, timeHorizon) | 164 collisionPoints, crossingZones = prediction.computeCrossingsCollisions(self.pairs[j].roadUser1, self.pairs[j].roadUser2, predParam, collisionDistanceThreshold, timeHorizon) |
159 | 165 |
160 # Ignore empty collision points | 166 # Ignore empty collision points |
161 empty = 1 | 167 empty = 1 |
162 for i in collisionPoints: | 168 for i in collisionPoints: |
163 if(collisionPoints[i] != []): | 169 if(collisionPoints[i] != []): |