示例#1
0
def test_labels_predicted_hdf5(multi_skel_vid_labels, tmpdir):
    labels = multi_skel_vid_labels
    filename = os.path.join(tmpdir, "test.h5")

    # Lets promote some of these Instances to predicted instances
    for label in labels:
        for i, instance in enumerate(label.instances):
            if i % 2 == 0:
                label.instances[i] = PredictedInstance.from_instance(
                    instance, 0.3)

    # Lets also add some from_predicted values
    for label in labels:
        label.instances[1].from_predicted = label.instances[0]

    # Try adding a node to the skeleton
    labels.skeletons[0].add_node("new node")

    # Save and compare the results
    Labels.save_hdf5(filename=filename, labels=labels)
    loaded_labels = Labels.load_hdf5(filename=filename)
    _check_labels_match(labels, loaded_labels)

    # Try deleting nodes from the skeleton
    node = labels.skeletons[0].nodes[-1]
    labels.skeletons[0].delete_node(node)
    node = labels.skeletons[0].nodes[-1]
    labels.skeletons[0].delete_node(node)

    # Save and compare the results
    Labels.save_hdf5(filename=filename, labels=labels)
    loaded_labels = Labels.load_hdf5(filename=filename)
    _check_labels_match(labels, loaded_labels)
示例#2
0
def test_many_videos_hdf5(tmpdir):
    labels = Labels()
    filename = os.path.join(tmpdir, "test.h5")

    labels.videos = [Video.from_filename(f"video {i}.mp4") for i in range(3000)]

    Labels.save_hdf5(filename=filename, labels=labels)
示例#3
0
def test_many_tracks_hdf5(tmpdir):
    labels = Labels()
    filename = os.path.join(tmpdir, "test.h5")

    labels.tracks = [Track(spawned_on=i, name=f"track {i}") for i in range(4000)]

    Labels.save_hdf5(filename=filename, labels=labels)
示例#4
0
def test_hdf5_empty_save(tmpdir):
    labels = Labels()
    filename = os.path.join(tmpdir, "test.h5")
    Labels.save_hdf5(filename=filename, labels=labels)

    dummy_video = Video.from_filename("foo.mp4")
    labels.videos.append(dummy_video)
    Labels.save_hdf5(filename=filename, labels=labels)
示例#5
0
def test_labels_hdf5(multi_skel_vid_labels, tmpdir):
    labels = multi_skel_vid_labels
    filename = os.path.join(tmpdir, "test.h5")

    Labels.save_hdf5(filename=filename, labels=labels)

    loaded_labels = Labels.load_hdf5(filename=filename)

    _check_labels_match(labels, loaded_labels)
示例#6
0
def test_many_suggestions_hdf5(tmpdir):
    labels = Labels()
    filename = os.path.join(tmpdir, "test.h5")
    video = Video.from_filename("foo.mp4")
    labels.videos = [video]

    labels.suggestions = [SuggestionFrame(video, i) for i in range(3000)]

    Labels.save_hdf5(filename=filename, labels=labels)
示例#7
0
def test_path_fix(tmpdir):
    labels = Labels()
    filename = os.path.join(tmpdir, "test.h5")

    # Add a video without a full path
    labels.add_video(Video.from_filename("small_robot.mp4"))

    Labels.save_hdf5(filename=filename, labels=labels)

    # Pass the path to the directory with the video
    labels = Labels.load_file(filename, video_search="tests/data/videos/")

    # Make sure we got the actual video path by searching that directory
    assert len(labels.videos) == 1
    assert labels.videos[0].filename == "tests/data/videos/small_robot.mp4"
示例#8
0
def test_path_fix_with_new_full_path(tmpdir):
    labels = Labels()
    filename = os.path.join(tmpdir, "test.h5")

    # Add video with bad filename
    labels.add_video(Video.from_filename("foo.mp4"))

    Labels.save_hdf5(filename=filename, labels=labels)

    # Pass list of full video paths to use instead of those in labels
    labels = Labels.load_file(
        filename, video_search=["tests/data/videos/small_robot.mp4"])

    # Make sure we got the actual video path by searching that directory
    assert len(labels.videos) == 1
    assert labels.videos[0].filename == "tests/data/videos/small_robot.mp4"
示例#9
0
def test_hdf5_from_predicted(multi_skel_vid_labels, tmpdir):
    labels = multi_skel_vid_labels
    filename = os.path.join(tmpdir, "test.h5")

    # Add some predicted instances to create from_predicted links
    for frame_num, frame in enumerate(labels):
        if frame_num % 20 == 0:
            frame.instances[
                0].from_predicted = PredictedInstance.from_instance(
                    frame.instances[0], float(frame_num))
            frame.instances.append(frame.instances[0].from_predicted)

    # Save and load, compare the results
    Labels.save_hdf5(filename=filename, labels=labels)
    loaded_labels = Labels.load_hdf5(filename=filename)

    for frame_num, frame in enumerate(loaded_labels):
        if frame_num % 20 == 0:
            assert frame.instances[0].from_predicted.score == float(frame_num)
示例#10
0
def test_labels_append_hdf5(multi_skel_vid_labels, tmpdir):
    labels = multi_skel_vid_labels
    filename = os.path.join(tmpdir, "test.h5")

    # Save each frame of the Labels dataset one by one in append
    # mode
    for label in labels:

        # Just do the first 20 to speed things up
        if label.frame_idx > 20:
            break

        Labels.save_hdf5(filename=filename, labels=Labels([label]), append=True)

    # Now load the dataset and make sure we get the same thing we started
    # with.
    loaded_labels = Labels.load_hdf5(filename=filename)

    _check_labels_match(labels, loaded_labels)
示例#11
0
def test_load_file(tmpdir):
    labels = Labels()
    filename = os.path.join(tmpdir, "test.h5")
    labels.add_video(Video.from_filename("small_robot.mp4"))
    Labels.save_hdf5(filename=filename, labels=labels)

    # Fix video path from full path
    labels = load_file(filename, search_paths="tests/data/videos/small_robot.mp4")
    assert Path(labels.video.filename).samefile("tests/data/videos/small_robot.mp4")

    # No auto-detect
    labels = load_file(filename, detect_videos=False)
    assert labels.video.filename == "small_robot.mp4"

    # Fix video path by searching in the labels folder
    tmpvid = tmpdir.join("small_robot.mp4")
    tmpvid.write("")  # dummy file
    assert load_file(filename).video.filename == tmpvid
    assert load_file(filename, search_paths=str(tmpdir)).video.filename == tmpvid
    assert load_file(filename, search_paths=str(tmpvid)).video.filename == tmpvid
示例#12
0
def test_save_labels_and_frames_hdf5(multi_skel_vid_labels, tmpdir):
    # Lets take a subset of the labels so this doesn't take too long
    labels = multi_skel_vid_labels
    labels.labeled_frames = labels.labeled_frames[5:30]

    filename = os.path.join(tmpdir, "test.h5")

    Labels.save_hdf5(filename=filename, labels=labels, save_frame_data=True)

    loaded_labels = Labels.load_hdf5(filename=filename)

    _check_labels_match(labels, loaded_labels)

    # Rename file (after closing videos)
    for vid in loaded_labels.videos:
        vid.close()
    filerename = os.path.join(tmpdir, "test_rename.h5")
    os.rename(filename, filerename)

    # Make sure we open can after rename
    loaded_labels = Labels.load_hdf5(filename=filerename)