sensor_exposure_control.py

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

# ما الفرق بين التحكم في الكسب والتحكم في زمن التعريض الضوئي؟
#
# حسنًا، بزيادة زمن التعريض الضوئي للصورة فإنك تحصل على المزيد من
# الضوء على الكاميرا. هذا يمنحك أفضل نسبة إشارة إلى ضوضاء. أنت
# بشكل عام تريد دائمًا زيادة زمن التعريض الضوئي... إلا أنك عندما
# تزيد زمن التعريض الضوئي فإنك تقلل أقصى معدل إطارات ممكن
# وإذا تحرك أي شيء في الصورة فسيبدأ بالتشوش أكثر مع
# زمن تعريض ضوئي أعلى. يتيح لك التحكم في الكسب زيادة الخرج لكل
# بكسل باستخدام مضاعفات تناظرية ورقمية... مع ذلك، فإنه يضخم أيضًا
# الضوضاء. لذا، من الأفضل ترك زمن التعريض الضوئي يزداد قدر الإمكان
# ثم استخدام التحكم في الكسب لتعويض أي فرق متبقٍ.

import csi
import time

# غيّر هذه القيمة لضبط التعريض الضوئي. جرّب 10.0/0.1/إلخ.
EXPOSURE_TIME_SCALE = 1.0

csi0 = csi.CSI()
csi0.reset()  # إعادة ضبط المستشعر وتهيئته.
csi0.pixformat(csi.RGB565)  # تعيين تنسيق البكسل إلى RGB565 (أو GRAYSCALE)
csi0.framesize(csi.QVGA)  # تعيين حجم الإطار إلى QVGA (320x240)

# طباعة زمن التعريض الضوئي الأولي للمقارنة.
print("Initial exposure == %d" % csi0.exposure_us())

csi0.snapshot(time=2000)  # انتظر حتى تدخل الإعدادات حيز التنفيذ.
clock = time.clock()  # أنشئ كائن ساعة (clock) لتتبع معدل الإطارات (FPS).

# يجب عليك إيقاف التحكم التلقائي في الكسب وتوازن اللون الأبيض التلقائي
# وإلا فسيقومان بتغيير كسب الصورة لإلغاء أي إعدادات تعريض ضوئي
# قمت بتطبيقها...
csi0.auto_gain(False)
csi0.auto_whitebal(False)
# يجب الانتظار حتى تصبح الإعدادات أعلاه فعالة...
csi0.snapshot(time=500)

current_exposure_time_in_microseconds = csi0.exposure_us()
print("Current Exposure == %d" % current_exposure_time_in_microseconds)

# التحكم التلقائي في التعريض الضوئي (AEC) مفعّل افتراضيًا. استدعاء الدالة أدناه
# يعطّل التحكم التلقائي في التعريض الضوئي للحساس. المعامل الإضافي "exposure_us"
# يقوم بتجاوز قيمة التعريض الضوئي التلقائي بعد تعطيل AEC.
csi0.auto_exposure(
    False, exposure_us=int(current_exposure_time_in_microseconds * EXPOSURE_TIME_SCALE)
)

print("New exposure == %d" % csi0.exposure_us())
# csi0.exposure_us() تُرجع زمن التعريض الضوئي الدقيق لحساس الكاميرا
# بالميكروثانية. ومع ذلك، قد يكون هذا رقمًا مختلفًا عما تم
# طلبه لأن كود الحساس يحوّل زمن التعريض الضوئي بالميكروثانية
# إلى زمن صف/بكسل/ساعة لا يتطابق تمامًا مع الميكروثانية...

# إذا أردت إعادة تفعيل التعريض الضوئي التلقائي فقم بـ: csi0.auto_exposure(True)
# لاحظ أن حساس الكاميرا سيقوم عندها بتغيير زمن التعريض الضوئي كما يشاء.

# تنفيذ: csi0.auto_exposure(False)
# يقوم فقط بتعطيل تحديث قيمة التعريض الضوئي لكن لا يغيّر قيمة التعريض
# الضوئي التي حددها حساس الكاميرا كقيمة جيدة.

while True:
    clock.tick()  # تحديث ساعة معدل الإطارات (FPS).
    img = csi0.snapshot()  # التقاط صورة وإرجاعها.
    print(clock.fps())  # ملاحظة: تعمل كاميرا OpenMV بحوالي نصف السرعة عند الاتصال
    # بالـ IDE. يجب أن يزداد معدل الإطارات (FPS) بعد قطع الاتصال.

results matching ""

    No results matching ""