Kevin L
Initial commit
5fd3fc6
Raw History Blame Contribute Delete
5.55 kB
from __future__ import absolute_import, division
import unittest
import numpy as np
import pytest
from PIL import Image
from davisinteractive.utils.visualization import (
_pascal_color_map, draw_scribble, overlay_mask, plot_scribble)
import matplotlib # isort:skip
matplotlib.use('Agg')
import matplotlib.pyplot as plt # isort:skip
class TestPascalColormap(unittest.TestCase):
def test_default(self):
colormap = _pascal_color_map()
assert colormap.shape == (256, 3)
assert colormap.dtype == np.uint8
assert np.all(colormap[0] == [0, 0, 0])
assert np.all(colormap[1] == [128, 0, 0])
assert np.all(colormap[2] == [0, 128, 0])
assert np.all(colormap[3] == [128, 128, 0])
assert np.all(colormap[255] == [224, 224, 192])
def test_normalized(self):
colormap = _pascal_color_map(normalized=True)
assert colormap.shape == (256, 3)
assert colormap.dtype == np.float32
assert np.all(np.isclose(colormap[0], [0, 0, 0]))
assert np.all(np.isclose(colormap[1], [128 / 255, 0, 0]))
assert np.all(np.isclose(colormap[2], [0, 128 / 255, 0]))
assert np.all(np.isclose(colormap[3], [128 / 255, 128 / 255, 0]))
assert np.all(
np.isclose(colormap[255], [224 / 255, 224 / 255, 192 / 255]))
class TestPlotScribble(unittest.TestCase):
def test_plot(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',
}
_, ax = plt.subplots(1)
plot_scribble(ax, scribble, 1, output_size=(100, 200))
plot_scribble(ax, scribble, 1)
with pytest.raises(ValueError):
plot_scribble(ax, scribble, 10)
class TestDrawScribble(unittest.TestCase):
def test_draw(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',
}
img = Image.fromarray(np.zeros((480, 854, 3), dtype=np.uint8))
img_draw = draw_scribble(img, scribble, 1)
img_draw = draw_scribble(img, scribble, 0)
self.assertEqual(img_draw, img)
class TestOverlay(unittest.TestCase):
def test_shape_mismatch(self):
im = np.random.randint(0, 255, (100, 200, 3), dtype=np.uint8)
ann = np.zeros((100, 201))
with pytest.raises(ValueError):
overlay_mask(im, ann)
def test_wrong_channel_dimensions(self):
im = np.random.randint(0, 255, (100, 200, 4), dtype=np.uint8)
ann = np.zeros((100, 200))
with pytest.raises(ValueError):
overlay_mask(im, ann)
def test_empty_mask(self):
im = np.random.randint(0, 255, (100, 200, 3), dtype=np.uint8)
ann = np.zeros((100, 200))
img = overlay_mask(im, ann)
assert img.shape == im.shape
assert img.dtype == im.dtype
assert np.all(img == im)
def test_full_mask(self):
im = np.random.randint(0, 255, (100, 200, 3), dtype=np.uint8)
ann = np.ones((100, 200))
img = overlay_mask(im, ann, alpha=1.)
assert img.shape == im.shape
assert img.dtype == im.dtype
assert np.all(img == im)
img = overlay_mask(im, ann, alpha=0.)
assert img.shape == im.shape
assert img.dtype == im.dtype
assert np.all(img == [128, 0, 0])
img = overlay_mask(im, ann, alpha=0., colors=[[45, 43, 76], [1, 2, 3]])
assert img.shape == im.shape
assert img.dtype == im.dtype
assert np.all(img == [1, 2, 3])
def test_mask(self):
im = np.random.randint(0, 255, (100, 200, 3), dtype=np.uint8)
ann = np.zeros((100, 200))
ann[50:70, 50:150] = 1
img = overlay_mask(im, ann, alpha=.5)
assert img.shape == im.shape
assert img.dtype == im.dtype
assert np.all(img[ann == 0] == im[ann == 0])
assert not np.all(img[ann != 0] == im[ann != 0])