Mercurial > hg > nsaunier > traffic-intelligence
comparison scripts/display-synced-trajectories.py @ 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 |
comparison
equal
deleted
inserted
replaced
| 836:7058a40a4bbc | 837:e01cabca4c55 |
|---|---|
| 1 #! /usr/bin/env python | 1 #! /usr/bin/env python |
| 2 | 2 |
| 3 import sys, argparse, os.path | 3 import sys, argparse, os.path |
| 4 from datetime import datetime, timedelta | 4 from datetime import datetime, timedelta |
| 5 from numpy import array | 5 import numpy as np |
| 6 import cv2 | 6 import cv2 |
| 7 import cvutils, utils, storage | 7 import cvutils, utils, storage |
| 8 from metadata import createDatabase, Site, VideoSequence | 8 from metadata import createDatabase, Site, CameraView, VideoSequence |
| 9 | 9 |
| 10 parser = argparse.ArgumentParser(description='The program displays several views of the same site synchronously.') | 10 parser = argparse.ArgumentParser(description='The program displays several views of the same site synchronously.') |
| 11 parser.add_argument('-i', dest = 'metadataFilename', help = 'name of the metadata file', required = True) | 11 parser.add_argument('-i', dest = 'metadataFilename', help = 'name of the metadata file', required = True) |
| 12 #parser.add_argument('-n', dest = 'siteId', help = 'site id or site name', required = True) | 12 #parser.add_argument('-n', dest = 'siteId', help = 'site id or site name', required = True) |
| 13 parser.add_argument('-d', dest = 'databaseFilename', help = 'name of the Sqlite database file', required = True) | 13 parser.add_argument('-d', dest = 'databaseFilename', help = 'name of the Sqlite database file', required = True) |
| 29 | 29 |
| 30 startTime = datetime.strptime(args.startTime, utils.datetimeFormat) | 30 startTime = datetime.strptime(args.startTime, utils.datetimeFormat) |
| 31 if startTime > mergedSequence.startTime: | 31 if startTime > mergedSequence.startTime: |
| 32 mergedFirstFrameNum = (startTime-mergedSequence.startTime).seconds*mergedSequence.cameraView.cameraType.frameRate | 32 mergedFirstFrameNum = (startTime-mergedSequence.startTime).seconds*mergedSequence.cameraView.cameraType.frameRate |
| 33 | 33 |
| 34 cameraViews = session.query(CameraView).filter(CameraView.site == mergedSequence.site).filter(CameraView.virtual == False) | 34 cameraViews = session.query(CameraView).filter(CameraView.site == mergedSequence.cameraView.site).filter(CameraView.virtual == False).all() |
| 35 videoSequences = session.query(VideoSequence).filter(VideoSequence.virtual == False).filter(VideoSequence.startTime <= startTime).all() | 35 videoSequences = session.query(VideoSequence).filter(VideoSequence.virtual == False).filter(VideoSequence.startTime <= startTime).all() |
| 36 #videoSequences.remove(mergedSequence) | 36 #videoSequences.remove(mergedSequence) |
| 37 videoSequences = [v for v in videoSequences if v.cameraView in cameraViews and v.containsInstant(startTime)] | 37 videoSequences = [v for v in videoSequences if v.cameraView in cameraViews and v.containsInstant(startTime)] |
| 38 filenames = [dirname+os.path.sep+v.getVideoSequenceFilename() for v in videoSequences] | 38 filenames = [dirname+os.path.sep+v.getVideoSequenceFilename() for v in videoSequences] |
| 39 firstFrameNums = [v.getFrameNum(startTime) for v in videoSequences] | 39 firstFrameNums = [v.getFrameNum(startTime) for v in videoSequences] |
| 40 windowNames = [v.cameraView.description for v in videoSequences] | 40 windowNames = [v.cameraView.description for v in videoSequences] |
| 41 homographies = [np.inv(np.loadtxt(dirname+os.path.sep+v.cameraView.getHomographyFilename())) for v in videoSequences] | |
| 41 | 42 |
| 42 objects = storage.loadTrajectoriesFromSqlite(dirname+os.path.sep+mergedSequence.getDatabaseFilename(), args.trajectoryType) | 43 objects = storage.loadTrajectoriesFromSqlite(dirname+os.path.sep+mergedSequence.getDatabaseFilename(), args.trajectoryType) |
| 43 | 44 |
| 44 #def playVideo(filenames, windowNames = None, firstFrameNums = None, frameRate = -1, interactive = False, printFrames = True, text = None, rescale = 1., step = 1): | 45 #def playVideo(filenames, windowNames = None, firstFrameNums = None, frameRate = -1, interactive = False, printFrames = True, text = None, rescale = 1., step = 1): |
| 45 if len(filenames) == 0: | 46 if len(filenames) == 0: |
| 57 #if interactive: | 58 #if interactive: |
| 58 wait = 0 | 59 wait = 0 |
| 59 step = 1 | 60 step = 1 |
| 60 rescale = 1. | 61 rescale = 1. |
| 61 captures = [cv2.VideoCapture(fn) for fn in filenames] | 62 captures = [cv2.VideoCapture(fn) for fn in filenames] |
| 62 if array([cap.isOpened() for cap in captures]).all(): | 63 if np.array([cap.isOpened() for cap in captures]).all(): |
| 63 key = -1 | 64 key = -1 |
| 64 ret = True | 65 ret = True |
| 65 nFramesShown = 0 | 66 nFramesShown = 0 |
| 66 if firstFrameNums is not None: | 67 if firstFrameNums is not None: |
| 67 for i in xrange(len(captures)): | 68 for i in xrange(len(captures)): |
| 71 images = [] | 72 images = [] |
| 72 for cap in captures: | 73 for cap in captures: |
| 73 ret, img = cap.read() | 74 ret, img = cap.read() |
| 74 rets.append(ret) | 75 rets.append(ret) |
| 75 images.append(img) | 76 images.append(img) |
| 76 if array(rets).all(): | 77 if np.array(rets).all(): |
| 77 #if printFrames: | 78 #if printFrames: |
| 78 print('frame shown {0}'.format(nFramesShown)) | 79 print('frame shown {0}'.format(nFramesShown)) |
| 79 for i in xrange(len(filenames)): | 80 for i in xrange(len(filenames)): |
| 80 for obj in objects: | 81 for obj in objects: |
| 82 | |
| 81 if obj.existsAtInstant(): | 83 if obj.existsAtInstant(): |
| 82 #if text is not None: | 84 |
| 83 # cv2.putText(images[i], text, (10,50), cv2.FONT_HERSHEY_PLAIN, 1, cvRed) | 85 #if text is not None: |
| 86 # cv2.putText(images[i], text, (10,50), cv2.FONT_HERSHEY_PLAIN, 1, cvRed) | |
| 84 cvutils.cvImshow(windowNames[i], images[i], rescale) # cv2.imshow('frame', img) | 87 cvutils.cvImshow(windowNames[i], images[i], rescale) # cv2.imshow('frame', img) |
| 85 key = cv2.waitKey(wait) | 88 key = cv2.waitKey(wait) |
| 86 #if cvutils.saveKey(key): | 89 #if cvutils.saveKey(key): |
| 87 # cv2.imwrite('image-{}.png'.format(frameNum), img) | 90 # cv2.imwrite('image-{}.png'.format(frameNum), img) |
| 88 nFramesShown += step | 91 nFramesShown += step |
