find_small_apriltags.py

# この作品はMITライセンスの下で提供されています。
# Copyright (c) 2013-2023 OpenMV LLC. 全著作権所有。
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# 小さな Apriltags の検出
#
# このスクリプトは、ブロブトラッキングを事前フィルターとして使用する方法を示します。
# ブロブトラッキングを用いて画像内で Apriltags を検出する際に、まず
# タグがある領域を見つけ、その後 find_apriltags を呼び出します
# そのブロブに対して。

# 注意: このスクリプトは、画像のほとんどの部分が
# しきい値テストに合格しないことを前提としてうまく動作します...そうでない場合、距離の
# 面での利点は得られません。

# このスクリプトには TAG36H11 タグファミリーを使用してください。これは推奨されるタグファミリーです。

import csi
import time

# 白色のオブジェクト(すなわちタグの枠)を検出するためのしきい値を設定
thresholds = (150, 255)

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.GRAYSCALE)
csi0.snapshot(time=200)  # 自動処理をより長く実行させるにはこの値を増やします
csi0.auto_gain(False)  # カラートラッキングでは無効にする必要があります
csi0.auto_whitebal(False)  # カラートラッキングでは無効にする必要があります

clock = time.clock()

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

    # まず、タグの候補となり得るブロブを検出します。
    box_list = []

    # 渡された画像サイズによっては RAM 不足のため AprilTags の検出が失敗することがあります。
    tag_list = []

    for blob in img.find_blobs(
        [thresholds], pixels_threshold=100, area_threshold=100, merge=True
    ):
        # 次に、ブロブより大きい ROI 内でタグを探します。
        w = min(max(int(blob.w * 1.2), 10), 160)  # 小さすぎず、大きすぎない。
        h = min(max(int(blob.h * 1.2), 10), 160)  # 小さすぎず、大きすぎない。
        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))  # これらは後で描画します。

        # ROI サイズを制限しているため、apriltags が RAM 不足になることはないはずです。
        # しかし、万一そうなった場合は処理します...
        try:
            tag_list.extend(img.find_apriltags(roi=(x, y, w, h)))
        except (
            MemoryError
        ):  # すべての例外をキャッチしないでください。そうしないとスクリプトを停止できなくなります。
            pass

    for b in box_list:
        img.draw_rectangle(b)
    # 検出したタグを表示します
    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 ""