Mercurial Hosting > traffic-intelligence
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) #########################