Exemplo n.º 1
0
def test_requires_in_range_marker_id(marker_type: MarkerType) -> None:
    MarkerCamera(marker_type.max_id, marker_size=200, marker_type=marker_type)

    with pytest.raises(ValueError) as e:
        MarkerCamera(marker_type.max_id + 1, marker_size=200, marker_type=marker_type)

    assert "must be less than the maximum allowed" in e.value.args[0]
Exemplo n.º 2
0
def is_valid_calibration(filename: Path) -> bool:
    if not filename.is_file():
        return False

    # First, Try and parse the file
    try:
        parse_calibration_file(filename)
    except (SystemError, ValueError):
        return False

    with tempfile.NamedTemporaryFile(suffix=".png") as temp_file:
        marker_camera = MarkerCamera(0,
                                     200,
                                     marker_type=MarkerType.APRILTAG_36H11)
        marker_camera.save_frame(Path(temp_file.name))

        image_camera = ImageFileCamera(
            Path(temp_file.name),
            marker_size=200,
            marker_type=MarkerType.APRILTAG_36H11,
            calibration_file=filename,
        )

        # Sanity check the image camera
        if image_camera.get_visible_markers() != [0]:
            return False

        # Then, confirm the detection works
        if len(list(marker_camera.process_frame_eager())) != 1:
            return False

    return True
Exemplo n.º 3
0
def test_detects_markers(marker_id):
    markers = list(
        MarkerCamera(marker_id,
                     marker_dict=MarkerDict.DICT_6X6_50,
                     marker_size=200).process_frame())
    assert len(markers) == 1
    assert markers[0].id == marker_id
Exemplo n.º 4
0
def test_sees_nothing_in_blank_image():
    marker_camera = MarkerCamera(25,
                                 marker_dict=MarkerDict.DICT_6X6_50,
                                 marker_size=200)
    empty_frame = numpy.zeros((200, 200, 3), numpy.uint8)
    markers = list(marker_camera.process_frame(frame=empty_frame))
    assert markers == []
Exemplo n.º 5
0
def test_minimum_marker_size(marker_type: MarkerType) -> None:
    camera = MarkerCamera(
        marker_type.max_id,
        marker_size=marker_type.min_marker_image_size,
        marker_type=marker_type,
    )

    assert camera.get_visible_markers() == [marker_type.max_id]

    with pytest.raises(ValueError) as e:
        MarkerCamera(
            marker_type.max_id,
            marker_size=marker_type.min_marker_image_size - 1,
            marker_type=marker_type,
        )
    assert "marker must be at least" in e.value.args[0]
Exemplo n.º 6
0
def test_process_eager_frame_without_calibrations(marker_type: MarkerType) -> None:
    marker_camera = MarkerCamera(
        MAX_ALL_ALLOWED_ID, marker_size=200, marker_type=marker_type
    )
    marker_camera.calibration_params = None
    with pytest.raises(MissingCalibrationsError):
        list(marker_camera.process_frame_eager())
Exemplo n.º 7
0
def test_marker_type_max_id_disallowed(marker_type: MarkerType) -> None:
    camera = MarkerCamera(marker_type.max_id,
                          marker_size=100,
                          marker_type=marker_type)
    camera.marker_id = marker_type.max_id + 1  # There's an assertion in the constructor
    with pytest.raises(cv2.error):
        camera.get_visible_markers()
Exemplo n.º 8
0
def test_detects_markers(marker_type: MarkerType, marker_id: int) -> None:
    markers = list(
        MarkerCamera(
            marker_id, marker_size=100, marker_type=marker_type
        ).process_frame()
    )
    assert len(markers) == 1
    assert markers[0].id == marker_id
Exemplo n.º 9
0
def test_eager_capture(marker_id):
    markers = list(
        MarkerCamera(marker_id,
                     marker_dict=MarkerDict.DICT_6X6_50,
                     marker_size=200).process_frame_eager())
    assert len(markers) == 1
    assert markers[0].id == marker_id
    assert markers[0]._is_eager()
