Mercurial > hg > nsaunier > traffic-intelligence
comparison scripts/display-synced-trajectories.py @ 838:2918de3d40fc
first working version of display of merged tracking
| author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
|---|---|
| date | Wed, 06 Jul 2016 12:30:08 -0400 |
| parents | e01cabca4c55 |
| children | 2c7b4e6a32dd |
comparison
equal
deleted
inserted
replaced
| 837:e01cabca4c55 | 838:2918de3d40fc |
|---|---|
| 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) |
| 14 parser.add_argument('-f', dest = 'startTime', help = 'time to start playing (format %Y-%m-%d %H:%M:%S, eg 2011-06-22 10:00:39)', required = True) | 14 parser.add_argument('-f', dest = 'startTime', help = 'time to start playing (format %Y-%m-%d %H:%M:%S, eg 2011-06-22 10:00:39)', required = True) |
| 15 parser.add_argument('-t', dest = 'trajectoryType', help = 'type of trajectories to display', choices = ['feature', 'object'], default = 'object') | 15 parser.add_argument('-t', dest = 'trajectoryType', help = 'type of trajectories to display', choices = ['feature', 'object'], default = 'object') |
| 16 parser.add_argument('-r', dest = 'rescale', help = 'rescaling factor for the displayed image', default = 1., type = float) | 16 parser.add_argument('-r', dest = 'rescale', help = 'rescaling factor for the displayed image', default = 1., type = float) |
| 17 parser.add_argument('-s', dest = 'step', help = 'display every s image', default = 1, type = int) | 17 parser.add_argument('-s', dest = 'step', help = 'display every s image', default = 1, type = int) |
| 18 parser.add_argument('-u', dest = 'undistort', help = 'undistort the video (because features have been extracted that way)', action = 'store_true') | |
| 18 | 19 |
| 19 args = parser.parse_args() | 20 args = parser.parse_args() |
| 20 | 21 |
| 21 session = createDatabase(args.metadataFilename) | 22 session = createDatabase(args.metadataFilename) |
| 22 | 23 |
| 25 print('Video sequence {} was not found in {}. Exiting'.format(args.databaseFilename, args.metadataFilename)) | 26 print('Video sequence {} was not found in {}. Exiting'.format(args.databaseFilename, args.metadataFilename)) |
| 26 sys.exit() | 27 sys.exit() |
| 27 | 28 |
| 28 dirname = os.path.split(args.metadataFilename)[0] | 29 dirname = os.path.split(args.metadataFilename)[0] |
| 29 | 30 |
| 31 frameRate = mergedSequence.cameraView.cameraType.frameRate | |
| 30 startTime = datetime.strptime(args.startTime, utils.datetimeFormat) | 32 startTime = datetime.strptime(args.startTime, utils.datetimeFormat) |
| 31 if startTime > mergedSequence.startTime: | 33 mergedFirstFrameNum = utils.deltaFrames(mergedSequence.startTime, startTime, frameRate) |
| 32 mergedFirstFrameNum = (startTime-mergedSequence.startTime).seconds*mergedSequence.cameraView.cameraType.frameRate | |
| 33 | 34 |
| 34 cameraViews = session.query(CameraView).filter(CameraView.site == mergedSequence.cameraView.site).filter(CameraView.virtual == False).all() | 35 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() | 36 videoSequences = session.query(VideoSequence).filter(VideoSequence.virtual == False).all() |
| 36 #videoSequences.remove(mergedSequence) | 37 #videoSequences.remove(mergedSequence) |
| 37 videoSequences = [v for v in videoSequences if v.cameraView in cameraViews and v.containsInstant(startTime)] | 38 videoSequences = [v for v in videoSequences if v.cameraView in cameraViews and (v.containsInstant(startTime) or v.startTime > startTime)] |
| 38 filenames = [dirname+os.path.sep+v.getVideoSequenceFilename() for v in videoSequences] | 39 filenames = [dirname+os.path.sep+v.getVideoSequenceFilename() for v in videoSequences] |
| 39 firstFrameNums = [v.getFrameNum(startTime) for v in videoSequences] | 40 firstFrameNums = [utils.deltaFrames(v.startTime, startTime, frameRate) for v in videoSequences] # use pos/neg first frame nums |
| 40 windowNames = [v.cameraView.description for v in videoSequences] | 41 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] | 42 |
| 43 # homography and undistort | |
| 44 homographies = [np.linalg.inv(np.loadtxt(dirname+os.path.sep+v.cameraView.getHomographyFilename())) for v in videoSequences] | |
| 45 if args.undistort: | |
| 46 cameraTypes = set([cv.cameraType for cv in cameraViews]) | |
| 47 for cameraType in cameraTypes: | |
| 48 cameraType.computeUndistortMaps() | |
| 42 | 49 |
| 43 objects = storage.loadTrajectoriesFromSqlite(dirname+os.path.sep+mergedSequence.getDatabaseFilename(), args.trajectoryType) | 50 objects = storage.loadTrajectoriesFromSqlite(dirname+os.path.sep+mergedSequence.getDatabaseFilename(), args.trajectoryType) |
| 51 for obj in objects: | |
| 52 obj.projectedPositions = {} | |
| 44 | 53 |
| 45 #def playVideo(filenames, windowNames = None, firstFrameNums = None, frameRate = -1, interactive = False, printFrames = True, text = None, rescale = 1., step = 1): | 54 #def playVideo(filenames, windowNames = None, firstFrameNums = None, frameRate = -1, interactive = False, printFrames = True, text = None, rescale = 1., step = 1): |
| 46 if len(filenames) == 0: | 55 if len(filenames) == 0: |
| 47 print('Empty filename list') | 56 print('Empty filename list') |
| 48 sys.exit() | 57 sys.exit() |
| 62 captures = [cv2.VideoCapture(fn) for fn in filenames] | 71 captures = [cv2.VideoCapture(fn) for fn in filenames] |
| 63 if np.array([cap.isOpened() for cap in captures]).all(): | 72 if np.array([cap.isOpened() for cap in captures]).all(): |
| 64 key = -1 | 73 key = -1 |
| 65 ret = True | 74 ret = True |
| 66 nFramesShown = 0 | 75 nFramesShown = 0 |
| 67 if firstFrameNums is not None: | 76 for i in xrange(len(captures)): |
| 68 for i in xrange(len(captures)): | 77 if firstFrameNums[i] > 0: |
| 69 captures[i].set(cv2.cv.CV_CAP_PROP_POS_FRAMES, firstFrameNums[i]) | 78 captures[i].set(cv2.cv.CV_CAP_PROP_POS_FRAMES, firstFrameNums[i]) |
| 70 while ret and not cvutils.quitKey(key): | 79 while ret and not cvutils.quitKey(key): |
| 71 rets = [] | 80 rets = [] |
| 72 images = [] | 81 images = [] |
| 73 for cap in captures: | 82 for i in xrange(len(captures)): |
| 74 ret, img = cap.read() | 83 if firstFrameNums[i]+nFramesShown>=0: |
| 75 rets.append(ret) | 84 ret, img = captures[i].read() |
| 76 images.append(img) | 85 if ret and args.undistort: |
| 77 if np.array(rets).all(): | 86 img = cv2.remap(img, videoSequences[i].cameraView.cameraType.map1, videoSequences[i].cameraView.cameraType.map2, interpolation=cv2.INTER_LINEAR) |
| 87 rets.append(ret) | |
| 88 images.append(img) | |
| 89 else: | |
| 90 rets.append(False) | |
| 91 images.append(None) | |
| 92 if np.array(rets).any(): | |
| 78 #if printFrames: | 93 #if printFrames: |
| 79 print('frame shown {0}'.format(nFramesShown)) | 94 print('frame shown {0}'.format(nFramesShown)) |
| 80 for i in xrange(len(filenames)): | 95 for i in xrange(len(filenames)): |
| 81 for obj in objects: | 96 if rets[i]:#firstFrameNums[i]+nFramesShown>=0: |
| 82 | 97 for obj in objects: |
| 83 if obj.existsAtInstant(): | 98 if obj.existsAtInstant(mergedFirstFrameNum+nFramesShown): |
| 84 | 99 #print obj.num, obj.timeInterval, mergedFirstFrameNum, nFramesShown |
| 100 if i not in obj.projectedPositions: | |
| 101 if homographies[i] is not None: | |
| 102 obj.projectedPositions[i] = obj.positions.project(homographies[i]) | |
| 103 else: | |
| 104 obj.projectedPositions[i] = obj.positions | |
| 105 cvutils.cvPlot(images[i], obj.projectedPositions[i], cvutils.cvColors[obj.getNum()], int(mergedFirstFrameNum+nFramesShown)-obj.getFirstInstant()) | |
| 106 | |
| 85 #if text is not None: | 107 #if text is not None: |
| 86 # cv2.putText(images[i], text, (10,50), cv2.FONT_HERSHEY_PLAIN, 1, cvRed) | 108 # cv2.putText(images[i], text, (10,50), cv2.FONT_HERSHEY_PLAIN, 1, cvRed) |
| 87 cvutils.cvImshow(windowNames[i], images[i], rescale) # cv2.imshow('frame', img) | 109 cvutils.cvImshow(windowNames[i], images[i], rescale) # cv2.imshow('frame', img) |
| 88 key = cv2.waitKey(wait) | 110 key = cv2.waitKey(wait) |
| 89 #if cvutils.saveKey(key): | 111 #if cvutils.saveKey(key): |
| 90 # cv2.imwrite('image-{}.png'.format(frameNum), img) | 112 # cv2.imwrite('image-{}.png'.format(frameNum), img) |
| 91 nFramesShown += step | 113 nFramesShown += step |
| 92 if step > 1: | 114 if step > 1: |
