find_small_apriltags.py

# هذا العمل مرخص بموجب ترخيص MIT.
# حقوق النشر (c) 2013-2023 OpenMV LLC. جميع الحقوق محفوظة.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# إيجاد علامات Apriltags الصغيرة
#
# يوضح هذا السكربت كيفية استخدام تتبع الكتل كمرشّح أولي من أجل
# إيجاد علامات Apriltags في الصورة باستخدام تتبع الكتل لإيجاد
# منطقة وجود العلامة أولاً ثم استدعاء find_apriltags
# على تلك الكتلة.

# ملاحظة: يعمل هذا السكربت بشكل جيد بافتراض أن معظم أجزاء الصورة لا
# تجتاز اختبار العتبة... وإلا فلن تحصل على مسافة
# استفادة.

# يرجى استخدام عائلة العلامات TAG36H11 لهذا السكربت - إنها العائلة الموصى باستخدامها.

import csi
import time

# اضبط العتبات للعثور على جسم أبيض (أي حدود العلامة tag)
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()

    # أولاً، نبحث عن البقع (blobs) التي قد تكون مرشحة لتكون علامات (tags).
    box_list = []

    # قد تفشل AprilTags بسبب عدم توفر ذاكرة RAM كافية نظرًا لحجم الصورة الممرَّرة.
    tag_list = []

    for blob in img.find_blobs(
        [thresholds], pixels_threshold=100, area_threshold=100, merge=True
    ):
        # بعد ذلك نبحث عن علامة (tag) في منطقة اهتمام (ROI) أكبر من البقعة (blob).
        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، فلا ينبغي أن تنفد ذاكرة RAM لدى apriltags.
        # لكن إذا حدث ذلك فإننا نتعامل معه...
        try:
            tag_list.extend(img.find_apriltags(roi=(x, y, w, h)))
        except (
            MemoryError
        ):  # لا تلتقط جميع الاستثناءات وإلا لن تتمكن من إيقاف السكربت.
            pass

    for b in box_list:
        img.draw_rectangle(b)
    # الآن اطبع العلامات (tags) التي تم العثور عليها
    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 ""