Exemplo n.º 10
0
def test_saved_image(temp_image_file, marker_id):
    marker_camera = MarkerCamera(marker_id,
                                 marker_dict=MarkerDict.DICT_6X6_50,
                                 marker_size=200)
    marker_camera.save_frame(temp_image_file)
    image_file_camera = ImageFileCamera(temp_image_file,
                                        marker_dict=MarkerDict.DICT_6X6_50)
    assert image_file_camera.get_visible_markers() == [marker_id]
Exemplo n.º 11
0
 def setUp(self) -> None:
     self.marker_camera = MarkerCamera(
         self.MARKER_ID,
         marker_size=self.MARKER_SIZE,
         marker_type=MarkerType.ARUCO_6X6,
     )
     self.markers = list(self.marker_camera.process_frame_eager())
     self.marker = self.markers[0]
Exemplo n.º 12
0
 def setUp(self):
     self.marker_camera = MarkerCamera(
         self.MARKER_ID,
         marker_dict=MarkerDict.DICT_6X6_50,
         marker_size=self.MARKER_SIZE,
     )
     self.markers = list(self.marker_camera.process_frame())
     self.marker = self.markers[0]
Exemplo n.º 13
0
def test_eager_capture(marker_type: MarkerType, marker_id: int) -> None:
    markers = list(
        MarkerCamera(
            marker_id, marker_size=200, marker_type=marker_type
        ).process_frame_eager()
    )
    assert len(markers) == 1
    assert markers[0].id == marker_id
    assert isinstance(markers[0], EagerMarker)
Exemplo n.º 14
0
 def setUp(self) -> None:
     self.marker_camera = MarkerCamera(
         self.MARKER_ID,
         marker_size=self.MARKER_SIZE,
         marker_type=MarkerType.ARUCO_6X6,
     )
     self.marker_camera.calibration_params = None
     self.markers = list(self.marker_camera.process_frame())
     self.marker = self.markers[0]
Exemplo n.º 15
0
def test_saved_image(
    marker_type: MarkerType, temp_image_file: Path, marker_id: int
) -> None:
    marker_camera = MarkerCamera(marker_id, marker_size=200, marker_type=marker_type)
    marker_camera.save_frame(temp_image_file)
    image_file_camera = ImageFileCamera(
        temp_image_file, marker_type=marker_type, marker_size=200
    )
    assert image_file_camera.get_visible_markers() == [marker_id]
Exemplo n.º 16
0
def test_detect_at_minimum_size(marker_type: MarkerType) -> None:
    marker_camera = MarkerCamera(
        0,
        marker_size=marker_type.min_marker_image_size,
        marker_type=marker_type,
        border_size=MarkerCamera.MIN_BORDER_SIZE,
    )
    frame = marker_camera.capture_frame()
    assert frame.shape == marker_camera.get_resolution()

    marker = next(marker_camera.process_frame(frame=frame))
    assert marker.id == 0
Exemplo n.º 17
0
def test_marker_size(
    marker_type: MarkerType, temp_image_file: Path, marker_id: int
) -> None:
    class TestCamera(ImageFileCamera):
        def get_marker_size(self, inner_marker_id: int) -> int:
            return inner_marker_id * 10

    marker_camera = MarkerCamera(marker_id, marker_size=200, marker_type=marker_type)
    marker_camera.save_frame(temp_image_file)
    image_file_camera = TestCamera(temp_image_file, marker_type=marker_type)
    marker = next(image_file_camera.process_frame())
    assert marker.size == marker_id * 10
    assert marker.id == marker_id
Exemplo n.º 18
0
def test_no_markers(temp_image_file: Path) -> None:
    marker_camera = MarkerCamera(
        MAX_ALL_ALLOWED_ID,
        marker_size=100,
        marker_type=MarkerType.ARUCO_4X4,
    )
    marker_camera.save_frame(temp_image_file)

    image_file_camera = ImageFileCamera(
        temp_image_file, marker_type=MarkerType.ARUCO_5X5, marker_size=100
    )

    assert marker_camera.marker_type != image_file_camera.marker_type
    assert image_file_camera.get_visible_markers() == []
