Mercurial > hg > nsaunier > traffic-intelligence
diff scripts/compute-clearmot.py @ 795:a34ec862371f
merged with dev branch
| author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
|---|---|
| date | Mon, 09 May 2016 15:33:11 -0400 |
| parents | 3aa6102ccc12 |
| children | f6790357f53b |
line wrap: on
line diff
--- a/scripts/compute-clearmot.py Tue Nov 03 13:48:56 2015 -0500 +++ b/scripts/compute-clearmot.py Mon May 09 15:33:11 2016 -0400 @@ -20,6 +20,8 @@ parser.add_argument('--mask', dest = 'maskFilename', help = 'filename of the mask file used to define the where objects were tracked') parser.add_argument('-f', dest = 'firstInstant', help = 'first instant for measurement', required = True, type = int) parser.add_argument('-l', dest = 'lastInstant', help = 'last instant for measurement', required = True, type = int) +parser.add_argument('--offset', dest = 'nFramesOffsetAnnotations', help = 'number of frames to offset the ground truth annotations', type = int) +parser.add_argument('--displayOffset', dest = 'nFramesOffsetDisplay', help = 'number of frames to offset annotations and objects for display', type = int) parser.add_argument('--display', dest = 'display', help = 'display the ground truth to object matches (graphically)', action = 'store_true') parser.add_argument('-i', dest = 'videoFilename', help = 'name of the video file (for display)') args = parser.parse_args() @@ -41,10 +43,14 @@ maskObjects += obj.getObjectsInMask(mask, inv(homography), 2) # TODO add option to keep object if at least one feature in mask objects = maskObjects -annotations = storage.loadGroundTruthFromSqlite(args.groundTruthDatabaseFilename) +annotations = storage.loadBBMovingObjectsFromSqlite(args.groundTruthDatabaseFilename) for a in annotations: a.computeCentroidTrajectory(homography) +if args.nFramesOffsetAnnotations is not None: + for a in annotations: + a.shiftTimeInterval(args.nFramesOffsetAnnotations) + if args.display: motp, mota, mt, mme, fpt, gt, gtMatches, toMatches = moving.computeClearMOT(annotations, objects, args.matchingDistance, args.firstInstant, args.lastInstant, True) else: @@ -56,8 +62,24 @@ print 'Number of missed objects.frames: {}'.format(mt) print 'Number of mismatches: {}'.format(mme) print 'Number of false alarms.frames: {}'.format(fpt) + +def shiftMatches(matches, offset): + shifted = {} + for k in matches: + shifted[k] = {t+offset:v for t, v in matches[k].iteritems()} + return shifted + if args.display: - cvutils.displayTrajectories(args.videoFilename, objects, {}, inv(homography), args.firstInstant, args.lastInstant, annotations = annotations, gtMatches = gtMatches, toMatches = toMatches)#, rescale = args.rescale, nFramesStep = args.nFramesStep, saveAllImages = args.saveAllImages, undistort = (undistort or args.undistort), intrinsicCameraMatrix = intrinsicCameraMatrix, distortionCoefficients = distortionCoefficients, undistortedImageMultiplication = undistortedImageMultiplication) + if args.nFramesOffsetDisplay is not None: + firstInstant = args.firstInstant+args.nFramesOffsetDisplay + lastInstant = args.lastInstant+args.nFramesOffsetDisplay + for a in annotations: + a.shiftTimeInterval(args.nFramesOffsetDisplay) + for o in objects: + o.shiftTimeInterval(args.nFramesOffsetDisplay) + gtMatches = shiftMatches(gtMatches, args.nFramesOffsetDisplay) + toMatches = shiftMatches(toMatches, args.nFramesOffsetDisplay) + cvutils.displayTrajectories(args.videoFilename, objects, {}, inv(homography), firstInstant, lastInstant, annotations = annotations, gtMatches = gtMatches, toMatches = toMatches)#, rescale = args.rescale, nFramesStep = args.nFramesStep, saveAllImages = args.saveAllImages, undistort = (undistort or args.undistort), intrinsicCameraMatrix = intrinsicCameraMatrix, distortionCoefficients = distortionCoefficients, undistortedImageMultiplication = undistortedImageMultiplication) #print('Ground truth matches') #print(gtMatches)
