Mercurial > hg > nsaunier > traffic-intelligence
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: |
