Mercurial Hosting > traffic-intelligence
changeset 837:e01cabca4c55
minor modifications to merge-features
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Wed, 06 Jul 2016 10:58:18 -0400 |
parents | 7058a40a4bbc |
children | 2918de3d40fc |
files | python/utils.py scripts/display-synced-trajectories.py scripts/merge-features.py |
diffstat | 3 files changed, 21 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/python/utils.py Wed Jul 06 10:18:35 2016 -0400 +++ b/python/utils.py Wed Jul 06 10:58:18 2016 -0400 @@ -238,6 +238,14 @@ def argmaxDict(d): return max(d, key=d.get) +def deltaFrames(t1, t2, frameRate): + '''Returns the number of frames between t1 and t2 + positive if t1<=t2, negative otherwise''' + if t1 > t2: + return -(t1-t2).seconds*frameRate + else: + return (t2-t1).seconds*frameRate + def framesToTime(nFrames, frameRate, initialTime = time()): '''returns a datetime.time for the time in hour, minutes and seconds initialTime is a datetime.time'''
--- a/scripts/display-synced-trajectories.py Wed Jul 06 10:18:35 2016 -0400 +++ b/scripts/display-synced-trajectories.py Wed Jul 06 10:58:18 2016 -0400 @@ -2,10 +2,10 @@ import sys, argparse, os.path from datetime import datetime, timedelta -from numpy import array +import numpy as np import cv2 import cvutils, utils, storage -from metadata import createDatabase, Site, VideoSequence +from metadata import createDatabase, Site, CameraView, VideoSequence parser = argparse.ArgumentParser(description='The program displays several views of the same site synchronously.') parser.add_argument('-i', dest = 'metadataFilename', help = 'name of the metadata file', required = True) @@ -31,13 +31,14 @@ if startTime > mergedSequence.startTime: mergedFirstFrameNum = (startTime-mergedSequence.startTime).seconds*mergedSequence.cameraView.cameraType.frameRate -cameraViews = session.query(CameraView).filter(CameraView.site == mergedSequence.site).filter(CameraView.virtual == False) +cameraViews = session.query(CameraView).filter(CameraView.site == mergedSequence.cameraView.site).filter(CameraView.virtual == False).all() videoSequences = session.query(VideoSequence).filter(VideoSequence.virtual == False).filter(VideoSequence.startTime <= startTime).all() #videoSequences.remove(mergedSequence) videoSequences = [v for v in videoSequences if v.cameraView in cameraViews and v.containsInstant(startTime)] filenames = [dirname+os.path.sep+v.getVideoSequenceFilename() for v in videoSequences] firstFrameNums = [v.getFrameNum(startTime) for v in videoSequences] windowNames = [v.cameraView.description for v in videoSequences] +homographies = [np.inv(np.loadtxt(dirname+os.path.sep+v.cameraView.getHomographyFilename())) for v in videoSequences] objects = storage.loadTrajectoriesFromSqlite(dirname+os.path.sep+mergedSequence.getDatabaseFilename(), args.trajectoryType) @@ -59,7 +60,7 @@ step = 1 rescale = 1. captures = [cv2.VideoCapture(fn) for fn in filenames] -if array([cap.isOpened() for cap in captures]).all(): +if np.array([cap.isOpened() for cap in captures]).all(): key = -1 ret = True nFramesShown = 0 @@ -73,14 +74,16 @@ ret, img = cap.read() rets.append(ret) images.append(img) - if array(rets).all(): + if np.array(rets).all(): #if printFrames: print('frame shown {0}'.format(nFramesShown)) for i in xrange(len(filenames)): for obj in objects: + if obj.existsAtInstant(): - #if text is not None: - # cv2.putText(images[i], text, (10,50), cv2.FONT_HERSHEY_PLAIN, 1, cvRed) + + #if text is not None: + # cv2.putText(images[i], text, (10,50), cv2.FONT_HERSHEY_PLAIN, 1, cvRed) cvutils.cvImshow(windowNames[i], images[i], rescale) # cv2.imshow('frame', img) key = cv2.waitKey(wait) #if cvutils.saveKey(key):
--- a/scripts/merge-features.py Wed Jul 06 10:18:35 2016 -0400 +++ b/scripts/merge-features.py Wed Jul 06 10:58:18 2016 -0400 @@ -8,8 +8,8 @@ parser = argparse.ArgumentParser(description='The program merges feature trajectories recorded from the same site synchronously between start and end time.') parser.add_argument('-i', dest = 'metadataFilename', help = 'name of the metadata file', required = True) parser.add_argument('-n', dest = 'siteId', help = 'site id or site name', required = True) -parser.add_argument('--start', dest = 'startTime', help = 'time to start merging features (format %Y-%m-%d %H:%M:%S, eg 2011-06-22 10:00:39)') # if not provided, take common time interval -parser.add_argument('--end', dest = 'endTime', help = 'time to stop merging features (format %Y-%m-%d %H:%M:%S, eg 2011-06-22 10:00:39)') +parser.add_argument('-f', dest = 'startTime', help = 'time to start merging features (format %Y-%m-%d %H:%M:%S, eg 2011-06-22 10:00:39)') # if not provided, take common time interval +parser.add_argument('-l', dest = 'endTime', help = 'time to stop merging features (format %Y-%m-%d %H:%M:%S, eg 2011-06-22 10:00:39)') parser.add_argument('-o', dest = 'outputDBFilename', help = 'name of the output SQLite file', required = True) args = parser.parse_args() @@ -75,10 +75,7 @@ try: vsConnection = sqlite3.connect(dirname+os.path.sep+videoSequence.getDatabaseFilename()) vsCursor = vsConnection.cursor() - if commonTimeInterval.first < videoSequence.startTime: - firstFrameNum = -(videoSequence.startTime-commonTimeInterval.first).seconds*frameRate - else: - firstFrameNum = (commonTimeInterval.first-videoSequence.startTime).seconds*frameRate + firstFrameNum = utils.deltaFrames(videoSequence.startTime, commonTimeInterval.first, frameRate) lastFrameNum = (commonTimeInterval.last-videoSequence.startTime).seconds*frameRate # positions table vsCursor.execute('SELECT * FROM positions WHERE frame_number BETWEEN {} AND {} ORDER BY trajectory_id'.format(firstFrameNum, lastFrameNum))