v4.7.0¶
الإصدار v4.7.0 هو إصدار رئيسي يضيف ميزات جديدة. أبرز ما فيه: لوحة OpenMV AE3 الجديدة (Alif Ensemble، Cortex-M55 + Ethos-U55 NPU) مع نموذج برمجة ثنائي النواة openamp، ونظام ملفات ROMFS (/rom) للقراءة فقط يحتوي على نماذج وتعاقبات (cascades) مرفقة، ودعم مستشعر زمن-الرحلة VL53L8CX بدقة 8x8، ومعالِجات لاحقة جديدة YOLOv8 / YOLO-LC، وMicroPython 1.25. كما يغيّر هذا الإصدار طريقة تحميل النماذج المدمجة وتعاقبات Haar، لذا اقرأ التغييرات الجذرية أدناه.
أبرز النقاط¶
لوحة OpenMV AE3 — لوحة Alif Ensemble (Cortex-M55 + Ethos-U55 NPU) مع منفذ كامل ومحمّل إقلاع وROMFS.
وحدة
openampثنائية النواة — أَزِح العمل إلى نواة Alif الثانية عبر RPMsg (مزخرف@async_remoteوEndpoint/EndpointIO).ROMFS — نظام ملفات
/romللقراءة فقط يحتوي على نماذج TFLite مدمجة وتعاقبات Haar، إضافة إلى أداة بناء جديدة على المضيفtools/mkromfs.py.VL53L8CX دعم مستشعر زمن-الرحلة متعدد المناطق بدقة 8x8.
معالِجات ML لاحقة جديدة —
yolo_v8_postprocessوyolo_lc_postprocess.تحديث MicroPython إلى 1.25.0.
تغيير جذري: تُحمَّل الآن النماذج المدمجة وتعاقبات Haar من
/romحسب المسار (راجع تغيير ml.Model وتغيير تعاقب Haar).
ميزات جديدة¶
OpenMV AE3 — لوحة Alif Ensemble جديدة (نواة تطبيقات Cortex-M55 + Ethos-U55 NPU)، مع منفذ ومحمّل إقلاع وتكوين لوحة وLED RGB ودعم ROMFS.
openamp— وحدة جديدة لنموذج RPC ثنائي النواة في Alif (Open-AMP / RPMsg):EndpointوEndpointIOوnew_service_callbackومزخرف@async_remoteلإزاحة الدوال المُسلسَلة إلى النواة الثانية. تُشحن نواتا HE/HP مع مشغّل مهام_boot.pyافتراضي قائم على asyncio.audio— يضيف منفذ Alif وحدة الصوت (ميكروفون PDM) مع واجهة بث قائمة على دالة رد النداء (audio.init(channels=, frequency=, gain_db=, buffers=, samples=, overflow=, highpass=)) على AE3.ROMFS — نظام ملفات
/romللقراءة فقط مع أصول مدمجة (نماذج TFLite وتعاقبات Haar، ...) مُحزَّمة لكل لوحة، وأداة مضيف جديدةtools/mkromfs.py(tflite وtflite+vela وتعاقب Haar ونص وثنائي)، ومساعدscripts/libraries/romfs.pyيكشف عنls_romfs().المعالجة اللاحقة لـ ML — صنفان جديدان
yolo_v8_postprocess(YOLOv8) وyolo_lc_postprocess(نسخة tiny-YOLOv2 خفيفة الوزن بمراسٍ (anchors) افتراضية مُحسَّنة للأنظمة المدمجة)، يأخذ كل منهماthresholdوnms_thresholdوnms_sigma.مكافحة الوميض في GenX320 — ioctl جديد
IOCTL_GENX320_SET_AFKلتمكين وتكوين مرشّح مكافحة الوميض في مستشعر الأحداث (الحد الأدنى/الأقصى لتردد الوميض بالهرتز)، مع مثالgenx320_grayscale_set_afk.py.VL53L8CX — دعم مستشعر زمن-الرحلة متعدد المناطق بدقة 8x8 من خلال وحدة
tof(يُكتشف تلقائيًا، 8x8 عند 15 هرتز).
تغييرات وتحسينات أخرى¶
تحديث MicroPython إلى 1.25.0 (منفذا STM32 وi.MX RT)، مع إضافة منفذ Alif من المصدر الأصلي وإسقاط مشغّلات BT-HCI القديمة من منفذي STM32 / i.MX RT.
GenX320 — تعاقب ISSD جديد يضاعف ساعة البكسل الداخلية (24 → 48 ميجاهرتز) لمعدلات إطارات أعلى.
STM32N6 / ST Edge AI — أساسات لنشر نماذج Neural-ART على STM32N6 (أدوات ST Edge AI ودعم ROMFS).
PAG7936 — يُضبط الآن معدل بت CSI PHY، مما يحسّن تشغيل هذا المستشعر.
إصلاحات الأخطاء¶
الكاميرا والمستشعرات:
إصلاح وحدة القياس بالقصور الذاتي (IMU) عبر I2C — اللوحات التي توصل وحدة LSM6DSx IMU على I2C تُهيَّأ وتقرأ الآن بشكل صحيح (كان مسار I2C يستخدم سابقًا مسار قراءة معطوبًا وثوابت خاطئة).
تهيئة FLIR Boson تعيد المحاولة الآن حتى 10 مرات للمستشعرات الأقدم (< IDD 4.x) التي تستغرق نحو 10 ثوانٍ للإقلاع، وتُستعاد إعدادات المصنع الافتراضية عند إعادة التعيين لكي لا تتمكن الإعدادات المُحمَّلة خارجيًا من تعطيل مخرجات الفيديو.
إصلاح كتابة
psee_ehc_activate_overrideفي GenX320 لزمن تراكم خاطئ (صفري).على لوحات STM32 التي لا تحتوي على عتاد FastMode+، أصبح طلب وضع I2C السريع الآن محميًا بشكل صحيح بدلًا من تكوين الناقل بشكل خاطئ بصمت.
تعلّم الآلة:
إصلاح تجميع مربعات الإحاطة ومعالجة
np.nonzeroفي معالِجات YOLOv2 / YOLOv5 اللاحقة، مما يحسّن موثوقية الكشف.
دعم العتاد واللوحات¶
OpenMV AE3 — لوحة Alif Ensemble جديدة (Cortex-M55 + Ethos-U55 NPU).
VL53L8CX — مستشعر زمن-الرحلة متعدد المناطق بدقة 8x8؛ جرى تبديل مستشعر ToF في AE3 من VL53L5CX إلى VL53L8CX.
STM32N6 — أساسات نشر نماذج ST Edge AI (Neural-ART).
تغييرات جذرية في واجهة البرمجة¶
تغييرات جذرية ظاهرة للمستخدم في واجهة البرمجة بين v4.6.20 وv4.7.0. النطاق: وحدات Python بلغة C في modules/ ومكتبات Python في scripts/libraries/.
كل تغيير موسوم بمدى تأثيره:
رئيسي — معظم البرامج النصية التي استخدمته تحتاج إلى تعديلات.
طفيف — واجهة برمجة ضيقة؛ يؤثر فقط على البرامج النصية التي استخدمته.
سلوكي — نفس الواجهة، نتائج مختلفة؛ أعد التحقق من البرامج النصية المضبوطة.
التغييرات مجمّعة حسب التأثير بهذا الترتيب. إذا كنت تريد فقط نقل الكود الخاص بك، انتقل إلى قائمة التحقق للترحيل في النهاية للحصول على قائمة مهام مختصرة. كل تجزئة (hash) تعديل ترتبط بفرق التغييرات الخاص بها على GitHub.
النماذج المدمجة تُحمَّل حسب المسار، لا الاسم (رئيسي)¶
ml.Model لم تعد تُحمّل نموذجًا مدمجًا من سلسلة اسم مجردة. تُحمَّل النماذج الآن من نظام الملفات / ROMFS حسب المسار:
model = ml.Model("/rom/person_detect.tflite") # was: ml.Model("person_detect")
أُزيلت السمة model.labels على جانب C؛ تُحمَّل التسميات الآن بواسطة غلاف Python ml.Model من ملف جانبي <model>.txt (None إذا كان غائبًا). وحُدّثت جميع الأمثلة المرفقة وml/apps.py إلى مسارات /rom/*.tflite.
تعاقبات Haar تُحمَّل من ROMFS (طفيف)¶
image.HaarCascade() تُحمّل الآن التعاقبات المدمجة من خلال VFS / ROMFS. أُعيدت تسمية ملف تعاقب الوجه الأمامي الافتراضي من haarcascade_frontalface_default.xml إلى haarcascade_frontalface.xml، وأصبح فشل التحميل الآن يرفع RuntimeError ("Failed to load Haar cascade") بدلًا من OSError.
التعديل: 9de1220d8
دلالات tof.reset() / tof.deinit() (سلوكي)¶
في وحدة tof، كانت reset() سابقًا اسمًا بديلًا لـ init() ولم يكن هناك deinit حقيقي. تُجري الآن tof.reset() إعادة تعيين فعلية للمستشعر، وتُغلق tof.deinit() المستشعر بشكل صحيح (مع دعم إيقاف تشغيل VL53L5CX). ينبغي إعادة التحقق من الكود الذي اعتمد على إعادة reset() تهيئة المستشعر.
قيود توقيت GenX320 ووضع الأحداث (سلوكي)¶
يغيّر تعاقب ISSD الجديد في GenX320 قاعدة زمن المستشعر: تُعبَّر الآن عن وسيطتي معدل الإطارات والتعريض بوحدات 1 ميجاهرتز بدلًا من قياسها بالساعة، وتُضبط فترة إخماد HSYNC ديناميكيًا وفق معدل الإطارات المطلوب. البرامج النصية التي رمّزت قيم توقيت GenX320 بشكل ثابت يجب إعادة ضبطها. ويرفع الآن التقاط وضع الأحداث خطأً عند تمكين تبديل أبعاد الصورة (transpose) (فهو غير مدعوم في ذلك التكوين).
قائمة التحقق للترحيل¶
للنقل النظيف إلى v4.7.0، يكون العمل المعتاد:
غيّر تحميل النموذج المدمج من سلسلة اسم إلى مسار
/rom/<name>.tflite، ووفّر التسميات عبر ملف جانبي<name>.txt(تغيير ml.Model).حدّث
haarcascade_frontalface_default.xmlإلىhaarcascade_frontalface.xmlوالتقطRuntimeError(لاOSError) عند فشل تحميل التعاقب (تغيير تعاقب Haar).أزل الكود الذي اعتمد على إعادة
tof.reset()تهيئة المستشعر (تغيير tof).أعد ضبط أي قيم معدل إطارات/تعريض مرمَّزة بشكل ثابت لـ GenX320 إلى وحدات 1 ميجاهرتز، ولا تُمكّن تبديل الأبعاد (transpose) في وضع الأحداث (تغيير GenX320).