Mercurial > hg > nsaunier > traffic-intelligence
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() |
