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] | |