v4.8.0¶
الإصدار v4.8.0 هو إصدار ميزات رئيسي. أبرز ما فيه: وحدة كاميرا csi جديدة كليًا قائمة على الفئات مع دعم الكاميرات المتعددة، ولوحة OpenMV N6 (STM32N6) المزودة بوحدة Neural-ART NPU، وخلفية استدلال NPU، ووضع أحداث RAW لكاميرا الأحداث GenX320، ووحدة crc جديدة، ومكتبة معالجة لاحقة للتعلم الآلي معاد تنظيمها، وMicroPython 1.26. كما يزيل بعض واجهات برمجة التطبيقات القديمة — وحدة buzzer والتحكم في FLIR Lepton في وحدة fir — لذا اقرأ التغييرات الجذرية أدناه.
أبرز النقاط¶
وحدة كاميرا
csiجديدة. واجهة برمجة تطبيقاتcsi.CSIقائمة على الفئات مع دعم عدة كاميرات في وقت واحد، قُدّمت إلى جانب وحدةsensorالقديمة.OpenMV N6. لوحة STM32N6 المزودة بوحدة Neural-ART NPU، والتخزين المؤقت الثلاثي، وSoft-CSI، ووحدة ToF.
استدلال NPU. خلفية ST Neural-ART (STAI) للاستدلال المعجّل بالعتاد للنماذج.
وضع أحداث GenX320. إخراج أحداث RAW بالإضافة إلى
draw_event_histogram()لعرض كاميرا الأحداث.معالجة لاحقة معاد تنظيمها للتعلم الآلي — حزم فرعية خاصة بالمورّدين (
ml.postprocessing.ultralytics،mediapipe،edgeimpulse،darknet) مع كاشفات BlazeFace / BlazePalm وكاشفات النقاط المميزة لليد والوجه الجديدة.وحدة
crcجديدة — CRC-16 / CRC-32 معجّلة بالعتاد.تحديث MicroPython إلى 1.26.0.
تغيير جذري: أُزيلت وحدة
buzzerوالتحكم في Lepton في وحدةfir(أصبح Lepton الآن كاميرا عادية). راجع تغيير fir/Lepton و إزالة buzzer.
ميزات جديدة¶
وحدة كاميرا
csiالجديدة — كائنcsi.CSIقائم على الفئات مع عدة كاميرات في وقت واحد (حتى ثلاث على N6)، ولقطة غير حاجبة، وأحجام إطارات(w, h)مخصصة، وprint()/ repr غني بالمعلومات. قُدّم إلى جانب وحدةsensorالقديمة (وليس بديلًا مباشرًا لها).crc—crc.crc16()وcrc.crc32()، معجّلتان بالعتاد مع بديل برمجي، على OpenMV N6 وAE3.اكتسبت
image.Image.draw_image()كلمة مفتاحيةtransform=(مصفوفةndarrayعشرية ثنائية الأبعاد للتحويلات التآلفية/المنظورية، معجّلة بوحدة معالجة الرسوميات على STM32 وAlif)؛ التحويل نفسه متاح في تحويل الصور.draw_event_histogram()— عرض مدرّجات كاميرا الأحداث التكرارية.وضع أحداث RAW لـ GenX320 —
csi.IOCTL_GENX320_SET_MODEمعcsi.GENX320_MODE_HISTO/csi.GENX320_MODE_EVENT، وcsi.IOCTL_GENX320_READ_EVENTS، وcsi.IOCTL_GENX320_CALIBRATE، وثوابت أنواع الأحداث، وبرامج نصية أمثلة جديدة.التعلم الآلي — خلفية استدلال ST Neural-ART (STAI) NPU؛ اكتسب
ml.Modelكلمة مفتاحيةpostprocess=(تعمل المعالجة اللاحقة الآن تلقائيًا داخلpredict()حتى بدون دالة رد نداء)؛ أُعيد تنظيمml.postprocessingفي حزم فرعية خاصة بالمورّدين —ml.postprocessing.ultralytics(YoloV5،YoloV8)، وml.postprocessing.darknet(YoloV2،YoloLC)، وml.postprocessing.edgeimpulse(Fomo)، وml.postprocessing.mediapipe(BlazeFace،BlazePalm،HandLandmarks،FaceLandmarks) — تبقى الأسماء القديمة بنمط snake_case كأسماء بديلة؛ أُضيفتml.utils.draw_keypoints()وml.utils.draw_skeleton()؛ ونمت نماذج ROMFS المضمّنة (BlazeFace، YOLO-LC، YOLOv8n، النقاط المميزة للكف/اليد/الوجه).audio— إدخال ميكروفون رقمي MDF على STM32N6.العرض — برنامج تشغيل SSD1351 OLED ومثال؛ يمكن لوحدات تحكم
SPIDisplayتجاوز أوامر التهيئة الخاصة بها؛ اكتسب مُنشئ شاشة SPI الكلمتين المفتاحيتينhmirror/vflip.محلّل أداء على الجهاز — عدّادات دورات/أحداث SysTick + Armv8.1-M PMU مع قياس على مستوى الدوال، يمكن قراءتها عبر رابط التصحيح (اكتسب
pyopenmvدعم التحليل ورموز ELF).دعم مستشعرات جديدة — PixArt PS5520؛ وFLIR BOSON على OpenMV H7 Plus؛ واكتشاف GenX320 التلقائي.
تغييرات وتحسينات أخرى¶
تحديث MicroPython إلى 1.26.0.
بدء تشغيل الكاميرا — فُصل ساعة المستشعر عن حالة CSI، وأصبح اكتشاف الكاميرا عند الإقلاع أسرع (تُجرّب أكثر الإعدادات شيوعًا أولًا)، وصُحّحت ساعة OV7725 الافتراضية في OpenMV 3.
جودة الصورة — تصحيح غاما لمعالج الإشارة الصوري البرمجي (Alif وSTM32) وتصحيح البكسلات المعيبة (STM32) مفعّلان افتراضيًا؛ واكتسب مستشعرا PAG7936 وPS5520 عناصر تحكم في موازنة البياض التلقائية.
الأداء — تُعجَّل
image.Image.to_ndarray()باستخدام Helium SIMD وتم تشعيع المعالج اللاحق FOMO باستخدام ulab.أُعيدت كتابة برنامج تشغيل FLIR Lepton لاستقبال الإطارات بشكل غير متزامن في الخلفية — أصبح الدوران/
transposeيعمل الآن، ويُجرى الرسم بترقية ثنائية الخطية، وأصبح إعادة الضبط أسرع.إنتاجية الالتقاط — يستخدم i.MX RT1062 CSI الآن إزاحة DMA كاملة، ولدى STM32 N6
draw_image()بوحدة معالجة رسوميات عتادية.
إصلاحات الأخطاء¶
الكاميرا والمستشعرات:
أُصلحت أوضاع RGB565 / GRAYSCALE / BAYER / YUV422 عبر مستشعرات STM32، وPAJ6100 على OpenMV H7 / H7 Plus، وOpenMV 2 QVGA RGB565، وإعداد N6 CSI أحادي اللون / RGB-YUV؛ تُعيد كاميرا الاختبار البرمجية الضبط الآن بشكل حتمي.
لم تعد موازنة البياض التلقائية تجعل الصورة خضراء عند معدلات الإطارات المنخفضة أو المتغيرة (يحل متوسط متحرك مدته 250 مللي ثانية محل العينة كل 100 إطار)، وأُصلح وميض الإضاءة في PS5520.
معالجة الصور:
أُصلح خلل في عرض رسم الخطوط؛ تقوم
image.Image.flush()الآن بتفريغ مخزن JPEG المؤقت للصورة التي استُدعيت عليها؛ تطبّقNormalizationالآن المتوسط/الانحراف المعياري على المدخلات العشرية؛ وأُصلح تخصيص الصورة من ملف.
التقاط الكاميرا:
أُصلح تلف الصورة الشديد في عمليات النقل غير المُرمّزة بـ JPEG (تُفعَّل مقاطعة الإطار الآن في وضع JPEG فقط)، ودعم وضع JPEG رقم 3، وتعليقات حجم سطر DMA والمخزن المؤقت الصغير على STM32؛ أصبحت مزامنة VOSPI / Lepton أكثر موثوقية، خاصة على N6.
متفرقات:
تُعيد
omv.board_id()المعرّف الفريد UID الصحيح على RT1060؛ ولم يعدYoloV2يتعطل عند إنشائه بدون نقاط ارتساء صريحة.
العتاد ودعم اللوحات¶
OpenMV N6 — STM32N6 مزود بوحدة Neural-ART NPU، والتخزين المؤقت الثلاثي، وإخراج SPI LCD/TV، وSoft-CSI، ووحدة
tof، ونماذج ROMFS مضمّنة.Arduino GIGA — إخراج شاشة MIPI DSI.
مستشعرات جديدة — PixArt PS5520؛ وFLIR BOSON على OpenMV H7 Plus؛ واكتشاف GenX320 التلقائي.
OpenMV Pure Thermal — أصبح FLIR Lepton الآن مستشعر كاميرا عاديًا (ثانويًا).
Alif AE3 — تصحيح غاما لمعالج الإشارة الصوري البرمجي، ووحدة
crc، وإصلاحات SPI.
تغييرات جذرية في واجهة برمجة التطبيقات¶
تغييرات واجهة برمجة التطبيقات المرئية للمستخدم بين v4.7.0 وv4.8.0. النطاق: وحدات Python C في modules/ ومكتبات Python في scripts/libraries/.
كل تغيير موسوم بتأثيره:
رئيسي — تحتاج معظم البرامج النصية التي استخدمته إلى تعديلات.
طفيف — واجهة برمجة تطبيقات ضيقة؛ يؤثر فقط على البرامج النصية التي استخدمتها.
سلوكي — نفس واجهة برمجة التطبيقات، نتائج مختلفة؛ أعد فحص البرامج النصية المضبوطة.
أدوات — يؤثر فقط على أدوات المضيف / البناء من المصدر.
تُجمّع التغييرات حسب التأثير بهذا الترتيب — رئيسي أولًا، ثم طفيف، وسلوكي، وأدوات. إذا كنت تريد فقط نقل شيفرتك، فانتقل إلى قائمة فحص الترحيل في النهاية للحصول على قائمة مهام مختصرة. يرتبط كل تجزئة التزام (commit hash) بفرقه على GitHub.
نُقل FLIR Lepton خارج وحدة fir (رئيسي)¶
يُشغَّل FLIR Lepton الآن ككاميرا عادية بدلًا من تشغيله عبر وحدة fir. أُزيل التحكم في Lepton من fir: لم يعد النوع FIR_LEPTON والدوال radiometric() وregister_vsync_cb() وregister_frame_cb() وget_frame_available() وtrigger_ffc() موجودة. التقط Lepton كأي كاميرا أخرى (يظهر كمستشعر ثانوي على OpenMV Pure Thermal)؛ أُعيدت كتابة مثال Pure Thermal لواجهة برمجة التطبيقات الجديدة. لم تتغير مستشعرات fir غير Lepton (Grid-EYE، MLX، AMG8833).
أُزيلت وحدة buzzer (طفيف)¶
أُزيلت وحدة buzzer من منافذ STM32 وi.MX RT. شغّل الجرس باستخدام machine.PWM بدلًا من ذلك؛ أُضيف مثال جرس Pure Thermal باستخدام PWM.
أُزيلت omv.disable_fb() (طفيف)¶
أُزيلت الدالة omv.disable_fb()؛ يُتحكَّم في بث مخزن الإطارات الآن عبر واجهة برمجة تطبيقات الكاميرا. كما أُزيلت برامج RPC المكتبية القديمة التي اعتمدت عليها.
csi جديدة — واجهة برمجة تطبيقاتها لم تُجمَّد بعد (طفيف)¶
قُدّمت وحدة csi في v4.8.0 وتطورت واجهة برمجة تطبيقاتها خلال الإصدار: أُزيلت csi.fb()، وتتطلب csi.CSI.snapshot() (image=...) الآن صورة قابلة للتعديل وترسم/تقيس الإطار الملتقط بداخلها بدلًا من إجراء نسخة عميقة خام. ينبغي للمتبنّين الأوائل للوحدة الجديدة إعادة الاختبار؛ لا تتأثر واجهة sensor القديمة.
وضع تدفق image.ImageIO وclose() (طفيف)¶
image.ImageIO — تقبل وسيطة mode الآن الأحرف الصغيرة 'r' / 'w' فقط (تُرفض الأحرف الكبيرة برسالة خطأ محدّثة)، ويؤدي الفتح بـ 'w' دائمًا إلى اقتطاع/إعادة إنشاء الملف بدلًا من الحفاظ على تدفق موجود. أصبحت ImageIO.close() الآن خاملة عند التكرار (لم يعد إغلاق تدفق مغلق بالفعل يثير خطأً) وتُرجع None بدلًا من كائن التدفق.
القيمة المُرجعة من BlazeFace / BlazePalm (طفيف)¶
يُرجع المعالجان اللاحقان BlazeFace و BlazePalm (الجديدان في هذا الإصدار) الآن قائمة مربعات إحاطة واحدة بدلًا من القائمة الكاملة لكل فئة — يفهرس المستدعون النتيجة مباشرةً بدلًا من [0].
الالتزام: 75e16b573
تستقبل دالة رد نداء المعالج اللاحق للتعلم الآلي موتّرات خام (سلوكي)¶
تستقبل دالة رد نداء المعالجة اللاحقة لـ predict() في ml.Model الآن مراجع موتّرات الإخراج الخام (المُكمَّمة) بدلًا من ndarrayات عشرية محوّلة مسبقًا — وهذا يتجنّب استنفاد الذاكرة على النماذج الكبيرة. إذا لم تُقدَّم دالة رد نداء، فلا تزال ndarray العشرية تُرجَع. يجب على دوال رد النداء المخصصة إلغاء تكميم الموتّرات بنفسها (تقوم المعالجات اللاحقة المدمجة بذلك بالفعل).
الالتزام: 84e6ee650
فُصلت ساعة الكاميرا عن حالة CSI (سلوكي)¶
أصبحت ساعة المستشعر الآن مستقلة عن حالة CSI. يُعيد set_clock / set_frequency تهيئة الساعة فقط عندما يختلف التردد المطلوب بأكثر من حد تسامح، ويأخذ get_clk_frequency قيمة منطقية لإرجاع التردد الدقيق (بدلًا من الاسمي). الساعة الافتراضية هي 24 MHz على OpenMV N6 وAE3، لذا لا حاجة إلى set_clock() صريح عند الإقلاع. ينبغي للبرامج النصية التي بدّلت الساعة لعمليات التقاط حساسة للتوقيت إعادة فحص افتراضاتها.
الالتزامات: 2040a0a00، 09c0052df، 66ade9aea، 7e0a251bc، e6f43f3ca
بروتوكول تصحيح USB وأهداف البرنامج الثابت (أدوات)¶
لا يؤثر أي من هذا على برامج MicroPython النصية. أُزيلت أوامر USBDBG المتقادمة (SCRIPT_SAVE، TEMPLATE_SAVE، DESCRIPTOR_SAVE، ATTR_READ، ATTR_WRITE، TX_INPUT، SET_TIME)، وتُفرَّغ الآن الأوامر غير المدعومة من واجهات IDE الأقدم بدلًا من تعطيل لوحات TinyUSB عند الاتصال؛ وأُزيل هدف البرنامج الثابت UVC القديم لـ STM32. ينبغي للأدوات المضيفة القديمة التحديث؛ راجع سجل مستودع البرنامج الثابت للتفاصيل.
قائمة فحص الترحيل¶
للنقل النظيف إلى v4.8.0، العمل المعتاد هو:
إذا استخدمت FLIR Lepton عبر
fir، فانتقل إلى التقاطه ككاميرا مستشعر (تغيير fir/Lepton).استبدل أي استخدام لـ
buzzerبـmachine.PWM(إزالة buzzer).أزل استدعاءات
omv.disable_fb()(إزالة omv.disable_fb()).بالنسبة إلى
image.ImageIO: استخدم الأحرف الصغيرة'r'/'w'وتوقّع أن يقتطع'w'(تغيير ImageIO).بالنسبة إلى دوال رد النداء المخصصة للمعالجة اللاحقة للتعلم الآلي: ألغِ تكميم مراجع الموتّرات الخام بنفسك، أو اعتمد على المسار العشري الافتراضي (تغيير دالة رد النداء).
أعد فحص أي برنامج نصي شغّل ساعة المستشعر لعمليات التقاط حساسة للتوقيت (تغيير الساعة).