comparison scripts/merge-features.py @ 836:7058a40a4bbc

updated metadata and code to merge features from different cameras
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Wed, 06 Jul 2016 10:18:35 -0400
parents 2a5856961933
children e01cabca4c55
comparison
equal deleted inserted replaced
835:f3ae72d86762 836:7058a40a4bbc
24 site = site[0] 24 site = site[0]
25 25
26 startTime = datetime.strptime(args.startTime, utils.datetimeFormat) 26 startTime = datetime.strptime(args.startTime, utils.datetimeFormat)
27 endTime = datetime.strptime(args.endTime, utils.datetimeFormat) 27 endTime = datetime.strptime(args.endTime, utils.datetimeFormat)
28 processInterval = moving.TimeInterval(startTime, endTime) 28 processInterval = moving.TimeInterval(startTime, endTime)
29 cameraViews = session.query(CameraView).filter(CameraView.site == site) 29 cameraViews = session.query(CameraView).filter(CameraView.site == site).filter(CameraView.virtual == False)
30 videoSequences = session.query(VideoSequence).order_by(VideoSequence.startTime.asc()).all() #.order_by(VideoSequence.cameraViewIdx) .filter(VideoSequence.startTime <= startTime) 30 videoSequences = session.query(VideoSequence).filter(VideoSequence.virtual == False).order_by(VideoSequence.startTime.asc()).all() #.order_by(VideoSequence.cameraViewIdx) .filter(VideoSequence.startTime <= startTime)
31 videoSequences = [vs for vs in videoSequences if vs.cameraView in cameraViews] 31 videoSequences = [vs for vs in videoSequences if vs.cameraView in cameraViews]
32 #timeIntervals = [v.intersection(startTime, endTime) for v in videoSequences] 32 #timeIntervals = [v.intersection(startTime, endTime) for v in videoSequences]
33 #cameraViews = set([v.cameraView for v in videoSequences]) 33 #cameraViews = set([v.cameraView for v in videoSequences])
34 34
35 videoSequences = {cv: [v for v in videoSequences if v.cameraView == cv] for cv in cameraViews} 35 videoSequences = {cv: [v for v in videoSequences if v.cameraView == cv] for cv in cameraViews}
68 dirname = '.' 68 dirname = '.'
69 69
70 newTrajectoryId = -1 70 newTrajectoryId = -1
71 # first frame num is commonTimeInterval 71 # first frame num is commonTimeInterval
72 for cv, vs in videoSequences.iteritems(): 72 for cv, vs in videoSequences.iteritems():
73 #return cursor.fetchone()[0] == 1 73 print cv.idx, cv.description
74 for videoSequence in vs: 74 for videoSequence in vs:
75 print videoSequence.name
76 try: 75 try:
77 vsConnection = sqlite3.connect(dirname+os.path.sep+videoSequence.getDatabaseFilename()) 76 vsConnection = sqlite3.connect(dirname+os.path.sep+videoSequence.getDatabaseFilename())
78 vsCursor = vsConnection.cursor() 77 vsCursor = vsConnection.cursor()
79 if commonTimeInterval.first < videoSequence.startTime: 78 if commonTimeInterval.first < videoSequence.startTime:
80 firstFrameNum = -(videoSequence.startTime-commonTimeInterval.first).seconds*frameRate 79 firstFrameNum = -(videoSequence.startTime-commonTimeInterval.first).seconds*frameRate
90 currentTrajectoryId = row[0] 89 currentTrajectoryId = row[0]
91 newTrajectoryId += 1 90 newTrajectoryId += 1
92 featureIdCorrespondences[currentTrajectoryId] = newTrajectoryId 91 featureIdCorrespondences[currentTrajectoryId] = newTrajectoryId
93 outCursor.execute(storage.insertTrajectoryQuery('positions'), (newTrajectoryId, row[1]-firstFrameNum, row[2], row[3])) 92 outCursor.execute(storage.insertTrajectoryQuery('positions'), (newTrajectoryId, row[1]-firstFrameNum, row[2], row[3]))
94 # velocities table 93 # velocities table
95 vsCursor.execute('SELECT * FROM velocities WHERE frame_number BETWEEN {} AND {} ORDER BY trajectory_id'.format(firstFrameNum, lastFrameNum))
96 for row in vsCursor: 94 for row in vsCursor:
97 outCursor.execute(storage.insertTrajectoryQuery('velocities'), (featureIdCorrespondences[row[0]], row[1]-firstFrameNum, row[2], row[3])) 95 outCursor.execute(storage.insertTrajectoryQuery('velocities'), (featureIdCorrespondences[row[0]], row[1]-firstFrameNum, row[2], row[3]))
98 # saving the id correspondences 96 # saving the id correspondences
99 for oldId, newId in featureIdCorrespondences.iteritems(): 97 for oldId, newId in featureIdCorrespondences.iteritems():
100 outCursor.execute("INSERT INTO feature_correspondences (trajectory_id, source_dbname, db_trajectory_id) VALUES ({},\"{}\",{})".format(newId, videoSequence.name, oldId)) 98 outCursor.execute("INSERT INTO feature_correspondences (trajectory_id, source_dbname, db_trajectory_id) VALUES ({},\"{}\",{})".format(newId, videoSequence.name, oldId))
101 outConnection.commit() 99 outConnection.commit()
102 except sqlite3.OperationalError as error: 100 except sqlite3.OperationalError as error:
103 storage.printDBError(error) 101 storage.printDBError(error)
104 102
105 # TODO save the information of the new "sequence" in the metadata 103 # save the information of the new virtual sequence and camera view in the metadata
106 mergedCameraView = CameraView('merged', None, site, cv.cameraType, None, None) 104 mergedCameraView = CameraView('merged', None, site, cv.cameraType, None, None, virtual = True)
105 session.add(mergedCameraView)
106 session.add(VideoSequence('merged', commonTimeInterval.first, commonTimeInterval.last-commonTimeInterval.first, mergedCameraView, virtual = True))
107 session.commit() 107 session.commit()
108 session.add(VideoSequence('merged', commonTimeInterval.first, commonTimeInterval.last-commonTimeInterval.first, mergedCameraView))
109 session.commit()