absolute-translation.py

# هذا العمل مرخص بموجب ترخيص MIT.
# حقوق النشر (c) 2013-2023 OpenMV LLC. جميع الحقوق محفوظة.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# الانتقال المطلق بالتدفق البصري
#
# يوضح هذا المثال استخدام كاميرا OpenMV لقياس الانتقال
# في اتجاهي X وY عن طريق مقارنة الصورة الحالية
# بالصورة السابقة. لاحظ أن الانتقال على المحورين X وY فقط هو
# ما يتم التعامل معه - وليس الدوران/القياس في هذا الوضع.
#
# لتشغيل هذا العرض التوضيحي بفعالية، يرجى تثبيت كاميرا OpenMV على قاعدة
# قاعدة ثابتة وحرّكها ببطء لليسار واليمين والأعلى والأسفل و
# راقب تغيّر الأرقام. لاحظ أنه يمكنك رؤية أرقام الإزاحة
# حتى +- نصف الدقة الأفقية والرأسية.
#
# ملاحظة: يجب استخدام دقة صغيرة من مضاعفات 2 عند استخدام
# find_displacement(). وذلك لأن الخوارزمية تعمل بواسطة
# ما يسمى بارتباط الطور (phase correlation) الذي يقوم بمقارنة الصور
# باستخدام تحويل فورييه السريع (FFT). الدقة غير المضاعفة لـ 2 تتطلب حشوًا لأقرب مضاعف
# لـ 2 مما يقلل من فائدة نتائج الخوارزمية. يرجى
# استخدم دقة مثل B64X64 أو B64X32 (أسرع بمقدار الضعف).
#
# تدعم كاميرا OpenMV الخاصة بك دقات من مضاعفات 2 مثل 64x32 و64x64
# و128x64 و128x128. إذا أردت دقة 32x32 يمكنك إنشاءها
# عن طريق تنفيذ "img.scale(x_scale=0.5, y_scale=0.5, hint=image.AREA)" على صورة 64x64.

import csi
import image
import time

csi0 = csi.CSI()
csi0.reset()  # إعادة ضبط المستشعر وتهيئته.
csi0.pixformat(csi.RGB565)  # تعيين تنسيق البكسل إلى RGB565 (أو GRAYSCALE)
csi0.framesize((64, 64))  # تعيين حجم الإطار إلى 64x64... (أو 64x32)...
csi0.snapshot(time=2000)  # انتظر حتى تدخل الإعدادات حيز التنفيذ.
clock = time.clock()  # أنشئ كائن ساعة (clock) لتتبع معدل الإطارات (FPS).

# إنشاء ذاكرة تخزين مؤقت ثانية للإطار على الكومة (heap).
extra_fb = image.Image(csi0.width(), csi0.height(), csi0.pixformat())
extra_fb.draw_image(csi0.snapshot())

while True:
    clock.tick()  # تتبع عدد الميلي ثانية المنقضية بين استدعاءات snapshot().
    img = csi0.snapshot()  # التقاط صورة وإرجاعها.

    # في هذا المثال لا نقوم أبدًا بتحديث الصورة القديمة لقياس التغيّر المطلق.
    displacement = extra_fb.find_displacement(img)

    # نتائج الإزاحة تكون مشوبة بالضوضاء بدون ترشيح، لذا نتنازل عن بعض الدقة.
    sub_pixel_x = int(displacement.x_translation * 5) / 5.0
    sub_pixel_y = int(displacement.y_translation * 5) / 5.0

    if (
        displacement.response > 0.1
    ):  # أقل من 0.1 تقريبًا (قد تختلف النتائج) تكون النتائج مجرد ضوضاء.
        print(
            "{0:+f}x {1:+f}y {2} {3} FPS".format(
                sub_pixel_x, sub_pixel_y, displacement.response, clock.fps()
            )
        )
    else:
        print(clock.fps())

results matching ""

    No results matching ""