comparison python/storage.py @ 780:1b22d81ef5ff dev

cleaned and checked storage with functions for curvilinear trajectories
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Mon, 08 Feb 2016 12:24:26 -0500
parents bd684e57c431
children f1040d739bbf
comparison
equal deleted inserted replaced
779:670bd6a35417 780:1b22d81ef5ff
253 objects = [] 253 objects = []
254 254
255 connection.close() 255 connection.close()
256 return objects 256 return objects
257 257
258 def loadCurvilinearTrajectoriesFromSqlite(filename, objects, objectNumbers = None): 258 def addCurvilinearTrajectoriesFromSqlite(filename, objects):
259 '''load alignement curvilinear positions (s_coordinate, y_coordinate, lane) 259 '''Adds curvilinear positions (s_coordinate, y_coordinate, lane)
260 from an object database to an existing MovingObject list''' 260 from a database to an existing MovingObject dict (indexed by each objects's num)'''
261 connection = sqlite3.connect(inputFilename) 261 connection = sqlite3.connect(filename)
262 cursor = connection.cursor() 262 cursor = connection.cursor()
263 263
264 try: 264 try:
265 cursor.execute('SELECT * from curvilinear_positions order by trajectory_id, frame_number') 265 cursor.execute('SELECT * from curvilinear_positions order by trajectory_id, frame_number')
266 except sqlite3.OperationalError as error: 266 except sqlite3.OperationalError as error:
269 269
270 objNum = None 270 objNum = None
271 for row in cursor: 271 for row in cursor:
272 if objNum != row[0]: 272 if objNum != row[0]:
273 objNum = row[0] 273 objNum = row[0]
274 objects[objNum].curvilinearPositions = moving.CurvilinearPositions() 274 objects[objNum].curvilinearPositions = moving.CurvilinearTrajectory()
275 else: 275 objects[objNum].curvilinearPositions.addPositionSYL(row[2],row[3],row[4])
276 objects[objNum].curvilinearPositions.addPositionsSYL(row[2],row[3],row[4])
277
278 return objects
279 276
280 def saveTrajectoriesToSqlite(outputFilename, objects, trajectoryType, withFeatures = False): 277 def saveTrajectoriesToSqlite(outputFilename, objects, trajectoryType, withFeatures = False):
281 '''Writes features, ie the trajectories positions (and velocities if exist) 278 '''Writes features, ie the trajectories positions (and velocities if exist)
282 with their instants to a specified sqlite file 279 with their instants to a specified sqlite file
283 280 Either feature positions (and velocities if they exist)
284 TODO: Not implemented for other trajectoryType than features 281 or curvilinear positions will be saved at a time
282
283 TODO: Not implemented for trajectoryType MovingObject with features
285 For objects, with features will control whether the features 284 For objects, with features will control whether the features
286 corresponding to the object are also saved''' 285 corresponding to the object are also saved'''
287 286
288 connection = sqlite3.connect(outputFilename) 287 connection = sqlite3.connect(outputFilename)
289 try: 288 try:
290 cursor = connection.cursor() 289 cursor = connection.cursor()
291 290
292 if trajectoryType in ['feature', 'curvilinear']: 291 if trajectoryType == 'feature':
293 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))") 292 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))")
294 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))") 293 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))")
295 if trajectoryType == 'curvilinear':
296 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))")
297 294
298 positionQuery = "insert into positions (trajectory_id, frame_number, x_coordinate, y_coordinate) values (?,?,?,?)" 295 positionQuery = "insert into positions (trajectory_id, frame_number, x_coordinate, y_coordinate) values (?,?,?,?)"
299 velocityQuery = "insert into velocities (trajectory_id, frame_number, x_coordinate, y_coordinate) values (?,?,?,?)" 296 velocityQuery = "insert into velocities (trajectory_id, frame_number, x_coordinate, y_coordinate) values (?,?,?,?)"
300 curvilinearQuery = "insert into curvilinear_positions (trajectory_id, frame_number, x_coordinate, y_coordinate) values (?,?,?,?)"
301 for obj in objects: 297 for obj in objects:
302 num = obj.getNum() 298 num = obj.getNum()
303 frame_number = obj.getFirstInstant() 299 frame_number = obj.getFirstInstant()
304 for position in obj.getPositions(): 300 for position in obj.getPositions():
305 cursor.execute(positionQuery, (num, frame_number, position.x, position.y)) 301 cursor.execute(positionQuery, (num, frame_number, position.x, position.y))
310 frame_number = obj.getFirstInstant() 306 frame_number = obj.getFirstInstant()
311 for i in xrange(velocities.length()-1): 307 for i in xrange(velocities.length()-1):
312 v = velocities[i] 308 v = velocities[i]
313 cursor.execute(velocityQuery, (num, frame_number, v.x, v.y)) 309 cursor.execute(velocityQuery, (num, frame_number, v.x, v.y))
314 frame_number += 1 310 frame_number += 1
315 # curvilinear trajectories 311 elif trajectoryType == 'curvilinear':
316 if trajectoryType == 'curvilinear' and hasattr(obj, 'curvilinearPositions') is not None: 312 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))")
317 frame_number = obj.getFirstInstant() 313 curvilinearQuery = "insert into curvilinear_positions (trajectory_id, frame_number, s_coordinate, y_coordinate, lane) values (?,?,?,?,?)"
318 for position in obj.getCurvilinearPositions(): 314 for obj in objects:
319 cursor.execute(curvilinearQuery, (num, frame_number, position[0], position[1], position[2])) 315 num = obj.getNum()
320 frame_number += 1 316 frame_number = obj.getFirstInstant()
321 connection.commit() 317 for position in obj.getCurvilinearPositions():
318 cursor.execute(curvilinearQuery, (num, frame_number, position[0], position[1], position[2]))
319 frame_number += 1
322 #elif trajectoryType == 'object': 320 #elif trajectoryType == 'object':
323 else: 321 else:
324 print('Unknown trajectory type {}'.format(trajectoryType)) 322 print('Unknown trajectory type {}'.format(trajectoryType))
323 connection.commit()
325 except sqlite3.OperationalError as error: 324 except sqlite3.OperationalError as error:
326 printDBError(error) 325 printDBError(error)
327 connection.close() 326 connection.close()
328 327
329 def savePrototypesToSqlite(filename, prototypes, trajectoryType = 'feature'): 328 def savePrototypesToSqlite(filename, prototypes, trajectoryType = 'feature'):