Ejemplo n.º 1
0
def test_instance_access():
    labels = Labels()

    dummy_skeleton = Skeleton()
    dummy_video = Video(backend=MediaVideo)
    dummy_video2 = Video(backend=MediaVideo)

    for i in range(10):
        labels.append(
            LabeledFrame(
                dummy_video,
                frame_idx=i,
                instances=[Instance(dummy_skeleton),
                           Instance(dummy_skeleton)],
            ))
    for i in range(10):
        labels.append(
            LabeledFrame(
                dummy_video2,
                frame_idx=i,
                instances=[
                    Instance(dummy_skeleton),
                    Instance(dummy_skeleton),
                    Instance(dummy_skeleton),
                ],
            ))

    assert len(labels.all_instances) == 50
    assert len(list(labels.instances(video=dummy_video))) == 20
    assert len(list(labels.instances(video=dummy_video2))) == 30
Ejemplo n.º 2
0
def test_save_labels_with_images(min_labels_slp, tmpdir):
    labels = Labels(min_labels_slp.labeled_frames)
    labels.append(LabeledFrame(video=labels.video, frame_idx=1))
    labels.suggestions.append(SuggestionFrame(video=labels.video, frame_idx=2))

    fn = os.path.join(tmpdir, "test_user_only.slp")
    labels.save(
        fn, with_images=True, embed_all_labeled=False, embed_suggested=False,
    )
    assert Labels.load_file(fn).video.embedded_frame_inds == [0]

    fn = os.path.join(tmpdir, "test_all_labeled.slp")
    labels.save(
        fn, with_images=True, embed_all_labeled=True, embed_suggested=False,
    )
    assert Labels.load_file(fn).video.embedded_frame_inds == [0, 1]

    fn = os.path.join(tmpdir, "test_suggested.slp")
    labels.save(
        fn, with_images=True, embed_all_labeled=False, embed_suggested=True,
    )
    assert Labels.load_file(fn).video.embedded_frame_inds == [0, 2]

    fn = os.path.join(tmpdir, "test_all.slp")
    labels.save(
        fn, with_images=True, embed_all_labeled=True, embed_suggested=True,
    )
    assert Labels.load_file(fn).video.embedded_frame_inds == [0, 1, 2]
Ejemplo n.º 3
0
def test_save_frame_data_hdf5(min_labels_slp, tmpdir):
    labels = Labels(min_labels_slp.labeled_frames)
    labels.append(LabeledFrame(video=labels.video, frame_idx=1))
    labels.suggestions.append(SuggestionFrame(video=labels.video, frame_idx=2))

    fn = os.path.join(tmpdir, "test_user_only.slp")
    labels.save_frame_data_hdf5(
        fn, format="png", user_labeled=True, all_labeled=False, suggested=False,
    )
    assert Video.from_filename(fn, dataset="video0").embedded_frame_inds == [0]

    fn = os.path.join(tmpdir, "test_all_labeled.slp")
    labels.save_frame_data_hdf5(
        fn, format="png", user_labeled=False, all_labeled=True, suggested=False,
    )
    assert Video.from_filename(fn, dataset="video0").embedded_frame_inds == [0, 1]

    fn = os.path.join(tmpdir, "test_suggested.slp")
    labels.save_frame_data_hdf5(
        fn, format="png", user_labeled=False, all_labeled=False, suggested=True,
    )
    assert Video.from_filename(fn, dataset="video0").embedded_frame_inds == [2]

    fn = os.path.join(tmpdir, "test_all.slp")
    labels.save_frame_data_hdf5(
        fn, format="png", user_labeled=False, all_labeled=True, suggested=True,
    )
    assert Video.from_filename(fn, dataset="video0").embedded_frame_inds == [0, 1, 2]
