Mercurial > hg > nsaunier > traffic-intelligence
comparison python/events.py @ 619:dc2d0a0d7fe1
merged code from Mohamed Gomaa Mohamed for the use of points of interests in mation pattern learning and motion prediction (TRB 2015)
| author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
|---|---|
| date | Wed, 10 Dec 2014 15:27:08 -0500 |
| parents | 306db0f3c7a2 |
| children | 82e9f78a4714 |
comparison
equal
deleted
inserted
replaced
| 596:04a8304e13f0 | 619:dc2d0a0d7fe1 |
|---|---|
| 7 | 7 |
| 8 import multiprocessing | 8 import multiprocessing |
| 9 import itertools | 9 import itertools |
| 10 | 10 |
| 11 import moving, prediction, indicators, utils | 11 import moving, prediction, indicators, utils |
| 12 | |
| 13 __metaclass__ = type | 12 __metaclass__ = type |
| 13 | |
| 14 def findRoute(prototypes,objects,i,j,noiseEntryNums,noiseExitNums,minSimilarity= 0.3, spatialThreshold=1.0, delta=180): | |
| 15 if i[0] not in noiseEntryNums: | |
| 16 prototypesRoutes= [ x for x in sorted(prototypes.keys()) if i[0]==x[0]] | |
| 17 elif i[1] not in noiseExitNums: | |
| 18 prototypesRoutes=[ x for x in sorted(prototypes.keys()) if i[1]==x[1]] | |
| 19 else: | |
| 20 prototypesRoutes=[x for x in sorted(prototypes.keys())] | |
| 21 routeSim={} | |
| 22 lcss = utils.LCSS(similarityFunc=lambda x,y: (distanceForLCSS(x,y) <= spatialThreshold),delta=delta) | |
| 23 for y in prototypesRoutes: | |
| 24 if y in prototypes.keys(): | |
| 25 prototypesIDs=prototypes[y] | |
| 26 similarity=[] | |
| 27 for x in prototypesIDs: | |
| 28 s=lcss.computeNormalized(objects[j].positions, objects[x].positions) | |
| 29 similarity.append(s) | |
| 30 routeSim[y]=max(similarity) | |
| 31 route=max(routeSim, key=routeSim.get) | |
| 32 if routeSim[route]>=minSimilarity: | |
| 33 return route | |
| 34 else: | |
| 35 return i | |
| 36 | |
| 37 def getRoute(obj,prototypes,objects,noiseEntryNums,noiseExitNums,useDestination=True): | |
| 38 route=(obj.startRouteID,obj.endRouteID) | |
| 39 if useDestination: | |
| 40 if route not in prototypes.keys(): | |
| 41 route= findRoute(prototypes,objects,route,obj.getNum(),noiseEntryNums,noiseExitNums) | |
| 42 return route | |
| 14 | 43 |
| 15 class Interaction(moving.STObject): | 44 class Interaction(moving.STObject): |
| 16 '''Class for an interaction between two road users | 45 '''Class for an interaction between two road users |
| 17 or a road user and an obstacle | 46 or a road user and an obstacle |
| 18 | 47 |
| 122 minDistance={} | 151 minDistance={} |
| 123 for instant in self.timeInterval: | 152 for instant in self.timeInterval: |
| 124 minDistance[instant] = moving.MovingObject.minDistance(self.roadUser1, self.roadUser2, instant) | 153 minDistance[instant] = moving.MovingObject.minDistance(self.roadUser1, self.roadUser2, instant) |
| 125 self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[3], minDistance)) | 154 self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[3], minDistance)) |
| 126 | 155 |
| 127 def computeCrossingsCollisions(self, predictionParameters, collisionDistanceThreshold, timeHorizon, computeCZ = False, debug = False, timeInterval = None, nProcesses = 1): | 156 def computeCrossingsCollisions(self, predictionParameters, collisionDistanceThreshold, timeHorizon, computeCZ = False, debug = False, timeInterval = None, nProcesses = 1,usePrototypes=True,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): |
| 128 '''Computes all crossing and collision points at each common instant for two road users. ''' | 157 '''Computes all crossing and collision points at each common instant for two road users. ''' |
| 129 self.collisionPoints={} | 158 self.collisionPoints={} |
| 130 self.crossingZones={} | 159 self.crossingZones={} |
| 131 TTCs = {} | 160 TTCs = {} |
| 161 if usePrototypes: | |
| 162 route1= getRoute(self.roadUser1,prototypes,objects,noiseEntryNums,noiseExitNums,useDestination) | |
| 163 route2= getRoute(self.roadUser2,prototypes,objects,noiseEntryNums,noiseExitNums,useDestination) | |
| 132 | 164 |
| 133 if timeInterval: | 165 if timeInterval: |
| 134 commonTimeInterval = timeInterval | 166 commonTimeInterval = timeInterval |
| 135 else: | 167 else: |
| 136 commonTimeInterval = self.timeInterval | 168 commonTimeInterval = self.timeInterval |
| 137 self.collisionPoints, self.crossingZones = prediction.computeCrossingsCollisions(predictionParameters, self.roadUser1, self.roadUser2, collisionDistanceThreshold, timeHorizon, computeCZ, debug, commonTimeInterval, nProcesses) | 169 self.collisionPoints, self.crossingZones = prediction.computeCrossingsCollisions(predictionParameters, 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) |
| 138 for i, cp in self.collisionPoints.iteritems(): | 170 for i, cp in self.collisionPoints.iteritems(): |
| 139 TTCs[i] = prediction.SafetyPoint.computeExpectedIndicator(cp) | 171 TTCs[i] = prediction.SafetyPoint.computeExpectedIndicator(cp) |
| 140 # add probability of collision, and probability of successful evasive action | 172 # add probability of collision, and probability of successful evasive action |
| 141 self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[7], TTCs)) | 173 self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[7], TTCs)) |
| 142 | 174 |
| 143 if computeCZ: | 175 if computeCZ: |
| 144 pPETs = {} | 176 pPETs = {} |
| 145 for i in list(commonTimeInterval)[:-1]: | 177 for i, cz in self.crossingZones.iteritems(): |
| 146 if len(self.crossingZones[i]) > 0: | 178 pPETs[i] = prediction.SafetyPoint.computeExpectedIndicator(cz) |
| 147 pPETs[i] = prediction.SafetyPoint.computeExpectedIndicator(self.crossingZones[i]) | |
| 148 self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[9], pPETs)) | 179 self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[9], pPETs)) |
| 149 | 180 |
| 150 def addVideoFilename(self,videoFilename): | 181 def addVideoFilename(self,videoFilename): |
| 151 self.videoFilename= videoFilename | 182 self.videoFilename= videoFilename |
| 152 | 183 |
| 153 def addInteractionType(self,interactionType): | 184 def addInteractionType(self,interactionType): |
| 154 ''' interaction types: conflict or collision if they are known''' | 185 ''' interaction types: conflict or collision if they are known''' |
| 155 self.interactionType= interactionType | 186 self.interactionType= interactionType |
| 156 | 187 |
