Spaces:
Runtime error
Runtime error
# Copyright (c) OpenMMLab. All rights reserved. | |
"""Test text mask_utils.""" | |
import tempfile | |
from unittest import mock | |
import numpy as np | |
import pytest | |
import mmocr.core.evaluation.utils as eval_utils | |
import mmocr.core.mask as mask_utils | |
import mmocr.core.visualize as visualize_utils | |
def test_points2boundary(): | |
points = np.array([[1, 2]]) | |
text_repr_type = 'quad' | |
text_score = None | |
# test invalid arguments | |
with pytest.raises(AssertionError): | |
mask_utils.points2boundary([], text_repr_type, text_score) | |
with pytest.raises(AssertionError): | |
mask_utils.points2boundary(points, '', text_score) | |
with pytest.raises(AssertionError): | |
mask_utils.points2boundary(points, '', 1.1) | |
# test quad | |
points = np.array([[0, 0], [1, 0], [2, 0], [0, 1], [1, 1], [2, 1], [0, 2], | |
[1, 2], [2, 2]]) | |
text_repr_type = 'quad' | |
text_score = None | |
result = mask_utils.points2boundary(points, text_repr_type, text_score) | |
pred_poly = eval_utils.points2polygon(result) | |
target_poly = eval_utils.points2polygon([2, 2, 0, 2, 0, 0, 2, 0]) | |
assert eval_utils.poly_iou(pred_poly, target_poly) == 1 | |
# test poly | |
text_repr_type = 'poly' | |
result = mask_utils.points2boundary(points, text_repr_type, text_score) | |
pred_poly = eval_utils.points2polygon(result) | |
target_poly = eval_utils.points2polygon([0, 0, 0, 2, 2, 2, 2, 0]) | |
assert eval_utils.poly_iou(pred_poly, target_poly) == 1 | |
def test_seg2boundary(): | |
seg = np.array([[]]) | |
text_repr_type = 'quad' | |
text_score = None | |
# test invalid arguments | |
with pytest.raises(AssertionError): | |
mask_utils.seg2boundary([[]], text_repr_type, text_score) | |
with pytest.raises(AssertionError): | |
mask_utils.seg2boundary(seg, 1, text_score) | |
with pytest.raises(AssertionError): | |
mask_utils.seg2boundary(seg, text_repr_type, 1.1) | |
seg = np.array([[1, 1, 1], [1, 1, 1], [1, 1, 1]]) | |
result = mask_utils.seg2boundary(seg, text_repr_type, text_score) | |
pred_poly = eval_utils.points2polygon(result) | |
target_poly = eval_utils.points2polygon([2, 2, 0, 2, 0, 0, 2, 0]) | |
assert eval_utils.poly_iou(pred_poly, target_poly) == 1 | |
def test_show_feature(mock_plt): | |
features = [np.random.rand(10, 10)] | |
names = ['test'] | |
to_uint8 = [0] | |
out_file = None | |
# test invalid arguments | |
with pytest.raises(AssertionError): | |
visualize_utils.show_feature([], names, to_uint8, out_file) | |
with pytest.raises(AssertionError): | |
visualize_utils.show_feature(features, [1], to_uint8, out_file) | |
with pytest.raises(AssertionError): | |
visualize_utils.show_feature(features, names, ['a'], out_file) | |
with pytest.raises(AssertionError): | |
visualize_utils.show_feature(features, names, to_uint8, 1) | |
with pytest.raises(AssertionError): | |
visualize_utils.show_feature(features, names, to_uint8, [0, 1]) | |
visualize_utils.show_feature(features, names, to_uint8) | |
# test showing img | |
mock_plt.title.assert_called_once_with('test') | |
mock_plt.show.assert_called_once() | |
# test saving fig | |
out_file = tempfile.NamedTemporaryFile().name | |
visualize_utils.show_feature(features, names, to_uint8, out_file) | |
mock_plt.savefig.assert_called_once() | |
def test_show_img_boundary(mock_plt): | |
img = np.random.rand(10, 10) | |
boundary = [0, 0, 1, 0, 1, 1, 0, 1] | |
# test invalid arguments | |
with pytest.raises(AssertionError): | |
visualize_utils.show_img_boundary([], boundary) | |
with pytest.raises(AssertionError): | |
visualize_utils.show_img_boundary(img, np.array([])) | |
# test showing img | |
visualize_utils.show_img_boundary(img, boundary) | |
mock_plt.imshow.assert_called_once() | |
mock_plt.show.assert_called_once() | |
def test_show_pred_gt(mock_mmcv): | |
preds = [[0, 0, 1, 0, 1, 1, 0, 1]] | |
gts = [[0, 0, 1, 0, 1, 1, 0, 1]] | |
show = True | |
win_name = 'test' | |
wait_time = 0 | |
out_file = tempfile.NamedTemporaryFile().name | |
with pytest.raises(AssertionError): | |
visualize_utils.show_pred_gt(np.array([]), gts) | |
with pytest.raises(AssertionError): | |
visualize_utils.show_pred_gt(preds, np.array([])) | |
# test showing img | |
visualize_utils.show_pred_gt(preds, gts, show, win_name, wait_time, | |
out_file) | |
mock_mmcv.imshow.assert_called_once() | |
mock_mmcv.imwrite.assert_called_once() | |
def test_imshow_pred_boundary(mock_imshow, mock_imwrite): | |
img = './tests/data/test_img1.jpg' | |
boundaries_with_scores = [[0, 0, 1, 0, 1, 1, 0, 1, 1]] | |
labels = [1] | |
file = tempfile.NamedTemporaryFile().name | |
visualize_utils.imshow_pred_boundary( | |
img, boundaries_with_scores, labels, show=True, out_file=file) | |
mock_imwrite.assert_called_once() | |
mock_imshow.assert_called_once() | |
def test_imshow_text_char_boundary(mock_imshow, mock_imwrite): | |
img = './tests/data/test_img1.jpg' | |
text_quads = [[0, 0, 1, 0, 1, 1, 0, 1]] | |
boundaries = [[0, 0, 1, 0, 1, 1, 0, 1]] | |
char_quads = [[[0, 0, 1, 0, 1, 1, 0, 1], [0, 0, 1, 0, 1, 1, 0, 1]]] | |
chars = [['a', 'b']] | |
show = True, | |
out_file = tempfile.NamedTemporaryFile().name | |
visualize_utils.imshow_text_char_boundary( | |
img, | |
text_quads, | |
boundaries, | |
char_quads, | |
chars, | |
show=show, | |
out_file=out_file) | |
mock_imwrite.assert_called_once() | |
mock_imshow.assert_called_once() | |
def test_overlay_mask_img(mock_drawContours): | |
img = np.random.rand(10, 10) | |
mask = np.zeros((10, 10)) | |
visualize_utils.overlay_mask_img(img, mask) | |
mock_drawContours.assert_called_once() | |
def test_extract_boundary(): | |
result = {} | |
# test invalid arguments | |
with pytest.raises(AssertionError): | |
mask_utils.extract_boundary(result) | |
result = {'boundary_result': [0, 1]} | |
with pytest.raises(AssertionError): | |
mask_utils.extract_boundary(result) | |
result = {'boundary_result': [[0, 0, 1, 0, 1, 1, 0, 1, 1]]} | |
output = mask_utils.extract_boundary(result) | |
assert output[2] == [1] | |