Ejemplo n.º 4
0
def simple_predictions():

    video = Video.from_filename("video.mp4")

    skeleton = Skeleton()
    skeleton.add_node("a")
    skeleton.add_node("b")

    track_a = Track(0, "a")
    track_b = Track(0, "b")

    labels = Labels()

    instances = []
    instances.append(
        PredictedInstance(
            skeleton=skeleton,
            score=2,
            track=track_a,
            points=dict(a=PredictedPoint(1, 1, score=0.5),
                        b=PredictedPoint(1, 1, score=0.5)),
        ))
    instances.append(
        PredictedInstance(
            skeleton=skeleton,
            score=5,
            track=track_b,
            points=dict(a=PredictedPoint(1, 1, score=0.7),
                        b=PredictedPoint(1, 1, score=0.7)),
        ))

    labeled_frame = LabeledFrame(video, frame_idx=0, instances=instances)
    labels.append(labeled_frame)

    instances = []
    instances.append(
        PredictedInstance(
            skeleton=skeleton,
            score=3,
            track=track_a,
            points=dict(a=PredictedPoint(4, 5, score=1.5),
                        b=PredictedPoint(1, 1, score=1.0)),
        ))
    instances.append(
        PredictedInstance(
            skeleton=skeleton,
            score=6,
            track=track_b,
            points=dict(a=PredictedPoint(6, 13, score=1.7),
                        b=PredictedPoint(1, 1, score=1.0)),
        ))

    labeled_frame = LabeledFrame(video, frame_idx=1, instances=instances)
    labels.append(labeled_frame)

    return labels
Ejemplo n.º 5
0
def test_scalar_properties():
    # Scalar
    dummy_video = Video(backend=MediaVideo)
    dummy_skeleton = Skeleton()
    dummy_instance = Instance(dummy_skeleton)
    dummy_frame = LabeledFrame(dummy_video,
                               frame_idx=0,
                               instances=[dummy_instance])

    labels = Labels()
    labels.append(dummy_frame)

    assert labels.video == dummy_video
    assert labels.skeleton == dummy_skeleton

    # Empty
    labels = Labels()
    with pytest.raises(ValueError):
        labels.video
    with pytest.raises(ValueError):
        labels.skeleton

    # More than one video
    dummy_skeleton = Skeleton()
    labels = Labels()
    labels.append(
        LabeledFrame(Video(backend=MediaVideo),
                     frame_idx=0,
                     instances=[Instance(dummy_skeleton)]))
    labels.append(
        LabeledFrame(Video(backend=MediaVideo),
                     frame_idx=0,
                     instances=[Instance(dummy_skeleton)]))
    assert labels.skeleton == dummy_skeleton
    with pytest.raises(ValueError):
        labels.video

    # More than one skeleton
    dummy_video = Video(backend=MediaVideo)
    labels = Labels()
    labels.append(
        LabeledFrame(dummy_video,
                     frame_idx=0,
                     instances=[Instance(Skeleton())]))
    labels.append(
        LabeledFrame(dummy_video,
                     frame_idx=1,
                     instances=[Instance(Skeleton())]))
    assert labels.video == dummy_video
    with pytest.raises(ValueError):
        labels.skeleton
