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 القديمة (وليس بديلًا مباشرًا لها).

  • crccrc.crc16() و crc.crc32()، معجّلتان بالعتاد مع بديل برمجي، على OpenMV N6 وAE3.

  • اكتسبت image.Image.draw_image() كلمة مفتاحية transform= (مصفوفة ndarray عشرية ثنائية الأبعاد للتحويلات التآلفية/المنظورية، معجّلة بوحدة معالجة الرسوميات على STM32 وAlif)؛ التحويل نفسه متاح في تحويل الصور.

  • draw_event_histogram() — عرض مدرّجات كاميرا الأحداث التكرارية.

  • وضع أحداث RAW لـ GenX320csi.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).

الالتزامات: bacfb7aeb، 117710566، 592a22902، 1a614202e

أُزيلت وحدة buzzer (طفيف)

أُزيلت وحدة buzzer من منافذ STM32 وi.MX RT. شغّل الجرس باستخدام machine.PWM بدلًا من ذلك؛ أُضيف مثال جرس Pure Thermal باستخدام PWM.

الالتزامات: ccb947924، 444120f2d

أُزيلت omv.disable_fb() (طفيف)

أُزيلت الدالة omv.disable_fb()؛ يُتحكَّم في بث مخزن الإطارات الآن عبر واجهة برمجة تطبيقات الكاميرا. كما أُزيلت برامج RPC المكتبية القديمة التي اعتمدت عليها.

الالتزامات: 84c3db58a، 6fe99051c

csi جديدة — واجهة برمجة تطبيقاتها لم تُجمَّد بعد (طفيف)

قُدّمت وحدة csi في v4.8.0 وتطورت واجهة برمجة تطبيقاتها خلال الإصدار: أُزيلت csi.fb()، وتتطلب csi.CSI.snapshot() (image=...) الآن صورة قابلة للتعديل وترسم/تقيس الإطار الملتقط بداخلها بدلًا من إجراء نسخة عميقة خام. ينبغي للمتبنّين الأوائل للوحدة الجديدة إعادة الاختبار؛ لا تتأثر واجهة sensor القديمة.

الالتزامات: 0bc0385eb، 8cd7a309f

وضع تدفق image.ImageIO وclose() (طفيف)

image.ImageIO — تقبل وسيطة mode الآن الأحرف الصغيرة 'r' / 'w' فقط (تُرفض الأحرف الكبيرة برسالة خطأ محدّثة)، ويؤدي الفتح بـ 'w' دائمًا إلى اقتطاع/إعادة إنشاء الملف بدلًا من الحفاظ على تدفق موجود. أصبحت ImageIO.close() الآن خاملة عند التكرار (لم يعد إغلاق تدفق مغلق بالفعل يثير خطأً) وتُرجع None بدلًا من كائن التدفق.

الالتزامات: 715c4cbba، 21ceec422

القيمة المُرجعة من 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. ينبغي للأدوات المضيفة القديمة التحديث؛ راجع سجل مستودع البرنامج الثابت للتفاصيل.

الالتزامات: 90bd11e93، 657c9a632، 35182f035

قائمة فحص الترحيل

للنقل النظيف إلى v4.8.0، العمل المعتاد هو:

  1. إذا استخدمت FLIR Lepton عبر fir، فانتقل إلى التقاطه ككاميرا مستشعر (تغيير fir/Lepton).

  2. استبدل أي استخدام لـ buzzer بـ machine.PWM (إزالة buzzer).

  3. أزل استدعاءات omv.disable_fb() (إزالة omv.disable_fb()).

  4. بالنسبة إلى image.ImageIO: استخدم الأحرف الصغيرة 'r'/'w' وتوقّع أن يقتطع 'w' (تغيير ImageIO).

  5. بالنسبة إلى دوال رد النداء المخصصة للمعالجة اللاحقة للتعلم الآلي: ألغِ تكميم مراجع الموتّرات الخام بنفسك، أو اعتمد على المسار العشري الافتراضي (تغيير دالة رد النداء).

  6. أعد فحص أي برنامج نصي شغّل ساعة المستشعر لعمليات التقاط حساسة للتوقيت (تغيير الساعة).