v3.9.0

الإصدار v3.9.0 إصدار رئيسي. يضيف منفذ nRF مع Arduino Nano 33 BLE Sense (كاميرا، ووحدة audio بنظام PDM، وulab، وبرامج تشغيل مستشعرات مُجمَّدة)، ويجلب مستشعرات حرارية FLIR Lepton إضافةً إلى MLX90641 / MLX90621 ووحدة fir معاد تصميمها بشكل كبير، وأوامر ioctl للتركيز التلقائي autofocus في OV5640، ونوع البث الجديد image.ImageIO. وقد تمت إزالة وحدة CMSIS-NN القديمة nn والصنفين القديمين ImageReader / ImageWriter — اقرأ التغييرات الجذرية أدناه.

أبرز النقاط

  • Arduino Nano 33 BLE Sense — منفذ nRF52840 جديد مع كاميرا، ووحدة audio بنظام PDM، وulab، وبرامج تشغيل مستشعرات مُجمَّدة.

  • الحرارية — دعم FLIR Lepton وMLX90641 وMLX90621 مع وحدة fir معاد تصميمها (لوحات ألوان، انعكاس، تدريج، قياس إشعاعي، FFC).

  • التركيز التلقائي لـ OV5640 — أوامر ioctl جديدة sensor.IOCTL_*_AUTO_FOCUS.

  • image.ImageIO — نوع بث صور موحد (ذاكرة أو ملف؛ قراءة/كتابة/تموضع/حجم/إغلاق) يحل محل ImageReader / ImageWriter.

  • تغيير جذري: تمت إزالة وحدة CMSIS-NN nn وimage.ImageReader / image.ImageWriter، وتغيّر سلوك find_lines() / fir — راجع التغييرات الجذرية.

ميزات جديدة

  • منفذ nRF / Arduino Nano 33 BLE Sense — منفذ nRF52840 جديد ودعم اللوحة، مع وحدة audio جديدة (audio.init() وaudio.start_streaming() وaudio.stop_streaming())، وتمكين ulab، وبرامج تشغيل مستشعرات مُجمَّدة apds9960 / lps22h / lsm9ds1 / hts221.

  • image.ImageIO — نوع بث صور جديد يدعم كلًا من بث الذاكرة وبث الملفات عبر read() / write() / seek() / size() / close()، إضافةً إلى أمثلة ImageIO للقراءة/الكتابة/الذاكرة.

  • FLIR Lepton — تمت إضافة دعم FIR_LEPTON مع fir.radiometric() وfir.trigger_ffc() وfir.register_vsync_cb().

  • المستشعرات الحرارية — تمت إضافة دعم MLX90641 (FIR_MLX90641) وMLX90621 الحراري (برامج تشغيل Melexis الرسمية).

  • لوحات ألوان / توجيه fir — تمت إضافة الثوابت fir.PALETTE_RAINBOW / PALETTE_IRONBOW / GRAYSCALE / RGB565، وأصبحت fir.read_ir() تقبل الآن hmirror / vflip / transpose.

  • التركيز التلقائي لـ OV5640 — تمت إضافة sensor.IOCTL_TRIGGER_AUTO_FOCUS / IOCTL_PAUSE_AUTO_FOCUS / IOCTL_RESET_AUTO_FOCUS / IOCTL_WAIT_ON_AUTO_FOCUS (OpenMV 2/3/4/4 Plus/PT/Portenta).

  • تمت إعادة تنظيم أمثلة Arduino في مجلدات لكل لوحة.

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

  • تم التحويل إلى رسائل خطأ MicroPython المضغوطة (سلاسل استثناءات أقصر)؛ وأصبحت وسيطة type في fir.init() تكتشف تلقائيًا عبر مسح ناقل I2C عند حذفها؛ وأصبح استثناء xalloc يبلغ الآن عن عدد البايتات المطلوبة؛ وتم تمكين UART 8 على Portenta؛ وتم توحيد أمثلة FIR في thermal_camera.py / thermal_overlay.py / thermal_overlay_lcd.py. ولكي تتسع ذاكرة الفلاش، تم تعطيل image.get_similarity() والبحث الانتقائي في بنية OpenMV 4، وأصبح من الممكن الآن بناء مكتبة الصور دون نظام ملفات (للوحات التي لا تحتوي على نظام ملفات).

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

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

  • تم إصلاح حساب PCLK لمستشعر OV5640، وإضافة معالجات مقاطعة I2C المفقودة (إصلاح تعليق نقل I2C)، وإعادة تصميم قراءة/كتابة cambus I2C لتحسين الموثوقية، وجعل ناقل Lepton I2C قابلًا للاختيار، ونقل دبابيس استعادة ناقل cambus إلى ضبط لكل لوحة، وإعادة محاولة مسح cambus مرة واحدة قبل الفشل، وتشغيل OpenMV PT (مشاركة I2C بين Lepton والكاميرا).

الحرارية:

  • تم إصلاح حساب القيمة القصوى في fir ضمن get_ir() / draw_ir() وimage.get_similarity() (FLT_MIN-FLT_MAX)، ومعالجة AMG8833 من 12 إلى 16 بت، ودقة MLX90621 (برنامج تشغيل Melexis الرسمي).

