find_small_apriltags.py

# Ce travail est publié sous licence MIT.
# Copyright (c) 2013-2023 OpenMV LLC. Tous droits réservés.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Détecter de petits AprilTags
#
# Ce script montre comment utiliser le suivi de blobs comme pré-filtre pour
# détecter des AprilTags dans l'image, en utilisant le suivi de blobs pour trouver la
# zone où se trouve le tag, puis en appelant find_apriltags
# sur ce blob.

# Remarque : ce script fonctionne bien à condition que la plupart des zones de l'image ne
# passent pas le test de seuillage... sinon, vous ne bénéficiez d'aucun gain de
# distance.

# Veuillez utiliser la famille de tags TAG36H11 pour ce script - c'est la famille de tags recommandée.

import csi
import time

# Définit les seuils pour détecter un objet blanc (c'est-à-dire le bord du tag)
thresholds = (150, 255)

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.GRAYSCALE)
csi0.snapshot(time=200)  # augmentez cette valeur pour laisser les méthodes automatiques s'exécuter plus longtemps
csi0.auto_gain(False)  # doit être désactivé pour le suivi de couleur
csi0.auto_whitebal(False)  # doit être désactivé pour le suivi de couleur

clock = time.clock()

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

    # Tout d'abord, nous recherchons les blobs susceptibles d'être des candidats pour des tags.
    box_list = []

    # AprilTags peut échouer par manque de RAM en fonction de la taille d'image transmise.
    tag_list = []

    for blob in img.find_blobs(
        [thresholds], pixels_threshold=100, area_threshold=100, merge=True
    ):
        # Ensuite, nous recherchons un tag dans une ROI plus grande que le blob.
        w = min(max(int(blob.w * 1.2), 10), 160)  # Ni trop petite, ni trop grande.
        h = min(max(int(blob.h * 1.2), 10), 160)  # Ni trop petite, ni trop 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))  # Nous les dessinerons plus tard.

        # Comme nous restreignons la taille de la ROI, AprilTags ne devrait pas manquer de RAM.
        # Mais si cela se produit, nous le gérons...
        try:
            tag_list.extend(img.find_apriltags(roi=(x, y, w, h)))
        except (
            MemoryError
        ):  # Ne capturez pas toutes les exceptions, sinon vous ne pourrez pas arrêter le script.
            pass

    for b in box_list:
        img.draw_rectangle(b)
    # Affiche maintenant les tags trouvés
    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 ""