Spaces:
Running
Running
| from io import BytesIO | |
| import cv2 | |
| import numpy as np | |
| import pytest | |
| import requests | |
| from doctr.io import reader | |
| from doctr.models._utils import estimate_orientation, get_language, invert_data_structure | |
| from doctr.utils import geometry | |
| def mock_image(tmpdir_factory): | |
| url = "https://doctr-static.mindee.com/models?id=v0.2.1/bitmap30.png&src=0" | |
| file = BytesIO(requests.get(url).content) | |
| tmp_path = str(tmpdir_factory.mktemp("data").join("mock_bitmap.jpg")) | |
| with open(tmp_path, "wb") as f: | |
| f.write(file.getbuffer()) | |
| image = reader.read_img_as_numpy(tmp_path) | |
| return image | |
| def mock_bitmap(mock_image): | |
| bitmap = np.squeeze(cv2.cvtColor(mock_image, cv2.COLOR_BGR2GRAY) / 255.0) | |
| bitmap = np.expand_dims(bitmap, axis=-1) | |
| return bitmap | |
| def test_estimate_orientation(mock_image, mock_bitmap, mock_tilted_payslip): | |
| assert estimate_orientation(mock_image * 0) == 0 | |
| # test binarized image | |
| angle = estimate_orientation(mock_bitmap) | |
| assert abs(angle) - 30 < 1.0 | |
| angle = estimate_orientation(mock_bitmap * 255) | |
| assert abs(angle) - 30.0 < 1.0 | |
| angle = estimate_orientation(mock_image) | |
| assert abs(angle) - 30.0 < 1.0 | |
| rotated = geometry.rotate_image(mock_image, angle) | |
| angle_rotated = estimate_orientation(rotated) | |
| assert abs(angle_rotated) == 0 | |
| mock_tilted_payslip = reader.read_img_as_numpy(mock_tilted_payslip) | |
| assert estimate_orientation(mock_tilted_payslip) == -30 | |
| rotated = geometry.rotate_image(mock_tilted_payslip, -30, expand=True) | |
| angle_rotated = estimate_orientation(rotated) | |
| assert abs(angle_rotated) < 1.0 | |
| with pytest.raises(AssertionError): | |
| estimate_orientation(np.ones((10, 10, 10))) | |
| # test with general_page_orientation | |
| assert estimate_orientation(mock_bitmap, (90, 0.9)) in range(140, 160) | |
| rotated = geometry.rotate_image(mock_tilted_payslip, -30) | |
| assert estimate_orientation(rotated, (0, 0.9)) in range(-10, 10) | |
| assert estimate_orientation(mock_image, (0, 0.9)) - 30 < 1.0 | |
| def test_get_lang(): | |
| sentence = "This is a test sentence." | |
| expected_lang = "en" | |
| threshold_prob = 0.99 | |
| lang = get_language(sentence) | |
| assert lang[0] == expected_lang | |
| assert lang[1] > threshold_prob | |
| lang = get_language("a") | |
| assert lang[0] == "unknown" | |
| assert lang[1] == 0.0 | |
| def test_convert_list_dict(): | |
| dic = {"k1": [[0], [0], [0]], "k2": [[1], [1], [1]]} | |
| tar_dict = [{"k1": [0], "k2": [1]}, {"k1": [0], "k2": [1]}, {"k1": [0], "k2": [1]}] | |
| converted_dic = invert_data_structure(dic) | |
| converted_list = invert_data_structure(tar_dict) | |
| assert converted_dic == tar_dict | |
| assert converted_list == dic | |