MikeTrizna's picture
Upload folder using huggingface_hub
f3270e6 verified
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
@pytest.fixture(scope="function")
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
@pytest.fixture(scope="function")
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