annotate scripts/learn-motion-patterns.py @ 953:989917b1ed85

assign and learn work
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Tue, 25 Jul 2017 17:36:07 -0400
parents a9b2beef0db4
children cc89267b5ff9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
734
1d4dcb5c8708 first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
1 #! /usr/bin/env python
1d4dcb5c8708 first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
2
1d4dcb5c8708 first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
3 import sys, argparse
1d4dcb5c8708 first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
4
1d4dcb5c8708 first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
5 #import matplotlib.pyplot as plt
1d4dcb5c8708 first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
6 import numpy as np
1d4dcb5c8708 first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
7
921
630934595871 work in progress with prototype class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 920
diff changeset
8 import ml, utils, storage, moving
734
1d4dcb5c8708 first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
9
1d4dcb5c8708 first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
10 parser = argparse.ArgumentParser(description='The program learns prototypes for the motion patterns') #, epilog = ''
1d4dcb5c8708 first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
11 #parser.add_argument('--cfg', dest = 'configFilename', help = 'name of the configuration file')
1d4dcb5c8708 first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
12 parser.add_argument('-d', dest = 'databaseFilename', help = 'name of the Sqlite database file', required = True)
921
630934595871 work in progress with prototype class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 920
diff changeset
13 parser.add_argument('-o', dest = 'outputPrototypeDatabaseFilename', help = 'name of the Sqlite database file to save prototypes')
630934595871 work in progress with prototype class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 920
diff changeset
14 parser.add_argument('-i', dest = 'inputPrototypeDatabaseFilename', help = 'name of the Sqlite database file for prototypes to start the algorithm with')
878
8e8ec4ece66e minor + bug corrected in motion pattern learning
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 870
diff changeset
15 parser.add_argument('-t', dest = 'trajectoryType', help = 'type of trajectories to learn from', choices = ['objectfeatures', 'feature', 'object'], default = 'objectfeatures')
920
499154254f37 improved prototype loading
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 919
diff changeset
16 parser.add_argument('--max-nobjectfeatures', dest = 'maxNObjectFeatures', help = 'maximum number of features per object to load', type = int, default = 1)
734
1d4dcb5c8708 first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
17 parser.add_argument('-n', dest = 'nTrajectories', help = 'number of the object or feature trajectories to load', type = int, default = None)
1d4dcb5c8708 first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
18 parser.add_argument('-e', dest = 'epsilon', help = 'distance for the similarity of trajectory points', type = float, required = True)
1d4dcb5c8708 first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
19 parser.add_argument('--metric', dest = 'metric', help = 'metric for the similarity of trajectory points', default = 'cityblock') # default is manhattan distance
1d4dcb5c8708 first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
20 parser.add_argument('-s', dest = 'minSimilarity', help = 'minimum similarity to put a trajectory in a cluster', type = float, required = True)
953
989917b1ed85 assign and learn work
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 952
diff changeset
21 parser.add_argument('-c', dest = 'minClusterSize', help = 'minimum cluster size', type = int, default = 0)
952
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
22 parser.add_argument('--learn', dest = 'learn', help = 'learn', action = 'store_true')
908
b297525b2cbf added options to the prototype cluster algorithm, work in progress
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 907
diff changeset
23 parser.add_argument('--optimize', dest = 'optimizeCentroid', help = 'recompute centroid at each assignment', action = 'store_true')
843
5dc7a507353e updated to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 835
diff changeset
24 parser.add_argument('--random', dest = 'randomInitialization', help = 'random initialization of clustering algorithm', action = 'store_true')
907
9fd7b18f75b4 re arranged motion pattern learning
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 878
diff changeset
25 parser.add_argument('--subsample', dest = 'positionSubsamplingRate', help = 'rate of position subsampling (1 every n positions)', type = int)
843
5dc7a507353e updated to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 835
diff changeset
26 parser.add_argument('--display', dest = 'display', help = 'display trajectories', action = 'store_true')
5dc7a507353e updated to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 835
diff changeset
27 parser.add_argument('--save-similarities', dest = 'saveSimilarities', help = 'save computed similarities (in addition to prototypes)', action = 'store_true')
927
c030f735c594 added assignment of trajectories to prototypes and cleanup of insert queries
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 922
diff changeset
28 parser.add_argument('--save-matches', dest = 'saveMatches', help = 'saves the assignments of the objects (not for features) to the prototypes', action = 'store_true')
952
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
29 parser.add_argument('--assign', dest = 'assign', help = 'assigns the objects to the prototypes and saves them (do not use min cluster size as it will discard prototypes at the beginning if the initial cluster is too small)', action = 'store_true')
734
1d4dcb5c8708 first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
30
1d4dcb5c8708 first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
31 args = parser.parse_args()
1d4dcb5c8708 first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
32
907
9fd7b18f75b4 re arranged motion pattern learning
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 878
diff changeset
33 # use cases
952
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
34 # 1. learn proto from one file, save in same or another
907
9fd7b18f75b4 re arranged motion pattern learning
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 878
diff changeset
35 # 2. load proto, load objects, update proto, save proto
9fd7b18f75b4 re arranged motion pattern learning
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 878
diff changeset
36 # 3. assign objects from one db to proto
920
499154254f37 improved prototype loading
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 919
diff changeset
37 # 4. load objects from several files, save in another -> see metadata: site with view and times
917
89cc05867c4c reorg and work in progress
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 910
diff changeset
38 # 5. keep prototypes, with positions/velocities, in separate db (keep link to original data through filename, type and index)
907
9fd7b18f75b4 re arranged motion pattern learning
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 878
diff changeset
39
948
584b9405e494 added safety analysis parameters for motion patterns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 927
diff changeset
40 # TODO add possibility to cluster with velocities
952
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
41 # TODO add possibilite to load all trajectories and use minclustersize
907
9fd7b18f75b4 re arranged motion pattern learning
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 878
diff changeset
42 # save the objects that match the prototypes
9fd7b18f75b4 re arranged motion pattern learning
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 878
diff changeset
43 # write an assignment function for objects
734
1d4dcb5c8708 first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
44
1d4dcb5c8708 first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
45 trajectoryType = args.trajectoryType
878
8e8ec4ece66e minor + bug corrected in motion pattern learning
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 870
diff changeset
46 prototypeType = args.trajectoryType
734
1d4dcb5c8708 first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
47 if args.trajectoryType == 'objectfeatures':
1d4dcb5c8708 first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
48 trajectoryType = 'object'
878
8e8ec4ece66e minor + bug corrected in motion pattern learning
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 870
diff changeset
49 prototypeType = 'feature'
734
1d4dcb5c8708 first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
50
1d4dcb5c8708 first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
51 if args.trajectoryType == 'objectfeatures':
910
b58a1061a717 loading is faster for longest object features
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 908
diff changeset
52 objectFeatureNumbers = storage.loadObjectFeatureFrameNumbers(args.databaseFilename, objectNumbers = args.nTrajectories)
b58a1061a717 loading is faster for longest object features
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 908
diff changeset
53 featureNumbers = []
b58a1061a717 loading is faster for longest object features
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 908
diff changeset
54 for numbers in objectFeatureNumbers.values():
b58a1061a717 loading is faster for longest object features
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 908
diff changeset
55 featureNumbers += numbers[:min(len(numbers), args.maxNObjectFeatures)]
b58a1061a717 loading is faster for longest object features
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 908
diff changeset
56 objects = storage.loadTrajectoriesFromSqlite(args.databaseFilename, 'feature', objectNumbers = featureNumbers, timeStep = args.positionSubsamplingRate)
b58a1061a717 loading is faster for longest object features
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 908
diff changeset
57 else:
b58a1061a717 loading is faster for longest object features
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 908
diff changeset
58 objects = storage.loadTrajectoriesFromSqlite(args.databaseFilename, trajectoryType, withFeatures = (args.trajectoryType == 'objectfeatures'), objectNumbers = args.nTrajectories, timeStep = args.positionSubsamplingRate)
734
1d4dcb5c8708 first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
59
921
630934595871 work in progress with prototype class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 920
diff changeset
60
734
1d4dcb5c8708 first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
61 trajectories = [o.getPositions().asArray().T for o in objects]
949
d6c1c05d11f5 modified multithreading at the interaction level for safety computations
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 948
diff changeset
62 if args.inputPrototypeDatabaseFilename is not None:
d6c1c05d11f5 modified multithreading at the interaction level for safety computations
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 948
diff changeset
63 initialPrototypes = storage.loadPrototypesFromSqlite(args.inputPrototypeDatabaseFilename, True)
d6c1c05d11f5 modified multithreading at the interaction level for safety computations
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 948
diff changeset
64 trajectories = [p.getMovingObject().getPositions().asArray().T for p in initialPrototypes]+trajectories
952
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
65 if len(initialPrototypes) > 0:
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
66 initialPrototypeIndices = range(len(initialPrototypes))
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
67 else:
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
68 initialPrototypeIndices = None
949
d6c1c05d11f5 modified multithreading at the interaction level for safety computations
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 948
diff changeset
69 else:
d6c1c05d11f5 modified multithreading at the interaction level for safety computations
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 948
diff changeset
70 initialPrototypes = []
d6c1c05d11f5 modified multithreading at the interaction level for safety computations
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 948
diff changeset
71 initialPrototypeIndices = None
734
1d4dcb5c8708 first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
72
1d4dcb5c8708 first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
73 lcss = utils.LCSS(metric = args.metric, epsilon = args.epsilon)
1d4dcb5c8708 first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
74 nTrajectories = len(trajectories)
1d4dcb5c8708 first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
75
735
0e875a7f5759 modified prototypeCluster algorithm to enforce similarity when re-assigning and to compute only the necessary similarities
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 734
diff changeset
76 similarities = -np.ones((nTrajectories, nTrajectories))
952
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
77 similarityFunc = lambda x,y : lcss.computeNormalized(x, y)
949
d6c1c05d11f5 modified multithreading at the interaction level for safety computations
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 948
diff changeset
78 # the next line can be called again without reinitializing similarities
952
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
79 if args.learn:
953
989917b1ed85 assign and learn work
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 952
diff changeset
80 prototypeIndices = ml.prototypeCluster(trajectories, similarities, args.minSimilarity, similarityFunc, args.optimizeCentroid, args.randomInitialization, initialPrototypeIndices)
952
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
81 # assignment is done if explicitly passed as argument or if working on the same database (starting prototypes from scratch and assigning the )
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
82 # (otherwise the matchings will not compare and one has to to matchings on a large scale at once)
953
989917b1ed85 assign and learn work
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 952
diff changeset
83 else:
989917b1ed85 assign and learn work
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 952
diff changeset
84 prototypeIndices = initialPrototypeIndices
952
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
85
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
86 if args.assign:
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
87 prototypeIndices, labels = ml.assignToPrototypeClusters(trajectories, prototypeIndices, similarities, args.minSimilarity, similarityFunc, args.minClusterSize)
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
88 clusterSizes = ml.computeClusterSizes(labels, prototypeIndices, -1)
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
89 print(clusterSizes)
734
1d4dcb5c8708 first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
90
952
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
91 if args.learn or args.assign:
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
92 prototypes = []
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
93 for i in prototypeIndices:
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
94 if args.assign:
953
989917b1ed85 assign and learn work
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 952
diff changeset
95 nMatchings = clusterSizes[i]-1
952
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
96 else:
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
97 nMatchings = 0
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
98 if i<len(initialPrototypes):
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
99 initialPrototypes[i].nMatchings += nMatchings
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
100 prototypes.append(initialPrototypes[i])
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
101 else:
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
102 prototypes.append(moving.Prototype(args.databaseFilename, objects[i-len(initialPrototypes)].getNum(), prototypeType, nMatchings))
844
5a68779d7777 added capability to save prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 843
diff changeset
103
952
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
104 if args.outputPrototypeDatabaseFilename is None:
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
105 outputPrototypeDatabaseFilename = args.databaseFilename
949
d6c1c05d11f5 modified multithreading at the interaction level for safety computations
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 948
diff changeset
106 else:
952
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
107 outputPrototypeDatabaseFilename = args.outputPrototypeDatabaseFilename
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
108 if args.inputPrototypeDatabaseFilename == args.outputPrototypeDatabaseFilename:
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
109 storage.deleteFromSqlite(args.outputPrototypeDatabaseFilename, 'prototype')
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
110 storage.savePrototypesToSqlite(outputPrototypeDatabaseFilename, prototypes)
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
111
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
112 if args.saveSimilarities:
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
113 # todo save trajectories and prototypes
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
114 np.savetxt(utils.removeExtension(args.databaseFilename)+'-prototype-similarities.txt.gz', similarities, '%.4f')
951
2a4f174879dd corrected bug
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 949
diff changeset
115
952
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
116 labelsToProtoIndices = {protoId: i for i, protoId in enumerate(prototypeIndices)}
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
117 if args.assign and args.saveMatches: # or args.assign
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
118 # save in the db that contained originally the data
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
119 # retirer les assignations anterieures?
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
120 storage.savePrototypeAssignmentsToSqlite(args.databaseFilename, objects, [labelsToProtoIndices[l] for l in labels], prototypes)
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
121
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
122 if args.display and args.assign:
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
123 from matplotlib.pyplot import figure, show, axis
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
124 figure()
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
125 for i,o in enumerate(objects):
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
126 if i not in prototypeIndices:
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
127 if labels[i] < 0:
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
128 o.plot('kx')
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
129 else:
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
130 o.plot(utils.colors[labels[i]])
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
131 for i in prototypeIndices:
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
132 objects[i].plot(utils.colors[i]+'o')
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
133 axis('equal')
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
134 show()
921
630934595871 work in progress with prototype class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 920
diff changeset
135 else:
952
a9b2beef0db4 loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 951
diff changeset
136 print('Not learning nor assigning: doing nothing')