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: