csi --- مستشعرات الكاميرا¶
وحدة csi هي الواجهة الحديثة كائنية التوجه لمستشعر (مستشعرات) الكاميرا على OpenMV Cam. يُمثَّل كل مستشعر فيزيائي بمثيل CSI، لذا يمكن للوحات التصوير متعددة الأطياف التي تقرن مستشعر لون مع مستشعر حراري أو مستشعر أحداث أن تشغّل كل واحد منها بشكل مستقل عبر تمرير قيمة cid مختلفة إلى المُنشئ. أما الكاميرات أحادية المستشعر فتنشئ مثيلاً واحداً من CSI.
يمتلك كائن CSI تكوين المستشعر الكامل -- تنسيق البكسل، وحجم الإطار / النافذة، والتعريض / الكسب / موازنة اللون الأبيض، والانعكاس والقلب الأجهزة، ونمط اختبار شريط الألوان، وساعة معدل الإطارات، ومنطقة الاهتمام للتعريض التلقائي، وأوامر ioctl الخاصة بكل شريحة. تُلتقط الإطارات باستخدام CSI.snapshot()، التي تُرجع كائن image.Image مدعوماً بمخزن الإطارات.
تحل هذه الوحدة محل وحدة sensor القديمة (التي كانت تعرض الوظائف نفسها كدوال على مستوى الوحدة مرتبطة بمستشعر واحد مخفي). ينبغي للبرامج الجديدة أن تستخدم CSI.
مثال على الاستخدام:
import csi
# Setup camera.
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)
csi0.snapshot(time=2000) # skip frames
# Take pictures.
while(True):
csi0.snapshot()
الاستخدام مع asyncio¶
حلقة CSI.snapshot() الحاجبة أعلاه لا تتعاون مع حلقة أحداث asyncio -- فبينما تنتظر snapshot الإطار التالي، تتجمد كل دالة تعاونية أخرى في البرنامج. للسماح لحلقة الالتقاط بالتعايش مع أعمال متزامنة أخرى (عميل UART، أو مراقب زر، أو مهمة شبكة)، غلّف CSI بمحوّل صغير يحوّل snapshot إلى دالة تعاونية ملائمة لـ await عبر استطلاع snapshot(blocking=False) والتنازل لحلقة الأحداث بين عمليات الفحص:
import asyncio
import csi
class AsyncCSI:
def __init__(self, *args, **kwargs):
self._csi = csi.CSI(*args, **kwargs)
def __getattr__(self, name):
return getattr(self._csi, name)
async def snapshot(self):
while True:
img = self._csi.snapshot(blocking=False)
if img is not None:
return img
await asyncio.sleep_ms(0)
يقوم __getattr__ بإعادة توجيه كل سمة أخرى (reset و pixformat و framesize ومقابض المستشعر) إلى CSI الأساسي بحيث يكون الغلاف بديلاً جاهزاً للاستبدال. كما يبدأ أول استدعاء غير حاجب التقاط DMA للكاميرا إن لم يكن قيد التشغيل بالفعل، فلا حاجة إلى أي تهيئة إضافية.
ثم تندمج حلقة الالتقاط في برنامج asyncio أكبر كمجرد دالة تعاونية أخرى:
async def capture_loop(cam):
while True:
img = await cam.snapshot()
# process img here
async def main():
cam = AsyncCSI()
cam.reset()
cam.pixformat(csi.RGB565)
cam.framesize(csi.QVGA)
asyncio.create_task(some_other_task())
await capture_loop(cam)
asyncio.run(main())
لا يزال إعداد framebuffers مهماً في هذا الشكل -- إذ يجعل وضع المخزن المفرد snapshot(blocking=False) يُرجع None حتى يُلتقط الإطار التالي، بينما يخفف التخزين المزدوج أو الثلاثي من ذلك بحيث يجد الغلاف عادةً إطاراً مخزَّناً في انتظاره عند أول استطلاع. راجع تتويج AsyncCSI في درس asyncio التعليمي للحصول على الشرح الكامل.
الصنف CSI -- واجهة مستشعر الكاميرا¶
يُستخدَم الصنف CSI للتحكم في مستشعر الكاميرا.
- class csi.CSI(cid: int = -1, delays: bool = True, fflush: bool = True, stream: bool | None = None)¶
إنشاء كائن للتواصل مع مستشعر الكاميرا. على اللوحات التي تحتوي على مستشعرات متعددة، يمكن اختيار كائن CSI معين عبر تمرير
cidمثلcsi.LEPTONلاختيار وحدة مستشعر FLIR Lepton. إذا كانت قيمةcidتساوي -1 فسيُختار المستشعر الأساسي (وهو عادةً وحدة كاميرا ملونة على اللوحات متعددة المستشعرات).إذا كانت قيمة
delaysهيFalseفستُعطَّل جميع فترات تأخير زمن الاستقرار في برنامج تشغيل csi. افتراضياً، يُؤخّر برنامج تشغيل المستشعر بعد إعادة التعيين / تغيير الوضع لمنع إرجاع إطارات تالفة عبرCSI.snapshot. يتيح لك تعطيل فترات التأخير تجميع التحديثات وتطبيق تأخير واحد في النهاية قبل استدعاءCSI.snapshot.إذا كانت قيمة
fflushهيFalseفسيُعطَّل التفريغ التلقائي لمخزن الإطارات المذكور فيCSI.framebuffers. وهذا يزيل أي حد زمني على الإطارات في طابور (fifo) مخزن الإطارات.تحدد قيمة
streamما إذا كان هذا الكائن CSI هو مصدر التدفق المُرسَل إلى IDE. إذا كانتNone(الافتراضي) فسيصبح الكائن CSI مصدر التدفق فقط إذا كان المستشعر الأساسي (غير المساعد). مرّرTrueلإجبار هذا الكائن CSI على أن يكون مصدر التدفق، أو أي قيمة خاطئة لترك مصدر التدفق الحالي دون تغيير.الطرق¶
- reset(hard: bool = True) None¶
تهيئة مستشعر الكاميرا. تُجري إعادة تعيين أجهزة عبر تبديل إشارة RESET على GPIO لوحدة الكاميرا إذا كانت قيمة
hardهيTrue. ينبغي ضبطhardعلى false عند إعادة تعيين مستشعرات الكاميرا المساعدة التي تشترك في إشارة RESET على GPIO نفسها مع الوحدة الأساسية.
- shutdown(enable: bool) None¶
يضع الكاميرا في وضع طاقة أقل من وضع السكون (لكن يجب إعادة تعيين الكاميرا عند إيقاظها).
- sleep(enable: bool) None¶
يضع الكاميرا في وضع السكون إذا كانت قيمة
enableهي True. وإلا، يوقظها مجدداً.
- flush() None¶
ينسخ محتويات مخزن الإطارات الحالي إلى معاينة IDE. استدعِ هذا بعد آخر
CSI.snapshotإذا انتهى البرنامج النصي حتى يعرض IDE الإطار الأخير.
- snapshot(time: int = -1, frames: int = -1, blocking: bool = True, image: image.Image | None = None) image.Image | None¶
يلتقط صورة باستخدام الكاميرا ويُرجع كائن
image.Image.إذا مُرِّرت قيمة
timeو/أوframesفستحجب snapshot لذلك العدد من المللي ثانية فيtimeو/أو عدد الإطارات الملتقطة من الكاميرا فيframes. يمكن استخدام كلتا الوسيطتين في الوقت نفسه. بعد انقضاءtimeو/أوframesستُرجع snapshot القيمةNone.يمكن أن تكون قيمة
blockingهيFalseلتفعيل السلوك غير الحاجب الذي يجعل snapshot تُرجعNoneعندما لا تكون الصورة التالية من الكاميرا جاهزة بدلاً من الانتظار.يمكن أن تكون قيمة
imageكائنimage.Imageآخر لتحديثه بالصورة الجديدة الملتقطة من الكاميرا بدلاً من إرجاع كائنimage.Imageجديد. تُستبدَل محتويات الصورة السابقة عبر نسخة عميقة.إذا كانت
CSI.auto_rotationمُفعَّلة فستُرجع هذه الطريقة كائنimage.Imageمُدوَّراً بالفعل.
- cid() int¶
يُرجع معرّف شريحة وحدة الكاميرا. قارِنه بأي من
csi.OV2640أوcsi.OV5640أوcsi.OV7670أوcsi.OV7690أوcsi.OV7725أوcsi.OV9650أوcsi.MT9V022أوcsi.MT9V024أوcsi.MT9V032أوcsi.MT9V034أوcsi.MT9M114أوcsi.BOSON320أوcsi.BOSON640أوcsi.LEPTONأوcsi.HM01B0أوcsi.HM0360أوcsi.GC2145أوcsi.GENX320ESأوcsi.GENX320أوcsi.PAG7920أوcsi.PAG7936أوcsi.PAJ6100أوcsi.FROGEYE2020أوcsi.SOFTCSI.
- readable() bool¶
يُرجع
Trueإذا كانت هناك صورة جاهزة لإرجاعها عبرCSI.snapshotبحيث لا يحجب استدعاء snapshot.
- pixformat(pixformat: int | None = None) int | None¶
يضبط تنسيق البكسل لوحدة الكاميرا على أحد القيم
csi.GRAYSCALEأوcsi.RGB565أوcsi.BAYERأوcsi.YUV422أوcsi.JPEG(على OV2640/OV5640 فقط).يُرجع تنسيق البكسل الحالي إذا استُدعي دون وسائط.
- framesize(framesize: int | Tuple[int, int] | None = None) int | None¶
يضبط حجم الإطار لوحدة الكاميرا على أحد ثوابت الحجم (مثل
csi.QVGAوcsi.VGAوcsi.HDوغيرها --- راجع قسم الثوابت).بدلاً من ذلك، يمكنك تمرير حجم إطار مخصص كصف
(w, h). عند استدعاءCSI.snapshotسيُقيَّم حجم الإطار المخصص وفق قواعد DMA. عموماً، يجب أن تكون أحجام الإطارات من مضاعفات 8 بكسلات و/أو 16 بايت.يُرجع حجم الإطار الحالي إذا استُدعي دون وسائط.
- framerate(rate: int | None = None) int | None¶
يضبط معدل الإطارات بالهرتز لوحدة الكاميرا.
يُرجع معدل الإطارات الحالي إذا استُدعي دون وسائط.
ملاحظة
تعمل
CSI.framerateعبر إسقاط الإطارات المستقبَلة من وحدة الكاميرا للحفاظ على معدل الإطارات عند المعدل المحدد أو دونه. افتراضياً، ستعمل الكاميرا بأقصى معدل إطارات. إذا كانت مُطبَّقة لمستشعر الكاميرا المعين، فستقللCSI.framerateأيضاً معدل إطارات مستشعر الكاميرا داخلياً لتوفير الطاقة وتحسين جودة الصورة عبر زيادة تعريض المستشعر. قد تتعارضCSI.framerateمعCSI.auto_exposureعلى بعض الكاميرات.
- window(roi: Tuple[int, int] | Tuple[int, int, int, int] | None = None) Tuple[int, int, int, int] | None¶
يضبط دقة الكاميرا على منطقة فرعية من الدقة الحالية.
roiهو صف(x, y, w, h). يمكنك أيضاً تمرير(w, h)وستُتمركز النافذة.يُرجع صف
(x, y, w, h)الحالي إذا استُدعي دون وسائط.
- gainceiling(gainceiling: int) bool¶
يضبط سقف كسب صورة الكاميرا على أحد القيم 2 أو 4 أو 8 أو 16 أو 32 أو 64 أو 128.
يُرجع
Trueعند النجاح وFalseعند الفشل.
- quality(quality: int) bool¶
يضبط جودة ضغط JPEG لصورة الكاميرا. من 0 إلى 100.
يُرجع
Trueعند النجاح وFalseعند الفشل.ملاحظة
للكاميرات OV2640/OV5640 فقط.
- colorbar(enable: bool) bool¶
يفعّل وضع شريط الألوان (
True) أو يعطّله (False). الوضع الافتراضي هو الإيقاف.يُرجع
Trueعند النجاح وFalseعند الفشل.
- auto_gain(enable: bool, gain_db: float | None = None, gain_db_ceiling: float | None = None) None¶
تفعّل قيمة
enableالتحكم التلقائي في الكسب (True) أو تعطّله (False). تبدأ الكاميرا بتشغيل التحكم التلقائي في الكسب.إذا كانت قيمة
enableهيFalseفيمكنك ضبط كسب ثابت بالديسيبل عبرgain_db.إذا كانت قيمة
enableهيTrueفيمكنك ضبط أقصى سقف كسب بالديسيبل عبرgain_db_ceilingلخوارزمية التحكم التلقائي في الكسب.ملاحظة
تحتاج إلى إيقاف موازنة اللون الأبيض أيضاً إذا أردت تتبع الألوان.
- auto_exposure(enable: bool, exposure_us: int = -1) None¶
تفعّل قيمة
enableالتحكم التلقائي في التعريض (True) أو تعطّله (False). تبدأ الكاميرا بتشغيل التحكم التلقائي في التعريض.إذا كانت قيمة
enableهيFalseفيمكنك ضبط زمن تعريض ثابت بالميكروثانية عبرexposure_us.ملاحظة
تتسم خوارزميات التعريض التلقائي للكاميرا بالتحفظ في مقدار تعديلها لقيمة التعريض، وتتجنب عموماً تغيير قيمة التعريض كثيراً. بدلاً من ذلك، تغيّر قيمة الكسب كثيراً للتعامل مع تغير الإضاءة.
- auto_whitebal(enable: bool, rgb_gain_db: Tuple[float, float, float] | None = None) None¶
تفعّل قيمة
enableموازنة اللون الأبيض التلقائية (True) أو تعطّلها (False). تبدأ الكاميرا بتشغيل موازنة اللون الأبيض التلقائية.إذا كانت قيمة
enableهيFalseفيمكنك ضبط كسب ثابت بالديسيبل للقنوات الحمراء والخضراء والزرقاء على التوالي عبرrgb_gain_db.ملاحظة
تحتاج إلى إيقاف التحكم في الكسب أيضاً إذا أردت تتبع الألوان.
- rgb_gain_db() Tuple[float, float, float]¶
يُرجع صفاً
(r, g, b)لقيم كسب الكاميرا الحالية للأحمر والأخضر والأزرق بالديسيبل.
- auto_blc(enable: bool, regs: List[int] | None = None) None¶
يضبط معايرة مستوى السواد التلقائية (BLC) على الكاميرا.
تمرّر قيمة
enableإماTrueأوFalseلتشغيل BLC أو إيقافها. عادةً ما تريد دائماً إبقاء هذا قيد التشغيل.إذا كانت قيمة
regsمعطّلة فيمكنك ضبط قيم سجلات BLC يدوياً من استدعاء سابق لـCSI.blc_regs.
- blc_regs() List[int]¶
يُرجع سجلات BLC للمستشعر كقائمة من الأعداد الصحيحة. للاستخدام مع
CSI.auto_blc.
- hmirror(enable: bool | None = None) bool | None¶
يفعّل وضع الانعكاس الأفقي (
True) أو يعطّله (False). الوضع الافتراضي هو الإيقاف.يُرجع الإعداد الحالي إذا استُدعي دون وسائط.
- vflip(enable: bool | None = None) bool | None¶
يفعّل وضع القلب الرأسي (
True) أو يعطّله (False). الوضع الافتراضي هو الإيقاف.يُرجع الإعداد الحالي إذا استُدعي دون وسائط.
- transpose(enable: bool | None = None) bool | None¶
يفعّل وضع التبديل (التبديل بين المحاور) (
True) أو يعطّله (False). الوضع الافتراضي هو الإيقاف.vflip=False, hmirror=False, transpose=False -> دوران بمقدار 0 درجة
vflip=True, hmirror=False, transpose=True -> دوران بمقدار 90 درجة
vflip=True, hmirror=True, transpose=False -> دوران بمقدار 180 درجة
vflip=False, hmirror=True, transpose=True -> دوران بمقدار 270 درجة
يُرجع الإعداد الحالي إذا استُدعي دون وسائط.
- auto_rotation(enable: bool | None = None) bool | None¶
يفعّل وضع الدوران التلقائي (
True) أو يعطّله (False). الوضع الافتراضي هو الإيقاف.يُرجع الإعداد الحالي إذا استُدعي دون وسائط.
ملاحظة
تعمل هذه الطريقة فقط عندما يكون لدى OpenMV Cam وحدة
imuمُركَّبة، وتُفعَّل تلقائياً.
- framebuffers(count: int | None = None) int | None¶
يضبط عدد مخازن الإطارات المستخدمة لاستقبال بيانات الصورة. افتراضياً، ستحاول OpenMV Cam تخصيص أقصى عدد من مخازن الإطارات يمكنها. تحدث إعادة التخصيص كلما استُدعيت
CSI.pixformatأوCSI.framesizeأوCSI.window.تختار قيمة
countالتي تساوي 1 (مخزن مفرد) أو 2 (مخزن مزدوج) أو 3 (مخزن ثلاثي) وضع الالتقاط المقابل. مرّر 4 أو أكثر لوضع برنامج التشغيل في وضع طابور الفيديو حيث تُصفّcountمن المخازن --- وهو مفيد لتسجيل الفيديو على بطاقة SD. عند إسقاط إطار، تُمسح جميع مخازن الإطارات باستثناء المخزن النشط بحيث تُرجعCSI.snapshotدائماً إطاراً حديثاً.يُرجع العدد الحالي إذا استُدعي دون وسائط.
- special_effect(effect: int) bool¶
يضبط التأثير الرقمي الخاص (إما
csi.NORMALأوcsi.NEGATIVE).يُرجع
Trueعند النجاح وFalseعند الفشل.
- lens_correction(enable: bool, radi: int, coef: int) bool¶
enableالقيمةTrueللتفعيل وFalseللتعطيل.radiنصف القطر الصحيح للبكسلات المراد تصحيحها.coefقوة التصحيح.يُرجع
Trueعند النجاح وFalseعند الفشل.
- vsync_callback(cb: Callable[[int], None] | None = None) Callable[[int], None] | None¶
يسجّل دالة رد النداء
cbلتُنفَّذ (في سياق المقاطعة) كلما أنتجت وحدة الكاميرا إطاراً جديداً (لكن قبل استقبال الإطار).تأخذ
cbوسيطة واحدة، وتُمرَّر إليها الحالة الحالية لدبوس vsync بعد تغيّرها.يُرجع دالة رد النداء المسجّلة إذا استُدعي دون وسائط. مرّر أي قيمة غير قابلة للاستدعاء لمسح دالة رد النداء.
- frame_callback(cb: Callable[[], None] | None = None) Callable[[], None] | None¶
يسجّل دالة رد النداء
cbلتُنفَّذ (في سياق المقاطعة) كلما أنتجت وحدة الكاميرا إطاراً جديداً وأصبح الإطار جاهزاً للقراءة عبرCSI.snapshot.لا تأخذ
cbأي وسائط. استخدم هذا لجدولة قراءة إطار لاحقاً عبرmicropython.schedule().يُرجع دالة رد النداء المسجّلة إذا استُدعي دون وسائط. مرّر أي قيمة غير قابلة للاستدعاء لمسح دالة رد النداء.
- ioctl(request: int, *args) Any¶
ينفّذ طلباً خاصاً بالمستشعر.
requestهو أحد ثوابتIOCTL_*؛ تعتمد الوسائط الموضعية المتبقية والقيمة المُرجَعة على الطلب. الطلبات المدعومة مُجمَّعة حسب عائلة المستشعر أدناه.عام (أي مستشعر):
ioctl(IOCTL_SET_READOUT_WINDOW, (x, y, w, h))ioctl(IOCTL_SET_READOUT_WINDOW, (w, h))يضبط نافذة قراءة المستشعر. تزيد النافذة الأصغر من معدل الإطارات على حساب مجال الرؤية.
ioctl(IOCTL_GET_READOUT_WINDOW)يُرجع نافذة القراءة الحالية كصف
(x, y, w, h).ioctl(IOCTL_SET_TRIGGERED_MODE, enable)يفعّل (
True) أو يعطّل (False) الوضع المُشغَّل بالمقاطعة (triggered mode) على MT9V034.ioctl(IOCTL_GET_TRIGGERED_MODE)يُرجع حالة الوضع المُشغَّل بالمقاطعة الحالية كقيمة
bool.ioctl(IOCTL_SET_FOV_WIDE, enable)عندما تكون
True، يوجّهframesize()للتحسين لصالح مجال الرؤية بدلاً من معدل الإطارات.ioctl(IOCTL_GET_FOV_WIDE)يُرجع حالة التحسين لمجال الرؤية الحالية كقيمة
bool.ioctl(IOCTL_SET_NIGHT_MODE, enable)يفعّل (
True) أو يعطّل (False) "الوضع الليلي" للمستشعر للإضاءة المنخفضة. على OV7725 و OV5640 فقط.ioctl(IOCTL_GET_NIGHT_MODE)يُرجع حالة الوضع الليلي الحالية كقيمة
bool.ioctl(IOCTL_GET_RGB_STATS)يُرجع صفاً رباعياً من إحصائيات قنوات RGB الخام
(r, gb, gr, b)المقروءة من المستشعر (تُستخدم عادةً لضبط موازنة اللون الأبيض).
OV5640 FPC -- التركيز التلقائي:
ioctl(IOCTL_TRIGGER_AUTO_FOCUS)يبدأ مسحاً للتركيز التلقائي على وحدة OV5640 FPC.
ioctl(IOCTL_PAUSE_AUTO_FOCUS)يوقف مؤقتاً مسح تركيز تلقائي قيد التقدم.
ioctl(IOCTL_RESET_AUTO_FOCUS)يعيد تعيين موضع التركيز التلقائي إلى الافتراضي.
ioctl(IOCTL_WAIT_ON_AUTO_FOCUS)ioctl(IOCTL_WAIT_ON_AUTO_FOCUS, timeout_ms)يحجب حتى ينتهي مسح التركيز التلقائي الحالي. القيمة الافتراضية لـ
timeout_msهي 5000 إذا حُذفت.
FLIR Lepton:
ioctl(IOCTL_LEPTON_GET_WIDTH)يُرجع عرض صورة Lepton بالبكسل.
ioctl(IOCTL_LEPTON_GET_HEIGHT)يُرجع ارتفاع صورة Lepton بالبكسل.
ioctl(IOCTL_LEPTON_GET_RADIOMETRY)يُرجع نوع Lepton (إشعاعي القياس أو لا) كعدد صحيح.
ioctl(IOCTL_LEPTON_GET_REFRESH)يُرجع معدل تحديث Lepton بالهرتز.
ioctl(IOCTL_LEPTON_GET_RESOLUTION)يُرجع دقة محول ADC في Lepton بالبتات.
ioctl(IOCTL_LEPTON_RUN_COMMAND, cmd)ينفّذ أمراً من FLIR Lepton SDK.
cmdهو معرّف الأمر ذو 16 بت المُعرَّف بواسطة SDK.ioctl(IOCTL_LEPTON_SET_ATTRIBUTE, attr_id, payload)يكتب سمة من Lepton SDK.
attr_idهو معرّف السمة ذو 16 بت؛ وpayloadهوbytes/bytearrayيجب أن يكون طوله من مضاعفات 16 بت.ioctl(IOCTL_LEPTON_GET_ATTRIBUTE, attr_id, words)يقرأ سمة من Lepton SDK.
attr_idهو معرّف السمة ذو 16 بت؛ وwordsهو عدد الكلمات ذات 16 بت المراد قراءتها. يُرجعbytearray.ioctl(IOCTL_LEPTON_GET_FPA_TEMP)يُرجع درجة حرارة مصفوفة المستوى البؤري في Lepton بالدرجات المئوية.
ioctl(IOCTL_LEPTON_GET_AUX_TEMP)يُرجع درجة الحرارة المساعدة في Lepton بالدرجات المئوية.
ioctl(IOCTL_LEPTON_SET_MODE, measurement_enabled)ioctl(IOCTL_LEPTON_SET_MODE, measurement_enabled, high_temp_enabled)يبدّل Lepton بين خرج AGC وخرج درجة الحرارة المباشر. تُفعّل
measurement_enabled=Trueخرج درجة الحرارة المباشر. تختار رايةhigh_temp_enabledالاختيارية نطاق درجة الحرارة المرتفعة.ioctl(IOCTL_LEPTON_GET_MODE)يُرجع صفاً ثنائياً
(measurement_enabled, high_temp_enabled).ioctl(IOCTL_LEPTON_SET_RANGE, (min_celsius, max_celsius))يضبط نطاق درجة الحرارة المُسقَط على
0..255عند تفعيل وضع القياس.ioctl(IOCTL_LEPTON_GET_RANGE)يُرجع نطاق
(min_celsius, max_celsius)الحالي.
Himax HM01B0 -- كشف الحركة:
ioctl(IOCTL_HIMAX_MD_ENABLE, enable)يفعّل (
True) أو يعطّل (False) كتلة كشف الحركة على المستشعر في HM01B0.ioctl(IOCTL_HIMAX_MD_WINDOW, (x, y, w, h))ioctl(IOCTL_HIMAX_MD_WINDOW, (w, h))يضبط نافذة كشف الحركة على HM01B0.
ioctl(IOCTL_HIMAX_MD_THRESHOLD, threshold)يضبط عتبة كشف الحركة (
0--255).ioctl(IOCTL_HIMAX_MD_CLEAR)يمسح مزلاج مقاطعة كشف الحركة.
ioctl(IOCTL_HIMAX_OSC_ENABLE, enable)يفعّل (
True) أو يعطّل (False) المذبذب الداخلي في HM01B0.
Prophesee GENX320 -- مستشعر الأحداث:
ioctl(IOCTL_GENX320_SET_BIASES, preset)يطبّق إعداداً مسبقاً للانحياز.
presetهو أحد ثوابتGENX320_BIASES_*.ioctl(IOCTL_GENX320_SET_BIAS, bias, value)يضبط انحيازاً واحداً.
biasهو أحد ثوابتGENX320_BIAS_*؛ وvalueهو الإعداد الصحيح.ioctl(IOCTL_GENX320_SET_AFK, enable)ioctl(IOCTL_GENX320_SET_AFK, enable, freq_low_hz, freq_high_hz)يضبط مرشح مكافحة الوميض.
enableهي قيمة منطقية؛ وتضبط وسيطات التردد الاختيارية نطاق تمرير المرشح.ioctl(IOCTL_GENX320_SET_STC, mode)ioctl(IOCTL_GENX320_SET_STC, mode, arg1[, arg2])يضبط مرشح التباين المكاني-الزماني.
modeهو أحد ثوابتGENX320_STC_*؛ وما يصل إلى وسيطتين إضافيتين تعتمدان على الوضع.ioctl(IOCTL_GENX320_SET_MODE, mode)ioctl(IOCTL_GENX320_SET_MODE, mode, evt_res)يبدّل المستشعر بين وضعي الإطار والأحداث.
modeهو أحد ثوابتGENX320_MODE_*. لوضع الأحداث،evt_resهو طول محور الصف لمخزن الأحداث المُمرَّر إلىIOCTL_GENX320_READ_EVENTS.ioctl(IOCTL_GENX320_READ_EVENTS, buf)يقرأ الأحداث إلى
buf، وهوndarrayمن نوعuint16بالشكل(EVT_res, 6)حيثEVT_resهو قوة للعدد اثنين بين 1024 و 65536. الأعمدة هي:[0]-- نوع الحدث (PIX_OFF_EVENT/PIX_ON_EVENT/ مُشغِّل).[1]-- ثوانٍ.[2]-- مللي ثانية.[3]-- ميكروثانية.[4]-- إحداثيx.[5]-- إحداثيy.
يُرجع عدد الأحداث المكتوبة.
ioctl(IOCTL_GENX320_READ_EVENTS_RAW)يُرجع كائن
image.Imageيحتوي على إطار الأحداث الخام من GENX320.ioctl(IOCTL_GENX320_CALIBRATE, iterations, sigma)يوقف البكسلات التي يزيد ضجيجها عن
sigmaمن الانحرافات المعيارية عن التوزيع الطبيعي.iterationsهو العدد الصحيح لتمريرات المعايرة. يُرجع عدد البكسلات المعطّلة.
- color_palette(palette: int | None = None) int | None¶
يضبط لوحة الألوان المستخدمة لأشياء مثل تحويل FLIR Lepton من تدرج الرمادي إلى RGB565 أو تصوّر أحداث GENX320. أحد القيم
image.PALETTE_RAINBOWوimage.PALETTE_IRONBOW، و(عند الدعم)image.PALETTE_DEPTHأوimage.PALETTE_EVT_DARKأوimage.PALETTE_EVT_LIGHT.يُرجع الإعداد الحالي إذا استُدعي دون وسائط.
الدوال¶
الثوابت¶
- csi.BINARY: int¶
تنسيق بكسل BINARY (خريطة بت). كل بكسل بحجم 1 بت. مفيد لتخزين الأقنعة؛ ويمكن استخدامه مع
image.Image().
- csi.YUV422: int¶
تنسيق بكسل YUV422. يُخزَّن كل بكسل كقيمة Y بتدرج رمادي بحجم 8 بت متبوعة بقيم لون U/V متناوبة بحجم 8 بت مشتركة بين قيمتي Y (Y1, U, Y2, V, ...). تعمل بعض طرق معالجة الصور فقط مع YUV422.
- csi.JPEG: int¶
وضع JPEG. تُخرج وحدة الكاميرا صور JPEG مضغوطة. استخدم
CSI.qualityللتحكم في جودة JPEG. يعمل فقط للكاميرات OV2640/OV5640.
- csi.NORMAL: int¶
الوضع العادي لـ
CSI.special_effect.
- csi.NEGATIVE: int¶
الوضع السالب لـ
CSI.special_effect.
- csi.IOCTL_SET_FOV_WIDE: int¶
يفعّل
CSI.framesizeللتحسين لصالح مجال الرؤية بدلاً من معدل الإطارات. راجعCSI.ioctl.
- csi.IOCTL_GET_FOV_WIDE: int¶
يُرجع ما إذا كانت
CSI.framesizeتُحسّن لصالح مجال الرؤية بدلاً من معدل الإطارات. راجعCSI.ioctl.
- csi.IOCTL_TRIGGER_AUTO_FOCUS: int¶
يشغّل التركيز التلقائي على وحدة الكاميرا OV5640 FPC. راجع
CSI.ioctl.
- csi.IOCTL_PAUSE_AUTO_FOCUS: int¶
يوقف مؤقتاً التركيز التلقائي (أثناء تشغيله) لوحدة الكاميرا OV5640 FPC. راجع
CSI.ioctl.
- csi.IOCTL_RESET_AUTO_FOCUS: int¶
يعيد تعيين التركيز التلقائي إلى الافتراضي لوحدة الكاميرا OV5640 FPC. راجع
CSI.ioctl.
- csi.IOCTL_WAIT_ON_AUTO_FOCUS: int¶
ينتظر انتهاء التركيز التلقائي على وحدة الكاميرا OV5640 FPC. راجع
CSI.ioctl.
- csi.IOCTL_SET_NIGHT_MODE: int¶
يشغّل الوضع الليلي أو يوقفه. يقلل معدل الإطارات لزيادة التعريض ديناميكياً. راجع
CSI.ioctl.
- csi.IOCTL_LEPTON_GET_FPA_TEMP: int¶
يجلب درجة حرارة مصفوفة المستوى البؤري (FPA) في FLIR Lepton بالمئوية. راجع
CSI.ioctl.
- csi.IOCTL_LEPTON_GET_AUX_TEMP: int¶
يجلب درجة الحرارة المساعدة (AUX) في FLIR Lepton بالمئوية. راجع
CSI.ioctl.
- csi.IOCTL_LEPTON_SET_MODE: int¶
يضبط برنامج تشغيل FLIR Lepton على وضع تكون فيه كل بكسل قيمة درجة حرارة. راجع
CSI.ioctl.
- csi.IOCTL_LEPTON_GET_MODE: int¶
يُرجع ما إذا كان وضع القياس مُفعَّلاً لمستشعر FLIR Lepton. راجع
CSI.ioctl.
- csi.IOCTL_LEPTON_SET_RANGE: int¶
يضبط نطاق درجة الحرارة المُسقَط على قيم البكسل في وضع القياس. راجع
CSI.ioctl.
- csi.IOCTL_GENX320_SET_BIASES: int¶
يضبط انحيازات مستشعر GENX320 على أحد إعدادات
GENX320_BIASES_*المسبقة. راجعCSI.ioctl. بعدCSI.resetيطبّق برنامج التشغيلcsi.GENX320_BIASES_LOW_NOISE، وليسcsi.GENX320_BIASES_DEFAULT--- استخدم هذا الأمر ioctl للتبديل إلى إعداد مسبق مختلف عندما يتطلب التطبيق حساسية أو عرض نطاق أكبر.
- csi.GENX320_BIASES_DEFAULT: int¶
إعدادات ورقة بيانات GenX320 الافتراضية --- حساسية وضجيج وعرض نطاق متوازن للمشاهد العامة.
- csi.GENX320_BIASES_LOW_LIGHT: int¶
مُضبَط لظروف الإضاءة المنخفضة --- خُفِّفت كلتا عتبتي التباين لحساسية أعلى، وخُفِّض FO، وعُطِّل HPF بحيث لا تزال تغيّرات السطوع البطيئة تُسجَّل.
- csi.GENX320_BIASES_ACTIVE_MARKER: int¶
مُضبَط لتتبع مصابيح LED الوامضة عالية التباين (علامات نشطة) --- رُفِعت عتبات التباين بحيث تشغّل الانتقالات الحادة فقط، ورُفِع FO و HPF عالياً لتعظيم عرض النطاق ورفض الانجراف المحيطي البطيء، و REFR=0 بحيث تُلتقط كل حافة وميض.
- csi.GENX320_BIASES_LOW_NOISE: int¶
الإعداد الافتراضي لبرنامج التشغيل --- حساسية أقل من
DEFAULT(عتبات تباين مرتفعة) و FO أقل لنشاط أقل في ضجيج الخلفية. الأفضل للمشاهد الثابتة أو البطيئة حيث تطغى الأحداث الزائفة.
- csi.GENX320_BIASES_HIGH_SPEED: int¶
مُضبَط لمشاهد الحركة السريعة --- FO أعلى لعرض نطاق أوسع للبكسل، و HPF أعلى لرفض التغيّرات البطيئة، و REFR أعلى لزمن خمول أطول بعد كل حدث بحيث لا تتشبع القراءة.
- csi.IOCTL_GENX320_SET_BIAS: int¶
يضبط انحياز مستشعر GENX320 واحداً على قيمة DAC. مرّر ثابت
GENX320_BIAS_*(csi.GENX320_BIAS_DIFF_OFFأوcsi.GENX320_BIAS_DIFF_ONأوcsi.GENX320_BIAS_FOأوcsi.GENX320_BIAS_HPFأوcsi.GENX320_BIAS_REFR) وقيمة DAC صحيحة. كل انحياز مستقل --- استدعِ هذا الأمر ioctl مراراً لتعديل الانحيازات التي تحتاجها فقط بعد تطبيق إعداد مسبق. راجعCSI.ioctl.
- csi.GENX320_BIAS_DIFF_OFF: int¶
عتبة تباين المقارن السالبة --- تتحكم في مقدار ما يجب أن يعتم به البكسل قبل إطلاق
csi.PIX_OFF_EVENT. القيمة الأقل = حساسية أكبر (أحداث أكثر).
- csi.GENX320_BIAS_DIFF_ON: int¶
عتبة تباين المقارن الموجبة --- تتحكم في مقدار ما يجب أن يسطع به البكسل قبل إطلاق
csi.PIX_ON_EVENT. القيمة الأقل = حساسية أكبر (أحداث أكثر).
- csi.GENX320_BIAS_FO: int¶
تردد القطع منخفض التمرير للبكسل --- يوازن بين عرض نطاق البكسل (السرعة/زمن الاستجابة) ونشاط ضجيج الخلفية. القيمة الأعلى = استجابة بكسل أسرع، وضجيج أكثر.
- csi.GENX320_BIAS_HPF: int¶
تردد القطع عالي التمرير للبكسل --- يرفض تغيّرات السطوع البطيئة. القيمة الأعلى = تصفية تغيّرات أبطأ (تُسجَّل الانتقالات السريعة فقط).
- csi.GENX320_BIAS_REFR: int¶
فترة الخمول للبكسل --- زمن الخمول بعد أن يصدر البكسل حدثاً والذي لا يمكنه خلاله الإطلاق مجدداً. القيمة الأعلى = زمن خمول أطول، وأحداث أقل من بكسل مزدحم.
- csi.IOCTL_GENX320_SET_AFK: int¶
يضبط مرشح مكافحة الوميض (AFK) في GENX320، الذي يرفض الأحداث من البكسلات التي تتبدّل عند نطاق تردد دوري (الإضاءة الفلورية، الشاشات المُشغَّلة بمصابيح LED، إلخ). مرّر
enable(1 للتفعيل، 0 للتعطيل)، وعند التفعيل، حواف النطاق بالهرتز:(enable, freq_low_hz, freq_high_hz). راجعCSI.ioctl.
- csi.IOCTL_GENX320_SET_STC: int¶
يضبط وضع مرشح التباين المكاني-الزماني (STC) في GENX320. مرّر ثابت
GENX320_STC_*(csi.GENX320_STC_DISABLEأوcsi.GENX320_STC_ONLYأوcsi.GENX320_STC_TRAIL_ONLYأوcsi.GENX320_STC_TRAIL) متبوعاً بالعتبة (العتبات) التي يتطلبها الوضع (بالمللي ثانية). راجعCSI.ioctl.
- csi.GENX320_STC_ONLY: int¶
يُبقي الحدث الثاني من سلسلة؛ ويُسقط الحدث الأول وأي أحداث لاحقة. يأخذ معاملاً واحداً،
stc_thresholdبالمللي ثانية --- تُعتبر الأحداث الواقعة ضمن تلك النافذة من حدث سابق على البكسل نفسه جزءاً من السلسلة نفسها.
- csi.GENX320_STC_TRAIL_ONLY: int¶
يُبقي الحدث الأول من سلسلة؛ ويُسقط الأحداث اللاحقة على البكسل نفسه حتى ينقضي
trail_threshold. يأخذ معاملاً واحداً،trail_thresholdبالمللي ثانية.
- csi.GENX320_STC_TRAIL: int¶
يُبقي الحدث الأول من سلسلة إضافة إلى الحواف اللاحقة --- يجمع بين
csi.GENX320_STC_ONLYوcsi.GENX320_STC_TRAIL_ONLY. يأخذ معاملين،stc_thresholdوtrail_threshold(كلاهما بالمللي ثانية)؛ يتطلب المستشعر بقاء الاثنين ضمن نسبة 13:1 تقريباً.
- csi.IOCTL_GENX320_SET_MODE: int¶
يضبط وضع تشغيل GENX320. مرّر
csi.GENX320_MODE_HISTOللمدرج التكراري للأحداث على الشريحة (تتصرف الكاميرا ككاميرا تدرج رمادي عادية عند معدل الإطارات المُكوَّن) أوcsi.GENX320_MODE_EVENTمتبوعاً بطول محور الصف لـndarrayالأحداث (قوة للعدد اثنين بين 1024 و 65536) لتدفق الأحداث الخام. راجعCSI.ioctl.
- csi.GENX320_MODE_HISTO: int¶
وضع المدرج التكراري --- تُجمَّع الأحداث على الشريحة في صناديق لكل بكسل ويُبلَّغ عنها كإطار تدرج رمادي بحجم 320x320 عند المعدل المُكوَّن (~20-350 إطاراً في الثانية). تبدو الكاميرا ككاميرا عادية، لذا تعمل جميع روتينات معالجة الصور القياسية مباشرة.
- csi.GENX320_MODE_EVENT: int¶
وضع الأحداث --- يتجاوز المدرج التكراري على الشريحة ويبث الأحداث الخام إلى
ndarrayمن numpy مع طوابع زمنية بالميكروثانية، للتطبيقات التي تحتاج إلى التفاصيل الزمنية الكاملة بدلاً من إطار مُصنَّف مسبقاً.
- csi.IOCTL_GENX320_READ_EVENTS: int¶
يقرأ الأحداث الخام إلى
ndarrayمن نوع uint16 بالشكل(EVT_res, 6)(مع مطابقةEVT_resلحجم المخزن المُمرَّر إلىcsi.IOCTL_GENX320_SET_MODE). الأعمدة هي[0]نوع الحدث (csi.PIX_OFF_EVENTوcsi.PIX_ON_EVENTوcsi.EXT_TRIGGER_RISING/FALLINGوcsi.RST_TRIGGER_RISING/FALLING)، و[1]الطابع الزمني بالثواني، و[2]المللي ثانية، و[3]الميكروثانية، و[4]إحداثي X (0-319)، و[5]إحداثي Y (0-319). يُرجع عدد الأحداث المكتوبة في المخزن، تاركاً الصفوف الأقدم خارج ذلك العدد دون تغيير. راجعCSI.ioctl.
- csi.IOCTL_GENX320_CALIBRATE: int¶
يعطّل تلقائياً البكسلات الساخنة --- البكسلات التي تطلق بشكل زائف حتى في مشهد ثابت. يبني برنامج التشغيل عدّ ضربات لكل بكسل بحجم 320x320، ويحسب المتوسط والانحراف المعياري، ويعطّل أي بكسل يتجاوز عدّه
mean + sigma * stddev. مرّر ميزانية عدّ أحداث (الأحداث المراد إحصاؤها قبل حساب الإحصائيات --- الأعلى = تقدير أكثر موثوقية، وأبطأ؛ ~10000 افتراضي جيد) وقيمة sigma من النوع العائم (الأقل = أكثر عدوانية، ~0.5 افتراضي). يُرجع عدد البكسلات المعطّلة. وجّه الكاميرا أولاً إلى مشهد ثابت بحيث لا تُحسب الأحداث المدفوعة بالحركة ضد بكسلات هي في الواقع سليمة. راجعCSI.ioctl.
- csi.IOCTL_GENX320_READ_EVENTS_RAW: int¶
يُرجع كائن
image.Imageلإطار أحداث خام من GENX320، مع بقاء الأحداث في الترميز المعبّأ الأصلي للشريحة --- وهو مفيد إذا أردت إعادة توجيه التدفق الخام إلى حاسوب لفك تشفيره دون اتصال بدلاً من معالجته على الكاميرا. راجعCSI.ioctl.
- csi.PIX_OFF_EVENT: int¶
نوع حدث GENX320 (العمود
[0]) --- كشف بكسل انخفاضاً في السطوع (عُبِرَت عتبة التباين السالبة). يحمل العمودان[4]/[5]إحداثيي X/Y للبكسل.
- csi.PIX_ON_EVENT: int¶
نوع حدث GENX320 (العمود
[0]) --- كشف بكسل زيادة في السطوع (عُبِرَت عتبة التباين الموجبة). يحمل العمودان[4]/[5]إحداثيي X/Y للبكسل.
- csi.RST_TRIGGER_RISING: int¶
نوع حدث GENX320 (العمود
[0]) --- مُشغِّل إعادة تعيين البكسل، الحافة الصاعدة. لا يُستخدم X/Y. لا يُولِّده البرنامج الثابت في الوقت الحالي.
- csi.RST_TRIGGER_FALLING: int¶
نوع حدث GENX320 (العمود
[0]) --- مُشغِّل إعادة تعيين البكسل، الحافة الهابطة. لا يُستخدم X/Y. لا يُولِّده البرنامج الثابت في الوقت الحالي.