sensor_auto_gain_control.py
# هذا العمل مرخص بموجب ترخيص MIT.
# حقوق النشر (c) 2013-2023 OpenMV LLC. جميع الحقوق محفوظة.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# التحكم التلقائي في كسب الحساس
#
# يوضح هذا المثال كيفية التحكم في كسب الحساس
# باستخدام خوارزمية التحكم التلقائي في الكسب.
# ما الفرق بين التحكم في الكسب والتحكم في زمن التعريض الضوئي؟
#
# حسنًا، بزيادة زمن التعريض الضوئي للصورة فإنك تحصل على المزيد من
# الضوء على الكاميرا. هذا يمنحك أفضل نسبة إشارة إلى ضوضاء. أنت
# بشكل عام تريد دائمًا زيادة زمن التعريض الضوئي... إلا أنك عندما
# تزيد زمن التعريض الضوئي فإنك تقلل أقصى معدل إطارات ممكن
# وإذا تحرك أي شيء في الصورة فسيبدأ بالتشوش أكثر مع
# زمن تعريض ضوئي أعلى. يتيح لك التحكم في الكسب زيادة الخرج لكل
# بكسل باستخدام مضاعفات تناظرية ورقمية... مع ذلك، فإنه يضخم أيضًا
# الضوضاء. لذا، من الأفضل ترك زمن التعريض الضوئي يزداد قدر الإمكان
# ثم استخدام التحكم في الكسب لتعويض أي فرق متبقٍ.
# يمكننا تحقيق ذلك عن طريق تعيين سقف للكسب في خوارزمية
# التحكم التلقائي في الكسب. بمجرد تعيين ذلك، ستضطر الخوارزمية إلى
# زيادة زمن التعريض الضوئي لتلبية أي احتياجات للكسب بدلاً من استخدام الكسب
# للقيام بذلك. ومع ذلك، فإن هذا يأتي على حساب تغيّر زمن التعريض الضوئي
# بشكل أكبر عند تغيّر الإضاءة، مقارنةً بثبات زمن التعريض الضوئي و
# تغيّر الكسب.
import csi
import time
csi0 = csi.CSI()
csi0.reset() # إعادة ضبط المستشعر وتهيئته.
csi0.pixformat(csi.RGB565) # تعيين تنسيق البكسل إلى RGB565 (أو GRAYSCALE)
csi0.framesize(csi.QVGA) # تعيين حجم الإطار إلى QVGA (320x240)
# يصل سقف الكسب بوحدة db إلى حوالي 24 db كحد أقصى لحساس OV7725.
csi0.auto_gain(True, gain_db_ceiling=16.0) # الكسب الافتراضي.
# ملاحظة! إذا قمت بتعيين سقف الكسب منخفضًا دون ضبط التحكم في التعريض الضوئي
# للقيمة المستهدفة، فستحصل فقط على الكثير من التذبذب من
# التحكم في التعريض الضوئي إن كان مفعّلًا.
csi0.snapshot(time=2000) # انتظر حتى تدخل الإعدادات حيز التنفيذ.
clock = time.clock() # أنشئ كائن ساعة (clock) لتتبع معدل الإطارات (FPS).
while True:
clock.tick() # تحديث ساعة معدل الإطارات (FPS).
img = csi0.snapshot() # التقاط صورة وإرجاعها.
print(
"FPS %f, Gain %f dB, Exposure %d us"
% (clock.fps(), csi0.gain_db(), csi0.exposure_us())
)