triggered_mode.py
# هذا العمل مرخص بموجب ترخيص MIT.
# حقوق النشر (c) 2013-2023 OpenMV LLC. جميع الحقوق محفوظة.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# مثال وضع التشغيل بالمشغل الزمني (triggered) للغالق الشامل (Global Shutter)
#
# يوضح هذا المثال ضبط كاميرا الغالق الشامل في وضع التشغيل بالمشغل الزمني. في هذا الوضع
# تتحكم snapshot() بشكل دقيق تمامًا في وقت بدء تكامل بكسلات الكاميرا بحيث يمكنك المزامنة
# بين التقاط الصور وحركة خارجية ما. وبما أن الكاميرا تلتقط جميع البكسلات في نفس الوقت
# (كونها كاميرا غالق شامل مقارنة بكاميرا الغالق المتدحرج) فإن الحركة في الصورة
# لن تُلتقط إلا لمدة زمن التكامل فقط وليس زمن التكامل مضروبًا في عدد
# الصفوف في الصورة. بالإضافة إلى ذلك، تقل ضوضاء الحساس في وضع التشغيل بالمشغل الزمني لأن الكاميرا
# لن تقرأ الصفوف إلا بعد انتهاء التعريض الضوئي، مما ينتج عنه صورة بجودة أعلى.
#
# مع ذلك، سينخفض أقصى معدل إطارات لديك بمقدار 2 إلى 3 لأن الإطارات لم تعد تُنتج
# بشكل مستمر من الكاميرا ولأنه يجب عليك الانتظار حتى ينتهي التكامل قبل
# قراءة الإطار.
import csi
import time
csi0 = csi.CSI()
csi0.reset() # إعادة ضبط المستشعر وتهيئته.
csi0.pixformat(csi.GRAYSCALE) # تعيين صيغة البكسل إلى GRAYSCALE
csi0.framesize(csi.VGA) # تعيين حجم الإطار إلى VGA (640x480)
csi0.snapshot(time=2000) # انتظر حتى تدخل الإعدادات حيز التنفيذ.
clock = time.clock() # أنشئ كائن ساعة (clock) لتتبع معدل الإطارات (FPS).
csi0.ioctl(csi.IOCTL_SET_TRIGGERED_MODE, True)
while True:
clock.tick() # تحديث ساعة معدل الإطارات (FPS).
img = csi0.snapshot() # التقاط صورة وإرجاعها.
print(clock.fps()) # ملاحظة: تعمل كاميرا OpenMV بحوالي نصف السرعة عند الاتصال
# بالـ IDE. يجب أن يزداد معدل الإطارات (FPS) بعد قطع الاتصال.