Mercurial Hosting > traffic-intelligence
diff scripts/learn-motion-patterns.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 | 584b9405e494 |
children | 2a4f174879dd |
line wrap: on
line diff
--- a/scripts/learn-motion-patterns.py Fri Jul 21 12:11:55 2017 -0400 +++ b/scripts/learn-motion-patterns.py Fri Jul 21 17:52:56 2017 -0400 @@ -56,22 +56,37 @@ else: objects = storage.loadTrajectoriesFromSqlite(args.databaseFilename, trajectoryType, withFeatures = (args.trajectoryType == 'objectfeatures'), objectNumbers = args.nTrajectories, timeStep = args.positionSubsamplingRate) -if args.inputPrototypeDatabaseFilename is not None: - prototypeIndices, dbFilenames, trajectoryTypes, nMatchings, prototypes = storage.loadPrototypesFromSqlite(args.inputPrototypeDatabaseFilename, True) trajectories = [o.getPositions().asArray().T for o in objects] +if args.inputPrototypeDatabaseFilename is not None: + initialPrototypes = storage.loadPrototypesFromSqlite(args.inputPrototypeDatabaseFilename, True) + trajectories = [p.getMovingObject().getPositions().asArray().T for p in initialPrototypes]+trajectories + initialPrototypeIndices = range(len(initialPrototypes)) +else: + initialPrototypes = [] + initialPrototypeIndices = None lcss = utils.LCSS(metric = args.metric, epsilon = args.epsilon) nTrajectories = len(trajectories) similarities = -np.ones((nTrajectories, nTrajectories)) - -prototypeIndices, labels = ml.prototypeCluster(trajectories, similarities, args.minSimilarity, lambda x,y : lcss.computeNormalized(x, y), args.minClusterSize, args.optimizeCentroid, args.randomInitialization, True, None) # this line can be called again without reinitializing similarities +# the next line can be called again without reinitializing similarities +prototypeIndices, labels = ml.prototypeCluster(trajectories, similarities, args.minSimilarity, lambda x,y : lcss.computeNormalized(x, y), args.minClusterSize, args.optimizeCentroid, args.randomInitialization, args.inputPrototypeDatabaseFilename is not None, initialPrototypeIndices) # assignment is done only if working on the same database, otherwise the matchings will not compare and one has to to matchings on a large scale at once clusterSizes = ml.computeClusterSizes(labels, prototypeIndices, -1) print(clusterSizes) -prototypes = [moving.Prototype(args.databaseFilename, objects[i].getNum(), prototypeType, clusterSizes[i]) for i in prototypeIndices] +prototypes = [] +for i in prototypeIndices: + if i<len(initialPrototypes): + initialPrototypes[i].nMatchings = 0 + prototypes.append(initialPrototypes[i]) + else: + if args.inputPrototypeDatabaseFilename is None: + nmatchings = clusterSizes[i] + else: + nmatchings = 0 + prototypes.append(moving.Prototype(args.databaseFilename, objects[i].getNum(), prototypeType, nmatchings) if args.outputPrototypeDatabaseFilename is None: outputPrototypeDatabaseFilename = args.databaseFilename else: