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))