| """Unit tests for the boxer bounding-box utilities.""" |
|
|
| import pytest |
|
|
| import boxer |
|
|
|
|
| def test_to_pascal_voc_pascal_voc_is_identity(): |
| assert boxer.to_pascal_voc((10, 20, 40, 60), "pascal_voc", 100, 100) == { |
| "x0": 10, "y0": 20, "x1": 40, "y1": 60, |
| } |
|
|
|
|
| def test_to_pascal_voc_albumentations_scales_by_dims(): |
| |
| assert boxer.to_pascal_voc((0.1, 0.2, 0.4, 0.6), "albumentations", 100, 200) == { |
| "x0": 10, "y0": 40, "x1": 40, "y1": 120, |
| } |
|
|
|
|
| def test_to_pascal_voc_coco_absolute_topleft_plus_size(): |
| assert boxer.to_pascal_voc((10, 20, 30, 40), "coco", 100, 100) == { |
| "x0": 10, "y0": 20, "x1": 40, "y1": 60, |
| } |
|
|
|
|
| def test_to_pascal_voc_coco_normalized_matches_reference_detection(): |
| |
| box = boxer.to_pascal_voc( |
| (0.5157407407407407, 0.36041666666666666, 0.11944444444444445, 0.16145833333333334), |
| "coco_normalized", |
| 1080, |
| 1920, |
| ) |
| assert box == {"x0": 557, "y0": 692, "x1": 686, "y1": 1002} |
|
|
|
|
| def test_to_pascal_voc_rejects_unknown_format(): |
| with pytest.raises(ValueError): |
| boxer.to_pascal_voc((0, 0, 1, 1), "yolo", 100, 100) |
|
|
|
|
| def test_get_bbox_dict_relative_vs_absolute(): |
| |
| assert boxer.get_bbox_dict(10, 20, 30, 40) == {"x0": 10, "y0": 20, "x1": 40, "y1": 60} |
| |
| assert boxer.get_bbox_dict(0.1, 0.2, 0.3, 0.4, im_wh=(100, 200)) == { |
| "x0": 10, "y0": 40, "x1": 40, "y1": 120, |
| } |
|
|
|
|
| def test_bbox_intersects_cross_overlap(): |
| |
| |
| a = {"x0": 4, "y0": 0, "x1": 6, "y1": 10} |
| b = {"x0": 0, "y0": 4, "x1": 10, "y1": 6} |
| assert boxer.bbox_intersects(a, b) is True |
|
|
|
|
| def test_bbox_intersects_disjoint(): |
| a = {"x0": 0, "y0": 0, "x1": 10, "y1": 10} |
| b = {"x0": 20, "y0": 20, "x1": 30, "y1": 30} |
| assert boxer.bbox_intersects(a, b) is False |
|
|