Ejemplo n.º 6
0
def test_label_mutability():
    dummy_video = Video(backend=MediaVideo)
    dummy_skeleton = Skeleton()
    dummy_instance = Instance(dummy_skeleton)
    dummy_frame = LabeledFrame(dummy_video, frame_idx=0, instances=[dummy_instance])

    labels = Labels()
    labels.append(dummy_frame)

    assert dummy_video in labels.videos
    assert dummy_video in labels
    assert dummy_skeleton in labels.skeletons
    assert dummy_skeleton in labels
    assert dummy_frame in labels.labeled_frames
    assert dummy_frame in labels
    assert (dummy_video, 0) in labels
    assert (dummy_video, 1) not in labels

    dummy_video2 = Video(backend=MediaVideo)
    dummy_skeleton2 = Skeleton(name="dummy2")
    dummy_instance2 = Instance(dummy_skeleton2)
    dummy_frame2 = LabeledFrame(dummy_video2, frame_idx=0, instances=[dummy_instance2])
    assert dummy_video2 not in labels
    assert dummy_skeleton2 not in labels
    assert dummy_frame2 not in labels

    labels.append(dummy_frame2)
    assert dummy_video2 in labels
    assert dummy_frame2 in labels

    labels.remove_video(dummy_video2)
    assert dummy_video2 not in labels
    assert dummy_frame2 not in labels
    assert len(labels.find(dummy_video2)) == 0

    assert len(labels) == 1
    labels.append(LabeledFrame(dummy_video, frame_idx=0))
    assert len(labels) == 1

    dummy_frames = [LabeledFrame(dummy_video, frame_idx=i) for i in range(10)]
    dummy_frames2 = [LabeledFrame(dummy_video2, frame_idx=i) for i in range(10)]

    for f in dummy_frames + dummy_frames2:
        labels.append(f)

    assert len(labels) == 20
    labels.remove_video(dummy_video2)
    assert len(labels) == 10

    assert len(labels.find(dummy_video)) == 10
    assert dummy_frame in labels
    assert all([label in labels for label in dummy_frames[1:]])

    assert dummy_video2 not in labels
    assert len(labels.find(dummy_video2)) == 0
    assert all([label not in labels for label in dummy_frames2])

    labels.remove_video(dummy_video)
    assert len(labels.find(dummy_video)) == 0
Ejemplo n.º 7
0
def test_basic_suggestions(small_robot_mp4_vid):
    dummy_video = small_robot_mp4_vid
    dummy_skeleton = Skeleton()
    dummy_instance = Instance(dummy_skeleton)
    dummy_frame = LabeledFrame(dummy_video, frame_idx=0, instances=[dummy_instance])

    labels = Labels()
    labels.append(dummy_frame)

    suggestions = VideoFrameSuggestions.suggest(
        labels=labels, params=dict(method="sample", per_video=13)
    )
    labels.set_suggestions(suggestions)

    assert len(labels.get_video_suggestions(dummy_video)) == 13
Ejemplo n.º 8
0
def test_merge_predictions():
    dummy_video_a = Video.from_filename("foo.mp4")
    dummy_video_b = Video.from_filename("foo.mp4")

    dummy_skeleton_a = Skeleton()
    dummy_skeleton_a.add_node("node")

    dummy_skeleton_b = Skeleton()
    dummy_skeleton_b.add_node("node")

    dummy_instances_a = []
    dummy_instances_a.append(
        Instance(skeleton=dummy_skeleton_a, points=dict(node=Point(1, 1)))
    )
    dummy_instances_a.append(
        Instance(skeleton=dummy_skeleton_a, points=dict(node=Point(2, 2)))
    )

    labels_a = Labels()
    labels_a.append(
        LabeledFrame(dummy_video_a, frame_idx=0, instances=dummy_instances_a)
    )

    dummy_instances_b = []
    dummy_instances_b.append(
        Instance(skeleton=dummy_skeleton_b, points=dict(node=Point(1, 1)))
    )
    dummy_instances_b.append(
        PredictedInstance(
            skeleton=dummy_skeleton_b, points=dict(node=Point(3, 3)), score=1
        )
    )

    labels_b = Labels()
    labels_b.append(
        LabeledFrame(dummy_video_b, frame_idx=0, instances=dummy_instances_b)
    )

    # Frames have one redundant instance (perfect match) and all the
    # non-matching instances are different types (one predicted, one not).
    merged, extra_a, extra_b = Labels.complex_merge_between(labels_a, labels_b)
    assert len(merged[dummy_video_a]) == 1
    assert len(merged[dummy_video_a][0]) == 1  # the predicted instance was merged
    assert not extra_a
    assert not extra_b
