v4.5.6

يُعدّ الإصدار v4.5.6 الإصدار الكبير الخاص بتعلّم الآلة. فقد استُبدلت وحدة C الخاصة بـ TensorFlow tf بحزمة ml جديدة ومستقلة عن المحرّك ومدعومة بـ TensorFlow Lite Micro (TFLM)، ونُقل تحويل الصورة إلى موتر (image→tensor) إلى image.to_ndarray()، وانتقلت اللوحات ثنائية النواة إلى Open-AMP. هناك عدة تغييرات كاسرة للتوافق — اقرأها أدناه قبل ترقية البرامج النصية الخاصة بتعلّم الآلة.

أبرز النقاط

  • حزمة ml جديدة — أُعيدت كتابة وحدة tf القديمة في صورة حزمة ml مستقلة عن المحرّك (ml.Model، ml.preprocessing، ml.utils، ml.apps)؛ وتبقى tf بمثابة اسم مستعار.

  • الواجهة الخلفية TFLM — استُبدلت مكتبة libtf المتقادمة بـ TensorFlow Lite Micro المبنية على المصدر الأصلي: استدلال أسرع بنحو 20% ومكتبات أصغر.

  • ثنائية النواة عبر Open-AMP — تستخدم لوحتا GIGA وPortenta H7 الآن Open-AMP/RPMsg للاتصال بين نواتي M7/M4 (أُزيلت آلية CM4 القديمة).

  • Bluetooth مدمج — تم تمكين برنامج Bluetooth الثابت لـ CYW43 على Nicla Vision وPortenta H7 وGIGA.

  • MicroPython 1.23.0 وulab 6.5.2 (مع دعم ndarray رباعي الأبعاد).

  • تغيير كاسر: تغيّرت واجهة برمجة تطبيقات تعلّم الآلة بشكل كبير، وأصبحت سلاسل Haar معطّلة افتراضيًا على معظم اللوحات — راجع التغييرات الكاسرة.

ميزات جديدة

  • حزمة mlml.Model مع predict() (roi، callback، قائمة متعددة المدخلات)، وسمات الشكل/النوع/المقياس/نقطة الصفر لكل موتر، وml.preprocessing.Normalization، وml.utils (NMS)، وml.apps (كاشف كلمات مفتاحية MicroSpeech مكتوب بلغة Python الخالصة مع listen() وبثّ غير حاجب عبر timeout=-1، إضافة إلى draw_predictions()).

  • نظام نماذج مدمج — تُدمج النماذج المدرجة في models/index.txt بشكل مشروط حسب اللوحة (FOMO على جميع لوحات تعلّم الآلة، ونماذج الصوت على اللوحات المزوّدة بميكروفونات).

  • image.to_ndarray(dtype, buffer=...) — تحويل صورة إلى ndarray من ulab (اختياريًا في المكان نفسه).

  • Image() من مصفوفات خام — وسائط مفتاحية جديدة shape= وstrides= وscale= تنشئ صورًا بتدرج الرمادي/RGB565 من قوائم بكسلات خام.

  • draw_circle() مع تنعيم الحواف.

  • تجميد وحدة ssl داخل البرنامج الثابت على GIGA وNicla Vision وPortenta H7 وNano RP2040 Connect وOpenMV 4/4P/PRO/PT وRT1060 وPico.

  • الصوت — اكتسبت audio.init() وسيطة مفتاحية samples= (عيّنات PDM لكل قناة)؛ ويُطبَّق gain_db الآن على ميكروفونات DFSDM (مثل Nicla Vision).

  • بروتوكول التصحيح — يُرجع أمر GET_STATE الجديد أعلام التشغيل/النص/JPEG وهندسة الإطار والنص في حزمة واحدة، مما يقلّل عدد جولات التبادل مع المضيف.

  • مثال vuart الخاص بـ Open-AMP للاتصال بين النواتين.

