Mercurial Hosting > traffic-intelligence
annotate scripts/learn-motion-patterns.py @ 989:132d84ce9f0c
bug corrected
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Thu, 08 Mar 2018 21:56:17 -0500 |
parents | 23f98ebb113f |
children | 933670761a57 |
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 |
979
cc89267b5ff9
work on learning and assigning
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
953
diff
changeset
|
45 # load trajectories to cluster or assign |
734
1d4dcb5c8708
first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
46 if args.trajectoryType == 'objectfeatures': |
979
cc89267b5ff9
work on learning and assigning
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
953
diff
changeset
|
47 trajectoryType = 'feature' |
910
b58a1061a717
loading is faster for longest object features
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
908
diff
changeset
|
48 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
|
49 featureNumbers = [] |
b58a1061a717
loading is faster for longest object features
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
908
diff
changeset
|
50 for numbers in objectFeatureNumbers.values(): |
b58a1061a717
loading is faster for longest object features
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
908
diff
changeset
|
51 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
|
52 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
|
53 else: |
979
cc89267b5ff9
work on learning and assigning
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
953
diff
changeset
|
54 trajectoryType = args.trajectoryType |
cc89267b5ff9
work on learning and assigning
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
953
diff
changeset
|
55 objects = storage.loadTrajectoriesFromSqlite(args.databaseFilename, trajectoryType, objectNumbers = args.nTrajectories, timeStep = args.positionSubsamplingRate) |
734
1d4dcb5c8708
first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
56 |
1d4dcb5c8708
first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
57 trajectories = [o.getPositions().asArray().T for o in objects] |
979
cc89267b5ff9
work on learning and assigning
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
953
diff
changeset
|
58 |
cc89267b5ff9
work on learning and assigning
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
953
diff
changeset
|
59 # load initial prototypes, if any |
949
d6c1c05d11f5
modified multithreading at the interaction level for safety computations
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
948
diff
changeset
|
60 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
|
61 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
|
62 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
|
63 if len(initialPrototypes) > 0: |
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
64 initialPrototypeIndices = range(len(initialPrototypes)) |
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
65 else: |
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
66 initialPrototypeIndices = None |
949
d6c1c05d11f5
modified multithreading at the interaction level for safety computations
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
948
diff
changeset
|
67 else: |
d6c1c05d11f5
modified multithreading at the interaction level for safety computations
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
948
diff
changeset
|
68 initialPrototypes = [] |
d6c1c05d11f5
modified multithreading at the interaction level for safety computations
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
948
diff
changeset
|
69 initialPrototypeIndices = None |
734
1d4dcb5c8708
first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
70 |
1d4dcb5c8708
first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
71 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
|
72 nTrajectories = len(trajectories) |
1d4dcb5c8708
first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
73 |
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
|
74 similarities = -np.ones((nTrajectories, nTrajectories)) |
952
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
75 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
|
76 # 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
|
77 if args.learn: |
953
989917b1ed85
assign and learn work
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
952
diff
changeset
|
78 prototypeIndices = ml.prototypeCluster(trajectories, similarities, args.minSimilarity, similarityFunc, args.optimizeCentroid, args.randomInitialization, initialPrototypeIndices) |
980
23f98ebb113f
first tests for clustering algo
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
979
diff
changeset
|
79 # assignment is done if explicitly passed as argument or if working on the same database (starting prototypes from scratch and assigning them) |
953
989917b1ed85
assign and learn work
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
952
diff
changeset
|
80 else: |
989917b1ed85
assign and learn work
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
952
diff
changeset
|
81 prototypeIndices = initialPrototypeIndices |
952
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
82 |
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
83 if args.assign: |
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
84 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
|
85 clusterSizes = ml.computeClusterSizes(labels, prototypeIndices, -1) |
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
86 print(clusterSizes) |
734
1d4dcb5c8708
first example script to learn prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
87 |
952
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
88 if args.learn or args.assign: |
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
89 prototypes = [] |
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
90 for i in prototypeIndices: |
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
91 if args.assign: |
953
989917b1ed85
assign and learn work
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
952
diff
changeset
|
92 nMatchings = clusterSizes[i]-1 |
952
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
93 else: |
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
94 nMatchings = 0 |
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
95 if i<len(initialPrototypes): |
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
96 initialPrototypes[i].nMatchings += nMatchings |
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
97 prototypes.append(initialPrototypes[i]) |
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
98 else: |
979
cc89267b5ff9
work on learning and assigning
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
953
diff
changeset
|
99 prototypes.append(moving.Prototype(args.databaseFilename, objects[i-len(initialPrototypes)].getNum(), trajectoryType, nMatchings)) |
844
5a68779d7777
added capability to save prototypes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
843
diff
changeset
|
100 |
952
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
101 if args.outputPrototypeDatabaseFilename is None: |
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
102 outputPrototypeDatabaseFilename = args.databaseFilename |
949
d6c1c05d11f5
modified multithreading at the interaction level for safety computations
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
948
diff
changeset
|
103 else: |
952
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
104 outputPrototypeDatabaseFilename = args.outputPrototypeDatabaseFilename |
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
105 if args.inputPrototypeDatabaseFilename == args.outputPrototypeDatabaseFilename: |
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
106 storage.deleteFromSqlite(args.outputPrototypeDatabaseFilename, 'prototype') |
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
107 storage.savePrototypesToSqlite(outputPrototypeDatabaseFilename, prototypes) |
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
108 |
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
109 if args.saveSimilarities: |
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
110 # todo save trajectories and prototypes |
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
111 np.savetxt(utils.removeExtension(args.databaseFilename)+'-prototype-similarities.txt.gz', similarities, '%.4f') |
951 | 112 |
952
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
113 labelsToProtoIndices = {protoId: i for i, protoId in enumerate(prototypeIndices)} |
979
cc89267b5ff9
work on learning and assigning
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
953
diff
changeset
|
114 if args.assign and args.saveMatches: |
cc89267b5ff9
work on learning and assigning
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
953
diff
changeset
|
115 storage.savePrototypeAssignmentsToSqlite(args.databaseFilename, objects, trajectoryType, [labelsToProtoIndices[l] for l in labels], prototypes) |
952
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
116 |
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
117 if args.display and args.assign: |
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
118 from matplotlib.pyplot import figure, show, axis |
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
119 figure() |
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
120 for i,o in enumerate(objects): |
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
121 if i not in prototypeIndices: |
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
122 if labels[i] < 0: |
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
123 o.plot('kx') |
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
124 else: |
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
125 o.plot(utils.colors[labels[i]]) |
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
126 for i in prototypeIndices: |
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
127 objects[i].plot(utils.colors[i]+'o') |
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
128 axis('equal') |
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
129 show() |
921
630934595871
work in progress with prototype class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
920
diff
changeset
|
130 else: |
952
a9b2beef0db4
loading and assigning motion patterns works
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
951
diff
changeset
|
131 print('Not learning nor assigning: doing nothing') |