Spaces:
Runtime error
Runtime error
Download lib/MiVOS_STCN/davisinteractive/utils/scribbles_test.py from Lim-Kevin/VideoInpainterHF: direct link, hf CLI and curl.
- Browser
- Download file 11.3 kB
-
https://huggingface.co/spaces/Lim-Kevin/VideoInpainterHF/resolve/main/lib/MiVOS_STCN/davisinteractive/utils/scribbles_test.py
- Command line
-
hf download hf://spaces/Lim-Kevin/VideoInpainterHF/lib/MiVOS_STCN/davisinteractive/utils/scribbles_test.py
-
curl -L -o scribbles_test.py https://huggingface.co/spaces/Lim-Kevin/VideoInpainterHF/resolve/main/lib/MiVOS_STCN/davisinteractive/utils/scribbles_test.py
11.3 kB
| from __future__ import absolute_import, division | |
| import unittest | |
| import numpy as np | |
| import pytest | |
| from .scribbles import (annotated_frames, annotated_frames_object, | |
| fuse_scribbles, is_empty, scribbles2mask, | |
| scribbles2points) | |
| class TestScribbles2Mask(unittest.TestCase): | |
| def test_resolution(self): | |
| scribbles_data = { | |
| 'scribbles': [[], [{ | |
| 'path': [[0, 0], [0, 0.1]], | |
| 'object_id': 1, | |
| 'start_time': 0, | |
| 'end_time': 1000 | |
| }]], | |
| 'sequence': | |
| 'test' | |
| } | |
| mask = scribbles2mask(scribbles_data, (480, 856)) | |
| assert mask.shape == (2, 480, 856) | |
| assert mask.dtype == np.int | |
| mask = scribbles2mask(scribbles_data, (100, 100)) | |
| assert mask.shape == (2, 100, 100) | |
| assert mask.dtype == np.int | |
| mask = scribbles2mask(scribbles_data, (1, 1)) | |
| assert mask.shape == (2, 1, 1) | |
| assert mask.dtype == np.int | |
| with pytest.raises(ValueError): | |
| mask = scribbles2mask(scribbles_data, (0, 100)) | |
| with pytest.raises(ValueError): | |
| mask = scribbles2mask(scribbles_data, (1, -5)) | |
| with pytest.raises(ValueError): | |
| mask = scribbles2mask(scribbles_data, (1, 100, 100)) | |
| def test_output(self): | |
| scribbles_data = { | |
| 'scribbles': [[], [{ | |
| 'path': [[0, 0], [0, 0.1]], | |
| 'object_id': 1, | |
| 'start_time': 0, | |
| 'end_time': 1000 | |
| }]], | |
| 'sequence': | |
| 'test' | |
| } | |
| mask = scribbles2mask(scribbles_data, (480, 856)) | |
| assert mask.shape == (2, 480, 856) | |
| assert mask.dtype == np.int | |
| def test_mask_value(self): | |
| scribble_empty = { | |
| 'scribbles': [[], []], | |
| 'sequence': 'test', | |
| } | |
| mask_0 = scribbles2mask(scribble_empty, (100, 100), default_value=-1) | |
| assert np.all(mask_0 == -1) | |
| mask_1 = scribbles2mask(scribble_empty, (100, 100), default_value=0) | |
| assert np.all(mask_1 == 0) | |
| mask_2 = scribbles2mask(scribble_empty, (100, 100), default_value=2) | |
| assert np.all(mask_2 == 2) | |
| mask_3 = scribbles2mask(scribble_empty, (100, 100), default_value=1.9) | |
| assert np.all(mask_3 == 1) | |
| def test_mask_wo_bresenham(self): | |
| scribbles_data = { | |
| 'scribbles': [[], [{ | |
| 'path': [[0, 0], [0, 1]], | |
| 'object_id': 1, | |
| 'start_time': 0, | |
| 'end_time': 1000 | |
| }]], | |
| 'sequence': | |
| 'test' | |
| } | |
| mask = scribbles2mask( | |
| scribbles_data, (100, 150), bresenham=False, default_value=0) | |
| assert mask.sum() == 2 | |
| assert mask.dtype == np.int | |
| assert mask.min() == 0 and mask.max() == 1 | |
| assert mask[1, 0, 0] == 1 | |
| assert mask[1, -1, 0] == 1 | |
| def test_mask_w_bresenham(self): | |
| scribbles_data = { | |
| 'scribbles': [[], [{ | |
| 'path': [[0, 0], [0, 1]], | |
| 'object_id': 1, | |
| 'start_time': 0, | |
| 'end_time': 1000 | |
| }]], | |
| 'sequence': | |
| 'test' | |
| } | |
| mask = scribbles2mask( | |
| scribbles_data, (100, 150), bresenham=True, default_value=0) | |
| assert np.all(mask[0] == 0) | |
| assert np.all(mask[1, :, 0] == 1) | |
| assert np.all(mask[1, :, 1:] == 0) | |
| def test_mask_w_brezier(self): | |
| scribbles_data = { | |
| 'scribbles': [[], [{ | |
| 'path': [[0, 0], [0, 1]], | |
| 'object_id': 1, | |
| 'start_time': 0, | |
| 'end_time': 1000 | |
| }]], | |
| 'sequence': | |
| 'test' | |
| } | |
| mask = scribbles2mask( | |
| scribbles_data, (100, 150), | |
| bresenham=False, | |
| bezier_curve_sampling=True, | |
| default_value=0) | |
| assert np.all(mask[0] == 0) | |
| assert np.all(mask[1, :, 0] == 1) | |
| assert np.all(mask[1, :, 1:] == 0) | |
| class TestScribbles2Points(unittest.TestCase): | |
| def test_wo_output_resolution(self): | |
| scribbles_data = { | |
| 'scribbles': [[], [{ | |
| 'path': [[0, 0], [0, 0.1]], | |
| 'object_id': 1, | |
| 'start_time': 0, | |
| 'end_time': 1000 | |
| }]], | |
| 'sequence': | |
| 'test' | |
| } | |
| X, Y = scribbles2points(scribbles_data) | |
| assert X.shape == (2, 3) | |
| assert X.dtype == np.float | |
| assert Y.shape == (2,) | |
| assert Y.dtype == np.int | |
| assert np.all(X == np.asarray([[1, 0, 0], [1, 0, 0.1]])) | |
| assert np.all(Y == np.asarray([1, 1])) | |
| def test_w_output_resolution(self): | |
| scribbles_data = { | |
| 'scribbles': [[], [{ | |
| 'path': [[0, 0], [0, 0.1]], | |
| 'object_id': 1, | |
| 'start_time': 0, | |
| 'end_time': 1000 | |
| }]], | |
| 'sequence': | |
| 'test' | |
| } | |
| X, Y = scribbles2points(scribbles_data, output_resolution=(100, 100)) | |
| assert X.shape == (2, 3) | |
| assert X.dtype == np.int | |
| assert Y.shape == (2,) | |
| assert Y.dtype == np.int | |
| assert np.all(X == np.asarray([[1, 0, 0], [1, 0, 9]], dtype=np.int)) | |
| assert np.all(Y == np.asarray([1, 1])) | |
| X, Y = scribbles2points(scribbles_data, output_resolution=(101, 101)) | |
| assert np.all(X == np.asarray([[1, 0, 0], [1, 0, 10]], dtype=np.int)) | |
| class TestFuseScribbles(unittest.TestCase): | |
| def test_fuse_different_frame(self): | |
| scribble_1 = { | |
| 'scribbles': [[], [{ | |
| 'path': [[0, 0], [0, 0.1]], | |
| 'object_id': 1, | |
| 'start_time': 0, | |
| 'end_time': 1000 | |
| }]], | |
| 'sequence': | |
| 'test', | |
| } | |
| scribble_2 = { | |
| 'scribbles': [[{ | |
| 'path': [[0, 0], [0, 0.1]], | |
| 'object_id': 1, | |
| 'start_time': 0, | |
| 'end_time': 1000 | |
| }], []], | |
| 'sequence': | |
| 'test', | |
| } | |
| scribble_result = { | |
| 'scribbles': [[{ | |
| 'path': [[0, 0], [0, 0.1]], | |
| 'object_id': 1, | |
| 'start_time': 0, | |
| 'end_time': 1000 | |
| }], [{ | |
| 'path': [[0, 0], [0, 0.1]], | |
| 'object_id': 1, | |
| 'start_time': 0, | |
| 'end_time': 1000 | |
| }]], | |
| 'sequence': | |
| 'test', | |
| } | |
| assert scribble_result == fuse_scribbles(scribble_1, scribble_2) | |
| def test_same_frame(self): | |
| scribble = { | |
| 'scribbles': [[], [{ | |
| 'path': [[0, 0], [0, 0.1]], | |
| 'object_id': 1, | |
| 'start_time': 0, | |
| 'end_time': 1000 | |
| }]], | |
| 'sequence': | |
| 'test', | |
| } | |
| scribble_result = { | |
| 'scribbles': [[], [{ | |
| 'path': [[0, 0], [0, 0.1]], | |
| 'object_id': 1, | |
| 'start_time': 0, | |
| 'end_time': 1000 | |
| }, { | |
| 'path': [[0, 0], [0, 0.1]], | |
| 'object_id': 1, | |
| 'start_time': 0, | |
| 'end_time': 1000 | |
| }]], | |
| 'sequence': | |
| 'test', | |
| } | |
| assert scribble_result == fuse_scribbles(scribble, scribble) | |
| def test_wrong_sequence(self): | |
| scribble_1 = { | |
| 'scribbles': [[], [{ | |
| 'path': [[0, 0], [0, 0.1]], | |
| 'object_id': 1, | |
| 'start_time': 0, | |
| 'end_time': 1000 | |
| }]], | |
| 'sequence': | |
| 'xxxx', | |
| } | |
| scribble_2 = { | |
| 'scribbles': [[{ | |
| 'path': [[0, 0], [0, 0.1]], | |
| 'object_id': 1, | |
| 'start_time': 0, | |
| 'end_time': 1000 | |
| }], []], | |
| 'sequence': | |
| 'test', | |
| } | |
| with pytest.raises(ValueError): | |
| fuse_scribbles(scribble_1, scribble_2) | |
| def test_wrong_nb_frames(self): | |
| scribble_1 = { | |
| 'scribbles': [[], [{ | |
| 'path': [[0, 0], [0, 0.1]], | |
| 'object_id': 1, | |
| 'start_time': 0, | |
| 'end_time': 1000 | |
| }]], | |
| 'sequence': | |
| 'test', | |
| 'annotated_frame': | |
| 1 | |
| } | |
| scribble_2 = { | |
| 'scribbles': [[{ | |
| 'path': [[0, 0], [0, 0.1]], | |
| 'object_id': 1, | |
| 'start_time': 0, | |
| 'end_time': 1000 | |
| }]], | |
| 'sequence': | |
| 'test', | |
| } | |
| with pytest.raises(ValueError): | |
| fuse_scribbles(scribble_1, scribble_2) | |
| class TestEmpytScribble(unittest.TestCase): | |
| def test_not_empty(self): | |
| scribble = { | |
| 'scribbles': [[], [{ | |
| 'path': [[0, 0], [0, 0.1]], | |
| 'object_id': 1, | |
| 'start_time': 0, | |
| 'end_time': 1000 | |
| }]], | |
| 'sequence': | |
| 'test', | |
| } | |
| assert not is_empty(scribble) | |
| def test_empty(self): | |
| scribble = {'scribbles': [[] for _ in range(10)], 'sequence': 'test'} | |
| assert is_empty(scribble) | |
| class TestAnnotatedFrames(unittest.TestCase): | |
| def test_annotated_frames(self): | |
| scribble = { | |
| 'scribbles': [[], [{ | |
| 'path': [[0, 0], [0, 0.1]], | |
| 'object_id': 1, | |
| 'start_time': 0, | |
| 'end_time': 1000 | |
| }, { | |
| 'path': [[0, 0], [0, 0.1]], | |
| 'object_id': 1, | |
| 'start_time': 0, | |
| 'end_time': 1000 | |
| }], [], [], [{ | |
| 'path': [[0, 0], [0, 0.1]], | |
| 'object_id': 1, | |
| 'start_time': 0, | |
| 'end_time': 1000 | |
| }], []], | |
| 'sequence': | |
| 'test', | |
| } | |
| assert annotated_frames(scribble) == [1, 4] | |
| class TestAnnotatedFramesObject(unittest.TestCase): | |
| def test_annotated_frames(self): | |
| scribble = { | |
| 'scribbles': [[], [{ | |
| 'path': [[0, 0], [0, 0.1]], | |
| 'object_id': 1, | |
| 'start_time': 0, | |
| 'end_time': 1000 | |
| }, { | |
| 'path': [[0, 0], [0, 0.1]], | |
| 'object_id': 1, | |
| 'start_time': 0, | |
| 'end_time': 1000 | |
| }], [], [], [{ | |
| 'path': [[0, 0], [0, 0.1]], | |
| 'object_id': 2, | |
| 'start_time': 0, | |
| 'end_time': 1000 | |
| }, { | |
| 'path': [[0, 0], [0, 0.1]], | |
| 'object_id': 3, | |
| 'start_time': 0, | |
| 'end_time': 1000 | |
| }], [{ | |
| 'path': [[0, 0], [0, 0.1]], | |
| 'object_id': 2, | |
| 'start_time': 0, | |
| 'end_time': 1000 | |
| }], []], | |
| 'sequence': | |
| 'test', | |
| } | |
| assert annotated_frames_object(scribble, 1) == [1] | |
| assert annotated_frames_object(scribble, 2) == [4, 5] | |
| assert annotated_frames_object(scribble, 3) == [4] | |