تغييرات وتحسينات أخرى

  • تحديث MicroPython إلى 1.23.0؛ وulab إلى 6.5.2 مع دعم ndarray رباعي الأبعاد.

  • استدلال أسرع — تحتفظ الواجهة الخلفية لتعلّم الآلة بالحالة/الذاكرة الثابتة عبر الاستدعاءات (أسرع بنحو 20%، مع دعم نماذج بنمط LSTM).

  • أُعيد تنفيذ get_similarity() على الواجهة الخلفية draw_image (دعم أوسع للتنسيقات/العمليات).

  • انتقلت morph() وعائلة مرشّح mean() إلى تحليل الوسائط المفتاحية؛ وأصبحت mask= تقبل الآن صورة قابلة للتعديل.

  • إعادة هيكلة تخطيط الذاكرة — مناطق DMA محاذاة لأس العدد 2، وكتل GC قابلة لإعادة الترتيب، وأكوام متعددة؛ تجزؤ أقل للكومة المبكرة على اللوحات منخفضة RAM؛ ويكتسب RT1060 كومة GC إضافية.

  • يُلغى الآن تهيئة WiFi (CYW43) عند إعادة الضبط البرمجية؛ وتفرّغ شاشة SPI-TV منطقة مخزن الإطارات فقط من ذاكرة التخزين المؤقت لتحديثات أكثر سلاسة.

إصلاحات الأخطاء

الكاميرا والمستشعرات:

  • إصلاح إبطال ذاكرة التخزين المؤقت لوحدة المعالجة المركزية عرضًا في مسار مخزن الإطارات/المستشعر على STM32 وi.MX RT، وهو ما كان قد يُفسد بيانات الصورة.

  • إصلاح قراءات I2C الحرارية لـ MLX90640/MLX90641 على لوحات i.MX RT (أصبحت عمليات النقل الكبيرة مقسّمة الآن إلى أجزاء).

تعلّم الآلة:

  • إصلاح معالجة load_to_fb في ml.Model، وتحديد حجم bytearray للمدخلات، وفحوصات ndim لـ ndarray، والتحقق من تنسيق/شكل الصورة في Normalization.

الصورة / النظام:

  • إضافة الثابت المفقود image.BLACK_BACKGROUND الخاص بتلميح الرسم وفحص سلامة طول مخزن الصورة/الموتر.

  • إصلاح مؤشرات جذر GC الخاصة بـ FIR والصوت التي كان من الممكن أن تجعل المُجمِّع يحرّر مخازن قيد الاستخدام.

  • يستخدم مثال Servo Shield الآن SoftI2C بحيث يعمل على لوحات OpenMV RT.

دعم العتاد واللوحات

  • Arduino GIGA — دعم مستشعري HM01B0 / HM0360؛ وثنائية النواة عبر Open-AMP.

  • Bluetooth — برنامج CYW43 BT الثابت على Nicla Vision وPortenta H7 وGIGA.

  • Portenta H7 — Open-AMP M7/M4 RPMsg.

  • OpenMV RT1060 — كتل كومة GC إضافية (مزيد من ذاكرة Python).

تغييرات كاسرة في واجهة برمجة التطبيقات

حالات كسر واجهة برمجة التطبيقات المرئية للمستخدم بين v4.5.5 وv4.5.6. النطاق: وحدات Python C في modules/ ومكتبات Python في scripts/libraries/.

كل تغيير موسوم بمدى تأثيره:

  • رئيسي — تحتاج معظم البرامج النصية التي استخدمته إلى تعديلات.

  • ثانوي — واجهة برمجة تطبيقات ضيقة؛ يؤثر فقط على البرامج النصية التي استخدمته.

  • سلوكي — نفس الواجهة، نتائج مختلفة؛ أعد فحص البرامج النصية المضبوطة.

  • أدوات — يؤثر على آليات ثنائية النواة / اللوحات، لا على واجهة برمجة تطبيقات Python.

التغييرات مجمّعة حسب التأثير بهذا الترتيب. إذا كنت تريد فقط نقل شيفرتك، فانتقل إلى قائمة التحقق للترحيل في النهاية. ويرتبط كل تجزيء (hash) للالتزام بفرقه (diff) على GitHub.

استبدال وحدة tf بحزمة ml (رئيسي)

