find_small_apriltags.py

# Dieses Werk ist unter der MIT-Lizenz lizenziert.
# Copyright (c) 2013-2023 OpenMV LLC. Alle Rechte vorbehalten.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Kleine Apriltags finden
#
# Dieses Skript zeigt, wie man Blob-Tracking als Vorfilter verwendet, um
# Apriltags im Bild zu finden, indem Blob-Tracking genutzt wird, um den
# Bereich zu finden, in dem sich das Tag befindet, und anschließend find_apriltags
# auf diesem Blob aufzurufen.

# Hinweis: Dieses Skript funktioniert gut, sofern die meisten Teile des Bildes den
# Schwellenwerttest nicht bestehen ... andernfalls erhalten Sie keinen Entfernungs-
# vorteil.

# Bitte verwenden Sie für dieses Skript die Tag-Familie TAG36H11 - sie ist die empfohlene Tag-Familie.

import csi
import time

# Setzen Sie die Schwellenwerte, um ein weißes Objekt zu finden (d. h. den Tag-Rand)
thresholds = (150, 255)

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.GRAYSCALE)
csi0.snapshot(time=200)  # erhöhen Sie diesen Wert, damit die automatischen Methoden länger laufen
csi0.auto_gain(False)  # muss für das Farb-Tracking deaktiviert werden
csi0.auto_whitebal(False)  # muss für das Farb-Tracking deaktiviert werden

clock = time.clock()

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

    # Zuerst suchen wir Blobs, die als Kandidaten für Tags infrage kommen.
    box_list = []

    # AprilTags kann fehlschlagen, wenn nicht genug RAM für die übergebene Bildgröße vorhanden ist.
    tag_list = []

    for blob in img.find_blobs(
        [thresholds], pixels_threshold=100, area_threshold=100, merge=True
    ):
        # Als Nächstes suchen wir nach einem Tag in einer ROI, die größer als der Blob ist.
        w = min(max(int(blob.w * 1.2), 10), 160)  # Nicht zu klein, nicht zu groß.
        h = min(max(int(blob.h * 1.2), 10), 160)  # Nicht zu klein, nicht zu groß.
        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))  # Wir zeichnen diese später.

        # Da wir die ROI-Größe einschränken, sollte AprilTags nicht der RAM ausgehen.
        # Sollte dies dennoch passieren, behandeln wir es ...
        try:
            tag_list.extend(img.find_apriltags(roi=(x, y, w, h)))
        except (
            MemoryError
        ):  # Fangen Sie nicht alle Ausnahmen ab, sonst können Sie das Skript nicht stoppen.
            pass

    for b in box_list:
        img.draw_rectangle(b)
    # Nun die gefundenen Tags ausgeben
    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 ""