Example #1
0
def do_analysis(config, logger):

    from vot.analysis import process_measures

    workspace = Workspace(config.workspace)

    logger.info("Loaded workspace in '%s'", config.workspace)

    global_registry = [os.path.abspath(x) for x in config.registry]

    registry = load_trackers(workspace.registry + global_registry,
                             root=config.workspace)

    logger.info("Found data for %d trackers", len(registry))

    if not hasattr(config, 'trackers'):
        trackers = workspace.list_results()
    else:
        trackers = config.trackers

    try:
        trackers = [registry[tracker] for tracker in trackers]
    except KeyError as ke:
        logger.error("Tracker not found %s", str(ke))
        return

    if config.output == "dash":
        from vot.analysis.dashboard import run_dashboard
        run_dashboard(workspace, trackers)
        return
    elif config.output == "latex":
        pass
    elif config.output == "html":
        pass
    elif config.output == "json":
        results = process_measures(workspace, trackers)
        file_name = os.path.join(
            workspace.directory,
            "analysis_{:%Y-%m-%dT%H-%M-%S.%f%z}.json".format(datetime.now()))
        with open(file_name, "w") as fp:
            json.dump(results, fp, indent=2)

    logger.info("Analysis successful, results available in %s", file_name)
Example #2
0
def do_evaluate(config, logger):

    from vot.experiment import run_experiment

    workspace = Workspace(config.workspace)

    logger.info("Loaded workspace in '%s'", config.workspace)

    global_registry = [os.path.abspath(x) for x in config.registry]

    registry = load_trackers(workspace.registry + global_registry,
                             root=config.workspace)

    logger.info("Found data for %d trackers", len(registry))

    try:
        trackers = [registry[t.strip()] for t in config.trackers]
    except KeyError as ke:
        logger.error("Tracker not found: %s", str(ke))
        return

    if len(trackers) == 0:
        logger.error("Unable to continue without at least on tracker")
        logger.error("List of available found trackers: ")
        for k, _ in trackers.items():
            logger.error(" * %s", k)
        return

    try:
        for tracker in trackers:
            logger.info("Evaluating tracker %s", tracker.identifier)
            for experiment in workspace.stack:
                run_experiment(experiment, tracker, config.force,
                               config.persist)

        logger.info("Evaluation concluded successfuly")

    except KeyboardInterrupt:
        logger.info("Evaluation interrupted by the user")
    except TrackerException as te:
        logger.error("Evaluation interrupted by tracker error: {}".format(te))
Example #3
0
def do_test(config, logger):
    from vot.dataset.dummy import DummySequence
    trackers = load_trackers(config.registry)

    if not config.tracker:
        logger.error("Unable to continue without a tracker")
        logger.error("List of available found trackers: ")
        for k, _ in trackers.items():
            logger.error(" * %s", k)
        return

    if not config.tracker in trackers:
        logger.error("Tracker does not exist")
        return

    tracker = trackers[config.tracker]

    logger.info("Generating dummy sequence")

    sequence = DummySequence(50)

    logger.info("Obtaining runtime for tracker %s", tracker.identifier)

    if config.visualize:
        import matplotlib.pylab as plt
        from vot.utilities.draw import MatplotlibDrawHandle
        figure = plt.figure()
        figure.canvas.set_window_title('VOT Test')
        axes = figure.add_subplot(1, 1, 1)
        axes.set_aspect("equal")
        handle = MatplotlibDrawHandle(axes, size=sequence.size)
        handle.style(fill=False)
        figure.show()

    runtime = None

    try:

        runtime = tracker.runtime(log=True)

        for repeat in range(1, 4):

            logger.info("Initializing tracker ({}/{})".format(repeat, 3))

            region, _, _ = runtime.initialize(sequence.frame(0),
                                              sequence.groundtruth(0))

            if config.visualize:
                axes.clear()
                handle.image(sequence.frame(0).channel())
                handle.style(color="green").region(
                    sequence.frame(0).groundtruth())
                handle.style(color="red").region(region)
                figure.canvas.draw()

            for i in range(1, sequence.length):
                logger.info("Updating on frame %d/%d", i, sequence.length - 1)
                region, _, _ = runtime.update(sequence.frame(i))

                if config.visualize:
                    axes.clear()
                    handle.image(sequence.frame(i).channel())
                    handle.style(color="green").region(
                        sequence.frame(i).groundtruth())
                    handle.style(color="red").region(region)
                    figure.canvas.draw()

            logger.info("Stopping tracker")

        runtime.stop()

        logger.info("Test concluded successfuly")

    except TrackerException as te:
        logger.error("Error during tracker execution: {}".format(te))
        if runtime:
            runtime.stop()
    except KeyboardInterrupt:
        if runtime:
            runtime.stop()
Example #4
0
def do_pack(config, logger):

    import zipfile, io
    from shutil import copyfileobj

    workspace = Workspace(config.workspace)

    logger.info("Loaded workspace in '%s'", config.workspace)

    registry = load_trackers(workspace.registry + config.registry)

    logger.info("Found data for %d trackers", len(registry))

    try:
        tracker = registry[config.tracker]
    except KeyError as ke:
        logger.error("Tracker not found %s", str(ke))
        return

    logger.info("Packaging results for tracker %s", tracker.identifier)

    all_files = []
    can_finish = True

    progress = Progress(desc="Scanning",
                        total=len(workspace.dataset) * len(workspace.stack))

    for experiment in workspace.stack:
        for sequence in workspace.dataset:
            transformers = experiment.workspace.stack.transformers(experiment)
            for transformer in transformers:
                sequence = transformer(sequence)
            complete, files, results = experiment.scan(tracker, sequence)
            all_files.extend([(f, experiment.identifier, sequence.name,
                               results) for f in files])
            if not complete:
                logger.error(
                    "Results are not complete for experiment %s, sequence %s",
                    experiment.identifier, sequence.name)
                can_finish = False
            progress.update_relative(1)

    if not can_finish:
        logger.error("Unable to continue, experiments not complete")
        return

    logger.info("Collected %d files, compressing to archive ...",
                len(all_files))

    archive_name = os.path.join(
        workspace.directory,
        "{}_{:%Y-%m-%dT%H-%M-%S.%f%z}.zip".format(tracker.identifier,
                                                  datetime.now()))

    progress = Progress(desc="Compressing", total=len(all_files))

    with zipfile.ZipFile(archive_name, 'w') as archive:
        for f in all_files:
            with io.TextIOWrapper(
                    archive.open(os.path.join(f[1], f[2], f[0]),
                                 mode="w")) as fout, f[3].read(f[0]) as fin:
                copyfileobj(fin, fout)
            progress.update_relative(1)

    logger.info("Result packaging successful, archive available in %s",
                archive_name)