Spaces:
Runtime error
Runtime error
| import numpy as np | |
| from cv_ops.morphology import apply_morphology | |
| from cv_ops.transforms import reflect, rotate, scale_image, translate | |
| from filters.builtin import BUILTIN_FILTERS | |
| from filters.registry import apply_definition | |
| def sample_image(): | |
| img = np.zeros((20, 30, 3), dtype=np.uint8) | |
| img[5:15, 10:20] = [200, 100, 50] | |
| return img | |
| def test_builtin_filter_shapes(): | |
| img = sample_image() | |
| for name in ["Grayscale", "Sepia", "Invert", "Blur", "Sharpen", "Edge Detection"]: | |
| out = BUILTIN_FILTERS[name](img) | |
| assert out.shape == img.shape | |
| assert out.dtype == np.uint8 | |
| def test_transforms_return_matrices(): | |
| img = sample_image() | |
| out, matrix = translate(img, 2, 3) | |
| assert out.shape == img.shape | |
| assert matrix == [[1.0, 0.0, 2.0], [0.0, 1.0, 3.0]] | |
| assert rotate(img, 15, expand=False)[0].shape == img.shape | |
| assert scale_image(img, 2, 2)[0].shape[:2] == (40, 60) | |
| assert reflect(img, "both")[0].shape == img.shape | |
| def test_morphology_binary_output(): | |
| out, kernel = apply_morphology(sample_image(), "Opening", size=3) | |
| assert out.shape == sample_image().shape | |
| assert kernel.shape == (3, 3) | |
| def test_pipeline_definition(): | |
| img = sample_image() | |
| definition = {"type": "pipeline", "steps": [{"operation": "Invert", "params": {}}, {"operation": "Grayscale", "params": {}}]} | |
| out = apply_definition(img, definition) | |
| assert out.shape == img.shape | |
| def test_export_image(): | |
| from os.path import exists | |
| from app import export_image | |
| assert export_image(None) is None | |
| img = sample_image() | |
| filepath = export_image(img) | |
| assert filepath is not None | |
| assert isinstance(filepath, str) | |
| assert exists(filepath) | |
| assert filepath.endswith(".png") | |
| def test_face_filters(): | |
| from models.face_filters import BUILTIN_AR_FILTERS, apply_face_filter | |
| img = np.zeros((100, 100, 3), dtype=np.uint8) | |
| for filter_name in BUILTIN_AR_FILTERS: | |
| res, msg = apply_face_filter(img, filter_name) | |
| assert res.shape == img.shape | |
| assert res.dtype == np.uint8 | |
| assert isinstance(msg, str) | |
| def test_custom_ar_filters(): | |
| from models.face_filters import apply_face_filter, ar_filter_names, delete_ar_filter, save_ar_filter | |
| custom_def = { | |
| "elements": [ | |
| {"landmark": "forehead", "shape": "crown", "color": [255, 215, 0], "scale": 1.0}, | |
| {"landmark": "eyes", "shape": "visor", "color": [0, 255, 255], "scale": 1.0}, | |
| ] | |
| } | |
| saved = save_ar_filter("Test Crown Visor", custom_def) | |
| assert saved["name"] == "Test Crown Visor" | |
| assert "Test Crown Visor" in ar_filter_names(True) | |
| img = np.zeros((100, 100, 3), dtype=np.uint8) | |
| res, msg = apply_face_filter(img, "Test Crown Visor") | |
| assert res.shape == img.shape | |
| delete_ar_filter("Test Crown Visor") | |
| assert "Test Crown Visor" not in ar_filter_names(False) | |