find_small_apriltags.py

# Esta obra está licenciada bajo la licencia MIT.
# Copyright (c) 2013-2023 OpenMV LLC. Todos los derechos reservados.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Encontrar Apriltags pequeños
#
# Este script muestra cómo usar el seguimiento de blobs como prefiltro para
# encontrar Apriltags en la imagen, usando el seguimiento de blobs para encontrar el
# área donde está la etiqueta primero, y luego llamando a find_apriltags
# sobre ese blob.

# Nota: este script funciona bien asumiendo que la mayor parte de la imagen no
# pasa la prueba de umbralización... de lo contrario, no se obtiene ninguna ventaja de
# distancia.

# Utilice la familia de etiquetas TAG36H11 para este script; es la familia de etiquetas recomendada.

import csi
import time

# Establece los umbrales para encontrar un objeto blanco (es decir, el borde de la etiqueta)
thresholds = (150, 255)

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.GRAYSCALE)
csi0.snapshot(time=200)  # aumente este valor para permitir que los métodos automáticos se ejecuten más tiempo
csi0.auto_gain(False)  # debe estar desactivado para el seguimiento de color
csi0.auto_whitebal(False)  # debe estar desactivado para el seguimiento de color

clock = time.clock()

while True:
    clock.tick()
    img = csi0.snapshot()

    # Primero, encontramos blobs que pueden ser candidatos a etiquetas.
    box_list = []

    # AprilTags puede fallar por no tener suficiente RAM dado el tamaño de imagen que se le pasa.
    tag_list = []

    for blob in img.find_blobs(
        [thresholds], pixels_threshold=100, area_threshold=100, merge=True
    ):
        # Luego buscamos una etiqueta en una ROI que sea más grande que el blob.
        w = min(max(int(blob.w * 1.2), 10), 160)  # Ni demasiado pequeña, ni demasiado grande.
        h = min(max(int(blob.h * 1.2), 10), 160)  # Ni demasiado pequeña, ni demasiado grande.
        x = min(max(int(blob.x + (blob.w / 4) - (w * 0.1)), 0), img.width() - 1)
        y = min(max(int(blob.y + (blob.h / 4) - (h * 0.1)), 0), img.height() - 1)

        box_list.append((x, y, w, h))  # Las dibujaremos más adelante.

        # Como restringimos el tamaño de la ROI, apriltags no debería quedarse sin RAM.
        # Pero, si sucede, lo manejamos...
        try:
            tag_list.extend(img.find_apriltags(roi=(x, y, w, h)))
        except (
            MemoryError
        ):  # No capture todas las excepciones, de lo contrario no podrá detener el script.
            pass

    for b in box_list:
        img.draw_rectangle(b)
    # Ahora imprima las etiquetas encontradas
    for tag in tag_list:
        img.draw_detection(tag)
        for c in tag.corners:
            img.draw_circle((c[0], c[1], 5))
        print("Tag:", tag.cx, tag.cy, tag.rotation, tag.id)

results matching ""

    No results matching ""