Exemplo n.º 19
0
def main(args: argparse.Namespace) -> None:
    from PIL import Image, ImageDraw

    marker_type = MarkerType[args.type]
    output_dir: Path = args.path.resolve()
    output_dir.mkdir(exist_ok=True, parents=True)

    marker_ids = (parse_ranges(args.range)
                  if args.range != "ALL" else marker_type.marker_ids)

    for marker_id in sorted(marker_ids):
        with MarkerCamera(
                marker_id,
                marker_type=marker_type,
                marker_size=marker_type.min_marker_image_size,
        ) as camera:
            camera.border_size = 1  # HACK: There's validation in the constructor
            print("Saving", marker_id)  # noqa:T001

            if args.raw:
                camera.save_frame(output_dir / "{}.png".format(marker_id))
            else:
                image = Image.fromarray(camera.capture_frame())

                # Resize the image to the required size
                resized_image = image.resize((500, 500), resample=0)

                img_size = resized_image.size[0]

                ImageDraw.Draw(resized_image).text(
                    (25, img_size - 25),
                    args.description_format.format(
                        marker_type=marker_type.name, marker_id=marker_id),
                    anchor="lt",
                )
                resized_image.save(output_dir / "{}.png".format(marker_id))
Exemplo n.º 20
0
def test_marker_with_falsy_id(marker_type: MarkerType) -> None:
    with MarkerCamera(0, marker_size=200, marker_type=marker_type) as marker_camera:
        markers = list(marker_camera.get_visible_markers())
        assert markers == [0]
Exemplo n.º 21
0
def test_saved_image_with_annotation(temp_image_file, marker_id):
    marker_camera = MarkerCamera(marker_id,
                                 marker_dict=MarkerDict.DICT_6X6_50,
                                 marker_size=200)
    output_file = temp_image_file
    marker_camera.save_frame(output_file, annotate=True)
Exemplo n.º 22
0
def test_saved_image_with_annotation(
    temp_image_file: Path, marker_id: int, marker_type: MarkerType
) -> None:
    marker_camera = MarkerCamera(marker_id, marker_size=200, marker_type=marker_type)
    output_file = temp_image_file
    marker_camera.save_frame(output_file, annotate=True)
Exemplo n.º 23
0
def test_marker_with_falsy_id():
    with MarkerCamera(0, marker_dict=MarkerDict.DICT_6X6_50,
                      marker_size=200) as marker_camera:
        markers = list(marker_camera.get_visible_markers())
        assert markers == [0]
Exemplo n.º 24
0
def test_camera_as_context_manager():
    with MarkerCamera(25, marker_dict=MarkerDict.DICT_6X6_50,
                      marker_size=200) as marker_camera:
        markers = list(marker_camera.get_visible_markers())
        assert markers == [25]
Exemplo n.º 25
0
def test_captures_frame_at_correct_resolution(
    marker_size: int, marker_type: MarkerType
) -> None:
    marker_camera = MarkerCamera(25, marker_size=marker_size, marker_type=marker_type)
    frame = marker_camera.capture_frame()
    assert frame.shape == marker_camera.get_resolution()
Exemplo n.º 26
0
def test_detects_marker_ids(marker_id):
    markers = MarkerCamera(marker_id,
                           marker_dict=MarkerDict.DICT_6X6_50,
                           marker_size=200).get_visible_markers()
    assert markers == [marker_id]
Exemplo n.º 27
0
def test_captures_frame_at_correct_resolution(resolution):
    marker_camera = MarkerCamera(25,
                                 marker_dict=MarkerDict.DICT_6X6_50,
                                 marker_size=resolution)
    frame = marker_camera.capture_frame()
    assert frame.shape == marker_camera.get_resolution()
Exemplo n.º 28
0
def marker_camera():
    return MarkerCamera(25,
                        marker_dict=MarkerDict.DICT_6X6_50,
                        marker_size=200)
Exemplo n.º 29
0
def test_detects_marker_ids(marker_type: MarkerType, marker_id: int) -> None:
    markers = MarkerCamera(
        marker_id, marker_size=200, marker_type=marker_type
    ).get_visible_markers()
    assert markers == [marker_id]
Exemplo n.º 30
0
def test_camera_as_context_manager(marker_type: MarkerType) -> None:
    with MarkerCamera(
        MAX_ALL_ALLOWED_ID, marker_size=200, marker_type=marker_type
    ) as marker_camera:
        markers = list(marker_camera.get_visible_markers())
        assert markers == [MAX_ALL_ALLOWED_ID]