changeset 849:a414a7d58483

corrected issue with prototypes storage
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Fri, 22 Jul 2016 17:23:49 -0400
parents 0cb69238e6f5
children c724a51d4f5f
files python/storage.py scripts/learn-motion-patterns.py
diffstat 2 files changed, 11 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/python/storage.py	Thu Jul 21 17:51:11 2016 -0400
+++ b/python/storage.py	Fri Jul 22 17:23:49 2016 -0400
@@ -366,12 +366,13 @@
 
 def savePrototypesToSqlite(filename, prototypeIndices, trajectoryType, nMatchings = None, dbFilenames = None):
     '''save the prototype indices
-    nMatchings, if not None, is a dictionnary between indices and number of matches'''
+    nMatchings, if not None, is a list of the number of matches
+    dbFilenames, if not None, is a list of the DB filenames'''
     connection = sqlite3.connect(filename)
     cursor = connection.cursor()
     try:
         cursor.execute('CREATE TABLE IF NOT EXISTS prototypes (id INTEGER, dbfilename VARCHAR, trajectory_type VARCHAR CHECK (trajectory_type IN (\"feature\", \"object\")), nMatchings INTEGER, PRIMARY KEY (id, dbfilename))')
-        for i in prototypeIndices:
+        for i, protoId in enumerate(prototypeIndices):
             if nMatchings is not None:
                 n = nMatchings[i]
             else:
@@ -380,7 +381,7 @@
                 dbfn = dbFilenames[i]
             else:
                 dbfn = filename
-            cursor.execute('INSERT INTO prototypes (id, dbfilename, trajectory_type, nMatchings) VALUES ({},\"{}\",\"{}\",{})'.format(i, dbfn, trajectoryType, n))
+            cursor.execute('INSERT INTO prototypes (id, dbfilename, trajectory_type, nMatchings) VALUES ({},\"{}\",\"{}\",{})'.format(protoId, dbfn, trajectoryType, n))
     except sqlite3.OperationalError as error:
         printDBError(error)
     connection.commit()
@@ -391,23 +392,23 @@
     connection = sqlite3.connect(filename)
     cursor = connection.cursor()
     prototypeIndices = []
-    dbFilenames = {}
+    dbFilenames = []
     trajectoryTypes = []
-    nMatchings = {}
+    nMatchings = []
     try:
         cursor.execute('SELECT * FROM prototypes')
         for row in cursor:
             prototypeIndices.append(row[0])
-            dbFilenames[row[0]] = row[1]
+            dbFilenames.append(row[1])
             trajectoryTypes.append(row[2])
-            if row[2] is not None:
-                nMatchings[row[0]] = row[3]
+            if row[3] is not None:
+                nMatchings.append(row[3])
     except sqlite3.OperationalError as error:
         printDBError(error)
     connection.close()
     if len(set(trajectoryTypes)) > 1:
         print('Different types of prototypes in database ({}).'.format(set(trajectoryTypes)))
-    return prototypeIndices, dbFilenames, trajectoryTypes[0], nMatchings
+    return prototypeIndices, dbFilenames, trajectoryTypes, nMatchings
 
 def loadBBMovingObjectsFromSqlite(filename, objectType = 'bb', objectNumbers = None, timeStep = None):
     '''Loads bounding box moving object from an SQLite
--- a/scripts/learn-motion-patterns.py	Thu Jul 21 17:51:11 2016 -0400
+++ b/scripts/learn-motion-patterns.py	Fri Jul 22 17:23:49 2016 -0400
@@ -53,7 +53,7 @@
 clusterSizes = ml.computeClusterSizes(labels, prototypeIndices, -1)
 print(clusterSizes)
 
-storage.savePrototypesToSqlite(args.databaseFilename, [objects[i].getNum() for i in prototypeIndices], args.trajectoryType, {objects[i].getNum():clusterSizes[i] for i in prototypeIndices}) # if saving filenames, add for example {objects[i].getNum():objects[i].dbFilename for i in prototypeIndices}
+storage.savePrototypesToSqlite(args.databaseFilename, [objects[i].getNum() for i in prototypeIndices], args.trajectoryType, [clusterSizes[i] for i in prototypeIndices]) # if saving filenames, add for example [objects[i].dbFilename for i in prototypeIndices]
 
 if args.saveSimilarities:
     np.savetxt(utils.removeExtension(args.databaseFilename)+'-prototype-similarities.txt.gz', similarities, '%.4f')