Mercurial Hosting > traffic-intelligence
changeset 948:584b9405e494
added safety analysis parameters for motion patterns
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Fri, 21 Jul 2017 12:11:55 -0400 |
parents | 053484e08947 |
children | d6c1c05d11f5 |
files | python/prediction.py python/storage.py scripts/learn-motion-patterns.py scripts/safety-analysis.py tracking.cfg |
diffstat | 5 files changed, 20 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/python/prediction.py Fri Jul 21 11:31:42 2017 -0400 +++ b/python/prediction.py Fri Jul 21 12:11:55 2017 -0400 @@ -583,7 +583,6 @@ firstInstants.sort(key = lambda t: t[1]) for f,t1 in firstInstants[:min(self.nPredictedTrajectories, len(firstInstants), self.nPredictedTrajectories-len(obj.currentPredictionFeatures))]: obj.currentPredictionFeatures.append(f) - print len(obj.currentPredictionFeatures), self.nPredictedTrajectories for f in obj.currentPredictionFeatures: self.addPredictedTrajectories(predictedTrajectories, f, instant) else:
--- a/python/storage.py Fri Jul 21 11:31:42 2017 -0400 +++ b/python/storage.py Fri Jul 21 12:11:55 2017 -0400 @@ -1366,11 +1366,13 @@ self.firstFrameNum = config.getint(self.sectionHeader, 'frame1') self.videoFrameRate = config.getfloat(self.sectionHeader, 'video-fps') + self.minFeatureTime = config.getfloat(self.sectionHeader, 'min-feature-time') + self.classifierFilename = config.get(self.sectionHeader, 'classifier-filename') # Safety parameters self.maxPredictedSpeed = config.getfloat(self.sectionHeader, 'max-predicted-speed')/3.6/self.videoFrameRate - self.predictionTimeHorizon = config.getfloat(self.sectionHeader, 'prediction-time-horizon')*self.videoFrameRate + self.predictionTimeHorizon = config.getfloat(self.sectionHeader, 'prediction-time-horizon') self.collisionDistance = config.getfloat(self.sectionHeader, 'collision-distance') self.crossingZones = config.getboolean(self.sectionHeader, 'crossing-zones') self.predictionMethod = config.get(self.sectionHeader, 'prediction-method') @@ -1382,6 +1384,9 @@ self.maxExtremeSteering = config.getfloat(self.sectionHeader, 'max-extreme-steering')/self.videoFrameRate self.useFeaturesForPrediction = config.getboolean(self.sectionHeader, 'use-features-prediction') self.constantSpeedPrototypePrediction = config.getboolean(self.sectionHeader, 'constant-speed') + self.maxLcssDistance = config.getfloat(self.sectionHeader, 'max-lcss-distance') + self.lcssMetric = config.get(self.sectionHeader, 'lcss-metric') + self.minLcssSimilarity = config.getfloat(self.sectionHeader, 'min-lcss-similarity') def __init__(self, filename = None): if filename is not None and path.exists(filename):
--- a/scripts/learn-motion-patterns.py Fri Jul 21 11:31:42 2017 -0400 +++ b/scripts/learn-motion-patterns.py Fri Jul 21 12:11:55 2017 -0400 @@ -36,7 +36,7 @@ # 4. load objects from several files, save in another -> see metadata: site with view and times # 5. keep prototypes, with positions/velocities, in separate db (keep link to original data through filename, type and index) -# TODO add possibility to clutesr with velocities +# TODO add possibility to cluster with velocities # TODO add possibility to start with saved prototypes so that one can incrementally learn from several databases # save the objects that match the prototypes # write an assignment function for objects
--- a/scripts/safety-analysis.py Fri Jul 21 11:31:42 2017 -0400 +++ b/scripts/safety-analysis.py Fri Jul 21 12:11:55 2017 -0400 @@ -56,7 +56,7 @@ prototypes = storage.loadPrototypesFromSqlite(args.prototypeDatabaseFilename) for p in prototypes: p.getMovingObject().computeCumulativeDistances() - predictionParameters = prediction.PrototypePredictionParameters(prototypes, params.nPredictedTrajectories, 2., 0.4, 'cityblock', 10, params.constantSpeedPrototypePrediction, params.useFeaturesForPrediction) + predictionParameters = prediction.PrototypePredictionParameters(prototypes, params.nPredictedTrajectories, params.maxLcssDistance, params.minLcssSimilarity, params.lcssMetric, params.minFeatureTime, params.constantSpeedPrototypePrediction, params.useFeaturesForPrediction) # else: # no else required, since parameters is required as argument @@ -68,16 +68,13 @@ # params.useFeaturesForPrediction) objects = storage.loadTrajectoriesFromSqlite(params.databaseFilename, 'object', args.nObjects, withFeatures = (params.useFeaturesForPrediction or predictionMethod == 'ps' or predictionMethod == 'mp')) -# if params.useFeaturesForPrediction: -# features = storage.loadTrajectoriesFromSqlite(params.databaseFilename,'feature') # needed if normal adaptation -# for obj in objects: -# obj.setFeatures(features) interactions = events.createInteractions(objects) for inter in interactions: + print('processing interaction {}'.format(inter.getNum()) inter.computeIndicators() if not args.noMotionPrediction: - inter.computeCrossingsCollisions(predictionParameters, params.collisionDistance, params.predictionTimeHorizon, params.crossingZones, nProcesses = args.nProcesses, debug = True) + inter.computeCrossingsCollisions(predictionParameters, params.collisionDistance, params.predictionTimeHorizon, params.crossingZones, nProcesses = args.nProcesses) if args.computePET: for inter in interactions:
--- a/tracking.cfg Fri Jul 21 11:31:42 2017 -0400 +++ b/tracking.cfg Fri Jul 21 12:11:55 2017 -0400 @@ -75,7 +75,7 @@ # segmentation distance in feature grouping (world distance unit or px) mm-segmentation-distance = 1.81511847456 # maximum distance between features for grouping (world distance unit or px) -max-distance = 5 +mm-max-distance = 5 # minimum cosine of the angle between the velocity vectors for grouping min-velocity-cosine = 0.8 # minimum average number of features per frame to create a vehicle hypothesis @@ -86,7 +86,7 @@ # maximum speed when predicting future motion (km/h) max-predicted-speed = 50 # time horizon for collision prediction (s) -prediction-time-horizon = 5 +prediction-time-horizon = 150 # collision distance threshold (m) collision-distance = 1.8 # option to compute crossing zones and predicted PET @@ -108,4 +108,11 @@ # use feature positions and velocities for prediction use-features-prediction = true # use constant speed (motion pattern based prediction) -constant-speed = false \ No newline at end of file +constant-speed = false +# point distance threshold, for the chosen metric for trajectory matching using LCSS +max-lcss-distance = 2. +# distance metric for trajectory matching using LCSS +lcss-metric = cityblock +# similarity threshold for trajectory matching on normalized LCSS +min-lcss-similarity = 0.4 +# minimum past feature length for past trajectory matching for motion prediction -> using min-feature-time \ No newline at end of file