test: update tests

This commit is contained in:
Dowon
2024-03-28 19:37:56 +09:00
parent 2fb273d40a
commit 98043a8abd
2 changed files with 168 additions and 121 deletions

View File

@@ -1,29 +1,18 @@
from functools import cache
import pytest
import requests
from PIL import Image
@cache
def _sample_image():
url = "https://i.imgur.com/E5OVXvn.png"
def get_image(url: str) -> Image.Image:
resp = requests.get(url, stream=True, headers={"User-Agent": "Mozilla/5.0"})
return Image.open(resp.raw)
@cache
def _sample_image2():
url = "https://i.imgur.com/px5UT7T.png"
resp = requests.get(url, stream=True, headers={"User-Agent": "Mozilla/5.0"})
return Image.open(resp.raw)
@pytest.fixture()
@pytest.fixture(scope="session")
def sample_image():
return _sample_image()
return get_image("https://i.imgur.com/E5OVXvn.png")
@pytest.fixture()
@pytest.fixture(scope="session")
def sample_image2():
return _sample_image2()
return get_image("https://i.imgur.com/px5UT7T.png")

View File

@@ -3,7 +3,15 @@ import numpy as np
import pytest
from PIL import Image, ImageDraw
from adetailer.mask import dilate_erode, has_intersection, is_all_black, offset
from adetailer.mask import (
bbox_area,
dilate_erode,
has_intersection,
is_all_black,
mask_invert,
mask_merge,
offset,
)
def test_dilate_positive_value():
@@ -63,112 +71,162 @@ def test_offset():
assert np.array_equal(np.array(result), expect)
def test_is_all_black_1():
class TestIsAllBlack:
def test_is_all_black_1(self):
img = Image.new("L", (10, 10), color="black")
assert is_all_black(img)
draw = ImageDraw.Draw(img)
draw.rectangle((4, 4, 5, 5), fill="white")
assert not is_all_black(img)
def test_is_all_black_2(self):
img = np.zeros((10, 10), dtype=np.uint8)
assert is_all_black(img)
img[4:6, 4:6] = 255
assert not is_all_black(img)
def test_is_all_black_rgb_image_pil(self):
img = Image.new("RGB", (10, 10), color="red")
assert not is_all_black(img)
img = Image.new("RGBA", (10, 10), color="red")
assert not is_all_black(img)
def test_is_all_black_rgb_image_numpy(self):
img = np.full((10, 10, 4), 127, dtype=np.uint8)
with pytest.raises(cv2.error):
is_all_black(img)
img = np.full((4, 10, 10), 0.5, dtype=np.float32)
with pytest.raises(cv2.error):
is_all_black(img)
class TestHasIntersection:
def test_has_intersection_1(self):
arr1 = np.array(
[
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
]
)
arr2 = arr1.copy()
assert not has_intersection(arr1, arr2)
def test_has_intersection_2(self):
arr1 = np.array(
[
[0, 0, 0, 0],
[0, 255, 255, 0],
[0, 255, 255, 0],
[0, 0, 0, 0],
]
)
arr2 = np.array(
[
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 255, 255],
[0, 0, 255, 255],
]
)
assert has_intersection(arr1, arr2)
arr3 = np.array(
[
[255, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 255],
[0, 0, 255, 255],
]
)
assert not has_intersection(arr1, arr3)
def test_has_intersection_3(self):
img1 = Image.new("L", (10, 10), color="black")
draw1 = ImageDraw.Draw(img1)
draw1.rectangle((3, 3, 5, 5), fill="white")
img2 = Image.new("L", (10, 10), color="black")
draw2 = ImageDraw.Draw(img2)
draw2.rectangle((6, 6, 8, 8), fill="white")
assert not has_intersection(img1, img2)
img3 = Image.new("L", (10, 10), color="black")
draw3 = ImageDraw.Draw(img3)
draw3.rectangle((2, 2, 8, 8), fill="white")
assert has_intersection(img1, img3)
def test_has_intersection_4(self):
img1 = Image.new("RGB", (10, 10), color="black")
draw1 = ImageDraw.Draw(img1)
draw1.rectangle((3, 3, 5, 5), fill="white")
img2 = Image.new("RGBA", (10, 10), color="black")
draw2 = ImageDraw.Draw(img2)
draw2.rectangle((2, 2, 8, 8), fill="white")
assert has_intersection(img1, img2)
def test_has_intersection_5(self):
img1 = Image.new("RGB", (10, 10), color="black")
draw1 = ImageDraw.Draw(img1)
draw1.rectangle((4, 4, 5, 5), fill="white")
img2 = np.full((10, 10, 4), 255, dtype=np.uint8)
assert has_intersection(img1, img2)
def test_bbox_area():
bbox = [0.0, 0.0, 10.0, 10.0]
assert bbox_area(bbox) == 100
class TestMaskMerge:
def test_mask_merge(self):
img1 = Image.new("L", (10, 10), color="black")
draw1 = ImageDraw.Draw(img1)
draw1.rectangle((3, 3, 5, 5), fill="white")
img2 = Image.new("L", (10, 10), color="black")
draw2 = ImageDraw.Draw(img2)
draw2.rectangle((6, 6, 8, 8), fill="white")
merged = mask_merge([img1, img2])
assert len(merged) == 1
expect = Image.new("L", (10, 10), color="black")
draw3 = ImageDraw.Draw(expect)
draw3.rectangle((3, 3, 5, 5), fill="white")
draw3.rectangle((6, 6, 8, 8), fill="white")
assert np.array_equal(np.array(merged[0]), np.array(expect))
def test_merge_mask_different_size(self):
img1 = Image.new("L", (10, 10), color="black")
draw1 = ImageDraw.Draw(img1)
draw1.rectangle((3, 3, 5, 5), fill="white")
img2 = Image.new("L", (20, 20), color="black")
draw2 = ImageDraw.Draw(img2)
draw2.rectangle((6, 6, 8, 8), fill="white")
with pytest.raises(
cv2.error, match="-209:Sizes of input arguments do not match"
):
mask_merge([img1, img2])
def test_mask_invert():
img = Image.new("L", (10, 10), color="black")
assert is_all_black(img)
draw = ImageDraw.Draw(img)
draw.rectangle((4, 4, 5, 5), fill="white")
assert not is_all_black(img)
draw.rectangle((3, 3, 5, 5), fill="white")
inverted = mask_invert([img])
assert len(inverted) == 1
def test_is_all_black_2():
img = np.zeros((10, 10), dtype=np.uint8)
assert is_all_black(img)
expect = Image.new("L", (10, 10), color="white")
draw = ImageDraw.Draw(expect)
draw.rectangle((3, 3, 5, 5), fill="black")
img[4:6, 4:6] = 255
assert not is_all_black(img)
def test_is_all_black_rgb_image_pil():
img = Image.new("RGB", (10, 10), color="red")
assert not is_all_black(img)
img = Image.new("RGBA", (10, 10), color="red")
assert not is_all_black(img)
def test_is_all_black_rgb_image_numpy():
img = np.full((10, 10, 4), 127, dtype=np.uint8)
with pytest.raises(cv2.error):
is_all_black(img)
img = np.full((4, 10, 10), 0.5, dtype=np.float32)
with pytest.raises(cv2.error):
is_all_black(img)
def test_has_intersection_1():
arr1 = np.array(
[
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
]
)
arr2 = arr1.copy()
assert not has_intersection(arr1, arr2)
def test_has_intersection_2():
arr1 = np.array(
[
[0, 0, 0, 0],
[0, 255, 255, 0],
[0, 255, 255, 0],
[0, 0, 0, 0],
]
)
arr2 = np.array(
[
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 255, 255],
[0, 0, 255, 255],
]
)
assert has_intersection(arr1, arr2)
arr3 = np.array(
[
[255, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 255],
[0, 0, 255, 255],
]
)
assert not has_intersection(arr1, arr3)
def test_has_intersection_3():
img1 = Image.new("L", (10, 10), color="black")
draw1 = ImageDraw.Draw(img1)
draw1.rectangle((3, 3, 5, 5), fill="white")
img2 = Image.new("L", (10, 10), color="black")
draw2 = ImageDraw.Draw(img2)
draw2.rectangle((6, 6, 8, 8), fill="white")
assert not has_intersection(img1, img2)
img3 = Image.new("L", (10, 10), color="black")
draw3 = ImageDraw.Draw(img3)
draw3.rectangle((2, 2, 8, 8), fill="white")
assert has_intersection(img1, img3)
def test_has_intersection_4():
img1 = Image.new("RGB", (10, 10), color="black")
draw1 = ImageDraw.Draw(img1)
draw1.rectangle((3, 3, 5, 5), fill="white")
img2 = Image.new("RGBA", (10, 10), color="black")
draw2 = ImageDraw.Draw(img2)
draw2.rectangle((2, 2, 8, 8), fill="white")
assert has_intersection(img1, img2)
def test_has_intersection_5():
img1 = Image.new("RGB", (10, 10), color="black")
draw1 = ImageDraw.Draw(img1)
draw1.rectangle((4, 4, 5, 5), fill="white")
img2 = np.full((10, 10, 4), 255, dtype=np.uint8)
assert has_intersection(img1, img2)
assert np.array_equal(np.array(inverted[0]), np.array(expect))