Ejemplo n.º 9
0
def test_deserialize_suggestions(small_robot_mp4_vid, tmpdir):
    dummy_video = small_robot_mp4_vid
    dummy_skeleton = Skeleton()
    dummy_instance = Instance(dummy_skeleton)
    dummy_frame = LabeledFrame(dummy_video, frame_idx=0, instances=[dummy_instance])

    labels = Labels()
    labels.append(dummy_frame)

    suggestions = VideoFrameSuggestions.suggest(
        labels=labels, params=dict(method="sample", per_video=13)
    )
    labels.set_suggestions(suggestions)

    filename = os.path.join(tmpdir, "new_suggestions.h5")
    Labels.save_file(filename=filename, labels=labels)

    new_suggestion_labels = Labels.load_file(filename)
    assert len(suggestions) == len(new_suggestion_labels.suggestions)
    assert [frame.frame_idx for frame in suggestions] == [
        frame.frame_idx for frame in new_suggestion_labels.suggestions
    ]
Ejemplo n.º 10
0
def test_complex_merge():
    dummy_video_a = Video.from_filename("foo.mp4")
    dummy_video_b = Video.from_filename("foo.mp4")

    dummy_skeleton_a = Skeleton()
    dummy_skeleton_a.add_node("node")

    dummy_skeleton_b = Skeleton()
    dummy_skeleton_b.add_node("node")

    dummy_instances_a = []
    dummy_instances_a.append(
        Instance(skeleton=dummy_skeleton_a, points=dict(node=Point(1, 1))))
    dummy_instances_a.append(
        Instance(skeleton=dummy_skeleton_a, points=dict(node=Point(2, 2))))

    labels_a = Labels()
    labels_a.append(
        LabeledFrame(dummy_video_a, frame_idx=0, instances=dummy_instances_a))

    dummy_instances_b = []
    dummy_instances_b.append(
        Instance(skeleton=dummy_skeleton_b, points=dict(node=Point(1, 1))))
    dummy_instances_b.append(
        Instance(skeleton=dummy_skeleton_b, points=dict(node=Point(3, 3))))

    labels_b = Labels()
    labels_b.append(
        LabeledFrame(dummy_video_b, frame_idx=0,
                     instances=dummy_instances_b))  # conflict
    labels_b.append(
        LabeledFrame(dummy_video_b, frame_idx=1,
                     instances=dummy_instances_b))  # clean

    merged, extra_a, extra_b = Labels.complex_merge_between(labels_a, labels_b)

    # Check that we have the cleanly merged frame
    assert dummy_video_a in merged
    assert len(merged[dummy_video_a]) == 1  # one merged frame
    assert len(merged[dummy_video_a][1]) == 2  # with two instances

    # Check that labels_a includes redundant and clean
    assert len(labels_a.labeled_frames) == 2
    assert len(labels_a.labeled_frames[0].instances) == 1
    assert labels_a.labeled_frames[0].instances[0].points[0].x == 1
    assert len(labels_a.labeled_frames[1].instances) == 2
    assert labels_a.labeled_frames[1].instances[0].points[0].x == 1
    assert labels_a.labeled_frames[1].instances[1].points[0].x == 3

    # Check that extra_a/b includes the appropriate conflicting instance
    assert len(extra_a) == 1
    assert len(extra_b) == 1
    assert len(extra_a[0].instances) == 1
    assert len(extra_b[0].instances) == 1
    assert extra_a[0].instances[0].points[0].x == 2
    assert extra_b[0].instances[0].points[0].x == 3

    # Check that objects were unified
    assert extra_a[0].video == extra_b[0].video

    # Check resolving the conflict using new
    Labels.finish_complex_merge(labels_a, extra_b)
    assert len(labels_a.labeled_frames) == 2
    assert len(labels_a.labeled_frames[0].instances) == 2
    assert labels_a.labeled_frames[0].instances[1].points[0].x == 3