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، العمل المعتاد هو:
انقل استدلال نماذج CMSIS-NN
nnإلى وحدة TensorFlow Litetf(إزالة nn).استبدل
image.ImageReader/image.ImageWriterبـimage.ImageIO(تغيير ImageIO).احذف الكلمة المفتاحية
scale=(min, max)منfir.draw_ir()واستخدم الوسائط الجديدة (تغيير draw_ir).أعد ضبط معاملات
find_lines()مقابل مقياس المقدار التقريبي (تغيير find_lines).انقل برامج FIR النصية إلى واجهة برمجة الكلمات المفتاحية الجديدة لـ
fir.snapshot()(تغيير fir.snapshot) وتعامل مع إطلاقfir.init()استثناءً عند فقدان المستشعر (تغيير fir.init).
تعمل جميع البرامج النصية الأخرى دون تغيير.