comparison python/events.py @ 949:d6c1c05d11f5

modified multithreading at the interaction level for safety computations
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Fri, 21 Jul 2017 17:52:56 -0400
parents b1e8453c207c
children 030b16ab4f64
comparison
equal deleted inserted replaced
948:584b9405e494 949:d6c1c05d11f5
6 from base import VideoFilenameAddable 6 from base import VideoFilenameAddable
7 7
8 import numpy as np 8 import numpy as np
9 9
10 import multiprocessing 10 import multiprocessing
11 import itertools 11 import itertools, logging
12 12
13 13
14 def findRoute(prototypes,objects,i,j,noiseEntryNums,noiseExitNums,minSimilarity= 0.3, spatialThreshold=1.0, delta=180): 14 def findRoute(prototypes,objects,i,j,noiseEntryNums,noiseExitNums,minSimilarity= 0.3, spatialThreshold=1.0, delta=180):
15 if i[0] not in noiseEntryNums: 15 if i[0] not in noiseEntryNums:
16 prototypesRoutes= [ x for x in sorted(prototypes.keys()) if i[0]==x[0]] 16 prototypesRoutes= [ x for x in sorted(prototypes.keys()) if i[0]==x[0]]
214 minDistances={} 214 minDistances={}
215 for instant in self.timeInterval: 215 for instant in self.timeInterval:
216 minDistances[instant] = moving.MovingObject.minDistance(self.roadUser1, self.roadUser2, instant) 216 minDistances[instant] = moving.MovingObject.minDistance(self.roadUser1, self.roadUser2, instant)
217 self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[3], minDistances, mostSevereIsMax = False)) 217 self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[3], minDistances, mostSevereIsMax = False))
218 218
219 def computeCrossingsCollisions(self, predictionParameters, collisionDistanceThreshold, timeHorizon, computeCZ = False, debug = False, timeInterval = None, nProcesses = 1):#, usePrototypes=False, route1= (-1,-1), route2=(-1,-1), prototypes={}, secondStepPrototypes={}, nMatching={}, objects=[], noiseEntryNums=[], noiseExitNums=[], minSimilarity=0.1, mostMatched=None, useDestination=True, useSpeedPrototype=True, acceptPartialLength=30, step=1): 219 def computeCrossingsCollisions(self, predictionParameters, collisionDistanceThreshold, timeHorizon, computeCZ = False, debug = False, timeInterval = None):
220 '''Computes all crossing and collision points at each common instant for two road users. ''' 220 '''Computes all crossing and collision points at each common instant for two road users. '''
221 TTCs = {} 221 TTCs = {}
222 collisionProbabilities = {} 222 collisionProbabilities = {}
223 # if usePrototypes:
224 # route1= getRoute(self.roadUser1,prototypes,objects,noiseEntryNums,noiseExitNums,useDestination)
225 # route2= getRoute(self.roadUser2,prototypes,objects,noiseEntryNums,noiseExitNums,useDestination)
226
227 if timeInterval is not None: 223 if timeInterval is not None:
228 commonTimeInterval = timeInterval 224 commonTimeInterval = timeInterval
229 else: 225 else:
230 commonTimeInterval = self.timeInterval 226 commonTimeInterval = self.timeInterval
231 self.collisionPoints, crossingZones = predictionParameters.computeCrossingsCollisions(self.roadUser1, self.roadUser2, collisionDistanceThreshold, timeHorizon, computeCZ, debug, commonTimeInterval, nProcesses)#,usePrototypes,route1,route2,prototypes,secondStepPrototypes,nMatching,objects,noiseEntryNums,noiseExitNums,minSimilarity,mostMatched,useDestination,useSpeedPrototype,acceptPartialLength, step) 227 self.collisionPoints, crossingZones = predictionParameters.computeCrossingsCollisions(self.roadUser1, self.roadUser2, collisionDistanceThreshold, timeHorizon, computeCZ, debug, commonTimeInterval)
232 for i, cps in self.collisionPoints.iteritems(): 228 for i, cps in self.collisionPoints.iteritems():
233 TTCs[i] = prediction.SafetyPoint.computeExpectedIndicator(cps) 229 TTCs[i] = prediction.SafetyPoint.computeExpectedIndicator(cps)
234 collisionProbabilities[i] = sum([p.probability for p in cps]) 230 collisionProbabilities[i] = sum([p.probability for p in cps])
235 if len(TTCs) > 0: 231 if len(TTCs) > 0:
236 self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[7], TTCs, mostSevereIsMax=False)) 232 self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[7], TTCs, mostSevereIsMax=False))
291 if i<len(interactions): 287 if i<len(interactions):
292 return interactions[i] 288 return interactions[i]
293 else: 289 else:
294 return None 290 return None
295 291
292 def computeIndicators(interactions, computeMotionPrediction, computePET, predictionParameters, collisionDistanceThreshold, timeHorizon, computeCZ = False, debug = False, timeInterval = None):
293 for inter in interactions:
294 print('processing interaction {}'.format(inter.getNum())) # logging.debug('processing interaction {}'.format(inter.getNum()))
295 inter.computeIndicators()
296 if computeMotionPrediction:
297 inter.computeCrossingsCollisions(predictionParameters, collisionDistanceThreshold, timeHorizon, computeCZ, debug, timeInterval)
298 if computePET:
299 inter.computePET(collisionDistanceTreshold)
300 return interactions
301
296 def aggregateSafetyPoints(interactions, pointType = 'collision'): 302 def aggregateSafetyPoints(interactions, pointType = 'collision'):
297 '''Put all collision points or crossing zones in a list for display''' 303 '''Put all collision points or crossing zones in a list for display'''
298 allPoints = [] 304 allPoints = []
299 if pointType == 'collision': 305 if pointType == 'collision':
300 for i in interactions: 306 for i in interactions: