changeset 778:bd684e57c431 dev

integrated code from Laurent Gauthier
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Fri, 05 Feb 2016 17:54:38 -0500
parents ef6dd60be2e1
children 670bd6a35417
files python/storage.py
diffstat 1 files changed, 71 insertions(+), 39 deletions(-) [+]
line wrap: on
line diff
--- a/python/storage.py	Fri Feb 05 17:19:13 2016 -0500
+++ b/python/storage.py	Fri Feb 05 17:54:38 2016 -0500
@@ -255,6 +255,77 @@
     connection.close()
     return objects
 
+def loadCurvilinearTrajectoriesFromSqlite(filename, objects, objectNumbers = None):
+    '''load alignement curvilinear positions (s_coordinate, y_coordinate, lane)
+    from an object database to an existing MovingObject list'''
+    connection = sqlite3.connect(inputFilename)
+    cursor = connection.cursor()
+
+    try:
+        cursor.execute('SELECT * from curvilinear_positions order by trajectory_id, frame_number')
+    except sqlite3.OperationalError as error:
+        printDBError(error)
+        return []
+    
+    objNum = None
+    for row in cursor:
+        if objNum != row[0]:
+            objNum = row[0]
+            objects[objNum].curvilinearPositions = moving.CurvilinearPositions()
+        else:
+            objects[objNum].curvilinearPositions.addPositionsSYL(row[2],row[3],row[4])
+
+    return objects 
+
+def saveTrajectoriesToSqlite(outputFilename, objects, trajectoryType, withFeatures = False):
+    '''Writes features, ie the trajectories positions (and velocities if exist)
+    with their instants to a specified sqlite file
+
+    TODO: Not implemented for other trajectoryType than features
+    For objects, with features will control whether the features
+    corresponding to the object are also saved'''
+
+    connection = sqlite3.connect(outputFilename)
+    try:
+        cursor = connection.cursor()
+
+        if trajectoryType in ['feature', 'curvilinear']:
+            cursor.execute("CREATE TABLE IF NOT EXISTS positions (trajectory_id INTEGER, frame_number INTEGER, x_coordinate REAL, y_coordinate REAL, PRIMARY KEY(trajectory_id, frame_number))")
+            cursor.execute("CREATE TABLE IF NOT EXISTS velocities (trajectory_id INTEGER, frame_number INTEGER, x_coordinate REAL, y_coordinate REAL, PRIMARY KEY(trajectory_id, frame_number))")
+            if trajectoryType == 'curvilinear':
+                cursor.execute("CREATE TABLE IF NOT EXISTS curvilinear_positions (trajectory_id INTEGER, frame_number INTEGER, s_coordinate REAL, y_coordinate REAL, lane TEXT, PRIMARY KEY(trajectory_id, frame_number))")
+
+            positionQuery = "insert into positions (trajectory_id, frame_number, x_coordinate, y_coordinate) values (?,?,?,?)"
+            velocityQuery = "insert into velocities (trajectory_id, frame_number, x_coordinate, y_coordinate) values (?,?,?,?)"
+            curvilinearQuery = "insert into curvilinear_positions (trajectory_id, frame_number, x_coordinate, y_coordinate) values (?,?,?,?)"
+            for obj in objects:
+                num = obj.getNum()
+                frame_number = obj.getFirstInstant()
+                for position in obj.getPositions():
+                    cursor.execute(positionQuery, (num, frame_number, position.x, position.y))
+                    frame_number += 1
+                # velocities
+                velocities = obj.getVelocities()
+                if velocities is not None:
+                    frame_number = obj.getFirstInstant()
+                    for i in xrange(velocities.length()-1):
+                        v = velocities[i]
+                        cursor.execute(velocityQuery, (num, frame_number, v.x, v.y))
+                        frame_number += 1
+                # curvilinear trajectories
+                if trajectoryType == 'curvilinear' and hasattr(obj, 'curvilinearPositions') is not None:
+                    frame_number = obj.getFirstInstant()
+                    for position in obj.getCurvilinearPositions():
+                        cursor.execute(curvilinearQuery, (num, frame_number, position[0], position[1], position[2]))
+                        frame_number += 1
+            connection.commit()
+        #elif trajectoryType == 'object':
+        else:
+            print('Unknown trajectory type {}'.format(trajectoryType))
+    except sqlite3.OperationalError as error:
+        printDBError(error)
+    connection.close()
+
 def savePrototypesToSqlite(filename, prototypes, trajectoryType = 'feature'):
     'Work in progress, do not use'
     connection = sqlite3.connect(filename)
@@ -428,45 +499,6 @@
     connection.close()
     return boundingBoxes
 
-def saveTrajectoriesToSqlite(outputFilename, objects, trajectoryType, withFeatures = False):
-    '''Writes features, ie the trajectories positions (and velocities if exist)
-    with their instants to a specified sqlite file
-
-    TODO: Not implemented for other trajectoryType than features
-    For objects, with features will control whether the features
-    corresponding to the object are also saved'''
-
-    connection = sqlite3.connect(outputFilename)
-    try:
-        cursor = connection.cursor()
-
-        if trajectoryType == 'feature':
-            cursor.execute("CREATE TABLE IF NOT EXISTS positions (trajectory_id INTEGER, frame_number INTEGER, x_coordinate REAL, y_coordinate REAL, PRIMARY KEY(trajectory_id, frame_number))")
-            cursor.execute("CREATE TABLE IF NOT EXISTS velocities (trajectory_id INTEGER, frame_number INTEGER, x_coordinate REAL, y_coordinate REAL, PRIMARY KEY(trajectory_id, frame_number))")
-
-            positionQuery = "insert into positions (trajectory_id, frame_number, x_coordinate, y_coordinate) values (?,?,?,?)"
-            velocityQuery = "insert into velocities (trajectory_id, frame_number, x_coordinate, y_coordinate) values (?,?,?,?)"
-            for obj in objects:
-                num = obj.getNum()
-                frame_number = obj.getFirstInstant()
-                for position in obj.getPositions():
-                    cursor.execute(positionQuery, (num, frame_number, position.x, position.y))
-                    frame_number += 1
-                if obj.getVelocities() is not None:
-                    frame_number = obj.getFirstInstant()
-                    velocities = obj.getVelocities()
-                    for i in xrange(velocities.length()-1):
-                        v = velocities[i]
-                        cursor.execute(velocityQuery, (num, frame_number, v.x, v.y))
-                        frame_number += 1
-            connection.commit()
-        #elif trajectoryType == 'feature':
-        else:
-            print('Unknown trajectory type {}'.format(trajectoryType))
-    except sqlite3.OperationalError as error:
-        printDBError(error)
-    connection.close()
-
 #########################
 # saving and loading for scene interpretation (Mohamed Gomaa Mohamed's PhD)
 #########################