أُعيدت كتابة وحدة C الخاصة بـ TensorFlow tf في صورة حزمة ml مستقلة عن المحرّك (تبقى tf بمثابة اسم مستعار متوافق مع الإصدارات السابقة، لكن ينبغي للشيفرة الجديدة استخدام ml). أُزيلت الدوال على مستوى الوحدة tf.load وtf.load_builtin_model والطرق detect()/segment() وطرق التصنيف — أنشئ ml.Model واستدعِ predict(). وتُرجع ml.Model(path) الآن النموذج فقط (لا صفًا (labels, model))؛ والتسميات هي سمة model.labels. وتُرجع predict() الآن كائنات ndarray من ulab (لا صفوف أعداد عشرية)، وتدعم النماذج متعددة المدخلات (مرّر قائمة)، وانتقلت NMS إلى ml.utils؛ وانتقل تطبيع المدخلات إلى ml.preprocessing.Normalization. وأصبح ملف ml.py القديم الآن هو ml.apps.

الالتزامات: c7228cbb4، 6c212409c، 3e37f46db، 9a186f4e2، 70b89f474، 3f8491cb0، 4506682c2، 8b38f3837

إزالة image.unpack() — استخدم to_ndarray() (رئيسي)

أُزيلت الدالة قصيرة العمر image.unpack()؛ حوّل الصورة إلى موتر باستخدام image.to_ndarray(dtype, buffer=...) بدلًا من ذلك، وطبّق تطبيع المقياس/المتوسط/الانحراف المعياري باستخدام ml.preprocessing.Normalization بدلًا من مسار تحجيم الصورة المدمج القديم.

الالتزامات: 9848eed12، de0d46fa6

وسيطة scale للمصفوفة الخام في Image() (ثانوي)

عند إنشاء Image من مصفوفة بكسلات خام، تأخذ وسيطة scale الآن نطاق (min, max) بدلًا من (scale, add).

الالتزام: 7b79fb4c7

سلاسل Haar معطّلة افتراضيًا على معظم اللوحات (سلوكي)

لتحرير مساحة في ذاكرة فلاش، أصبح كشف الوجوه بسلاسل Haar (find_features() / image.HaarCascade()) معطّلًا افتراضيًا الآن على Arduino GIGA وNicla Vision وPortenta H7 وOpenMV 3 وOpenMV 4 / 4 Plus / PRO وOpenMV Pure Thermal. ويجب على البرامج النصية التي تستخدم سلاسل Haar على تلك اللوحات إعادة بناء البرنامج الثابت مع تمكين الميزة.

الالتزام: 6ce27c910

مقاطعة البرنامج النصي وتحجيم الموتر (سلوكي)

يقاطع مصحّح أخطاء USB الآن البرنامج النصي قيد التشغيل عبر ميزة إجهاض الآلة الافتراضية (VM-abort) في MicroPython بدلًا من قفزة PendSV القسرية (أنظف، لكن نقطة المقاطعة تختلف). وصُحّح تحجيم المدخلات SCALE_S128_127 بحيث يربط 0–255 بـ −128–127 دون كسب خاطئ — وستُنتج النماذج المعتمدة على التحجيم القديم (غير الصحيح) نتائج مختلفة.

الالتزامات: e758a0f95، a4d97c572

استبدال المعالج المساعد CM4 بـ Open-AMP (أدوات)

أُزيلت آلية البرنامج الثابت للمعالج المساعد CM4 المهملة على GIGA / Nicla Vision / Portenta H7 واستُبدلت بـ Open-AMP/RPMsg. ويجب نقل الشيفرة ثنائية النواة إلى نموذج Open-AMP (يُوفَّر مثال vuart).

الالتزامات: 3cc57fea4، 93f2d4c41

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

للحصول على نقل نظيف إلى v4.5.6، يكون العمل المعتاد كالآتي:

  1. انقل شيفرة تعلّم الآلة إلى ml: أنشئ ml.Model(path)، واستدعِ predict()، واقرأ model.labels، وتوقّع مخرجات ndarray، وانقل التطبيع إلى ml.preprocessing.Normalization وNMS إلى ml.utils (تغيير حزمة ml).

  2. استبدل image.unpack() بـ image.to_ndarray() (إزالة unpack).

  3. حدّث أي وسيطة scale للمصفوفة الخام في Image() إلى نطاق (min, max) (تغيير scale في Image).

  4. إذا كنت تستخدم سلاسل Haar على لوحة متأثرة، فأعد البناء مع تمكين الميزة (تغيير سلاسل Haar).

  5. أعد التحقق من النماذج التي اعتمدت على SCALE_S128_127 (تغيير التحجيم).

  6. انقل الشيفرة ثنائية النواة إلى Open-AMP (تغيير CM4).