العرض والصوت والنظام:

  • تم نقل عمليات نقل شاشة SPI LCD لـ STM32 إلى دوال رد نداء HAL SPI (موثوقية العرض)، وإصلاح audio.init() لـ Nano 33 (مُذبذب عالي التردد + نسبة PDM لكي يعمل الميكروفون)، وحالة مؤقت H7 مع طبقة HAL الجديدة، وgc_collect لـ nRF والتهيئة/إلغاء التهيئة المبكرة للوحة، وإيقاف طباعة الرسالة الزائفة "uh oh, no preference for overlapping detection" أثناء find_apriltags() / find_rects().

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

  • Arduino Nano 33 BLE Sense — لوحة nRF52840 جديدة (كاميرا، صوت PDM، ulab، برامج تشغيل مستشعرات مُجمَّدة).

  • مستشعرات حرارية FLIR Lepton وMLX90641 وMLX90621.

  • التركيز التلقائي لـ OV5640 — OpenMV 2/3/4/4 Plus/PT/Portenta.

  • Portenta — تم تمكين UART 8.

تغييرات جذرية في واجهة البرمجة

تغييرات جذرية مرئية للمستخدم في واجهة البرمجة بين v3.8.0 وv3.9.0. النطاق: وحدات Python بلغة C في modules/ ومكتبات Python في scripts/libraries/.

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

  • رئيسي — يؤثر على معظم البرامج النصية التي استخدمت الميزة؛ ستحتاج إلى نقل الشيفرة.

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

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

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

إزالة وحدة CMSIS-NN nn (رئيسي)

تمت إزالة وحدة CMSIS-NN nn، بما في ذلك nn.load() وnet.forward() وnet.search() والمساعد nn_class. وينتقل استدلال النماذج إلى وحدة TensorFlow Lite (tf). أما البرامج النصية التي حمّلت نماذج .network باستخدام nn فيجب نقلها إلى tf مع نموذج TensorFlow Lite.

عمليات التنفيذ: fbc767b36

استبدال ImageReader / ImageWriter بـ image.ImageIO (رئيسي)

تمت إزالة image.ImageReader / image.ImageWriter ومنهجيهما next_frame() / add_frame() واستبدالهما بالنوع الجديد image.ImageIO، الذي يدعم كلًا من بث الذاكرة وبث الملفات عبر read() / write() / seek() / size() / close(). ويجب نقل الشيفرة التي تستخدم صنفي القارئ/الكاتب القديمين إلى image.ImageIO (راجع المثالين المعاد تسميتهما imageio_read.py / imageio_write.py).

عمليات التنفيذ: 783a78754

إزالة الكلمة المفتاحية scale من fir.draw_ir() (طفيف)

تمت إعادة كتابة fir.draw_ir() على أساس مسار رسم الصور الجديد. وتمت إزالة الكلمة المفتاحية scale=(min, max)، وإضافة hint وx_scale وy_scale وroi ووسائط الإزاحة الموضعية x/y. أما البرامج النصية التي مرّرت scale=(min, max) إلى fir.draw_ir() فيجب أن تحذفها وتستخدم الوسائط الجديدة.

عمليات التنفيذ: 0a29103b1

تقريب find_lines() (سلوكي)

أصبحت image.find_lines() تقرّب الآن مقدار التدرج إلى (abs(gx) + abs(gy)) / 2 وتتخطى المقادير الأقل من 126. وهذا أسرع لكنه يغير مجموعة الخطوط المكتشفة وقيم المُراكِم، لذا أعد فحص وضبط threshold / theta_margin / rho_margin.

عمليات التنفيذ: 902ae3c98

إعادة تصميم fir.snapshot() (سلوكي)

تمت إعادة تصميم fir.snapshot() بشكل كبير مع واجهة برمجة كلمات مفتاحية جديدة (hmirror وvflip وtranspose وx_scale وy_scale وx_size وy_size وscale وrgb_channel وalpha وcolor_palette وhint وpixformat وcopy_to_fb)، وأُعيدت كتابة الأمثلة المُرفقة. وقد تغيّر السلوك السابق القائم على الوسائط الموضعية / pixformat فقط؛ فانقل برامج FIR النصية إلى صيغة الكلمات المفتاحية الجديدة (راجع أمثلة درع thermopile المحدّثة).

عمليات التنفيذ: 53f2248b8

إطلاق fir.init() لاستثناء عند الفشل (سلوكي)

أصبحت fir.init() تطلق الآن استثناءً (وتلغي التهيئة بشكل نظيف) عندما لا يُكتشف المستشعر الحراري، بدلًا من المتابعة بصمت. لذا غلِّف fir.init() في try / except (أو تأكد من توصيل المستشعر) حيثما كنت تعتمد سابقًا على عدم إطلاقها استثناءً.

عمليات التنفيذ: 4b2f972f3

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

من أجل نقل نظيف إلى v3.9.0، العمل المعتاد هو:

  1. انقل استدلال نماذج CMSIS-NN nn إلى وحدة TensorFlow Lite tf (إزالة nn).

  2. استبدل image.ImageReader / image.ImageWriter بـ image.ImageIO (تغيير ImageIO).

  3. احذف الكلمة المفتاحية scale=(min, max) من fir.draw_ir() واستخدم الوسائط الجديدة (تغيير draw_ir).

  4. أعد ضبط معاملات find_lines() مقابل مقياس المقدار التقريبي (تغيير find_lines).

  5. انقل برامج FIR النصية إلى واجهة برمجة الكلمات المفتاحية الجديدة لـ fir.snapshot() (تغيير fir.snapshot) وتعامل مع إطلاق fir.init() استثناءً عند فقدان المستشعر (تغيير fir.init).

تعمل جميع البرامج النصية الأخرى دون تغيير.