v2.7.0

يحدّث الإصدار v2.7.0 واجهة الكسب التلقائي / التعريض التلقائي / موازنة البياض في وحدة sensor لتستخدم وحدات فيزيائية (ديسيبل / ميكروثانية)، ويُعيد هيكلة find_displacement() القائمة على ارتباط الطور (مع إضافة الدوران/التحجيم)، ويضيف get_similarity() (SSIM)، وchrominvar() / illuminvar()، ومخازن إطارات إضافية، ومكتبة MQTT. إنه إصدار كاسر كبير — اقرأ التغييرات الكاسرة أدناه.

أبرز النقاط

  • واجهة مستشعر حديثة — تستخدم set_auto_gain() / set_auto_exposure() / set_auto_whitebal() الآن الديسيبل / الميكروثانية، مع الدوال المقابلة get_gain_db() / get_exposure_us() / get_rgb_gain_db().

  • ارتباط الطور — أُعيدت هيكلة find_displacement() مع الدوران / التحجيم وfind_rotscale() / linpolar() / logpolar().

  • SSIM — التشابه البنيوي image.get_similarity().

  • مخازن إطارات إضافيةsensor.alloc_extra_fb() / dealloc_extra_fb().

  • MQTT — مكتبة MQTT جديدة.

  • كاسر: تغيّرت واجهة كسب/تعريض/موازنة بياض المستشعر، وfind_displacement() / أحجام إطارات FFT، وfind_number()، وأدوات برنامج WINC الثابت، وz_rotation() لـ AprilTag — راجع التغييرات الكاسرة.

ميزات جديدة

  • المستشعر — أُضيفت sensor.get_gain_db()، وsensor.get_exposure_us()، وsensor.get_rgb_gain_db()، ومعامل gain_db_ceiling على set_auto_gain()، ودعم hmirror / vflip لـ MT9V034، وsensor.alloc_extra_fb() / sensor.dealloc_extra_fb() لمخازن إطارات إضافية في الـ RAM.

  • الصورة — أُضيفت remove_shadows()، وmin() / max() (فرق الإطارات)، وget_similarity() (SSIM) مع مثال على التشابه البنيوي، وchrominvar() / illuminvar()، وfind_rotscale()، وlinpolar() / logpolar()، ومعاملات threshold / offset / invert على المرشحات التكيفية mean() / mode() / median() / midpoint()، وlen() / الفهرسة على كائن النقاط المفتاحية، ومُلحِق .match() على كائن مطابقة النقاط المفتاحية.

  • المكتبات / الشبكة — أُضيفت مكتبة MQTT (مع مثال MQTT عبر WiFi) ووضع network.WINC.MODE_BSP لبرمجة برنامج WINC الثابت عبر UART التنقيح.

  • الأمثلة — أُضيفت أمثلة منخفضة الطاقة deep_sleep.py / stop_mode.py، والتدفق الضوئي المتقدم، وبرامج نصية لأمثلة الإحداثيات القطبية الخطية/اللوغاريتمية؛ ويحلّل البرنامج الثابت الآن uart.ini عند الإقلاع لتمكين REPL عبر UART.

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

  • اكتسبت get_regression() معاملي area_threshold / pixels_threshold وانحداراً قوياً أسرع (لتتبّع الخطوط / السباق)؛ وتدعم get_pixel() الآن صور Bayer؛ وأُضيفت أعمال تأسيسية لـ STM32H7 (ترويسات CMSIS / HAL / محمّل الإقلاع — لوحة H7 غير قابلة للاستخدام بعد)؛ وحُدِّث برنامج WINC1500 الثابت المرفق (19.4.4 / 19.5.2).

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

التصوير:

  • أُصلح خطأ تجاوز الحدود في بحث المعيّن ضمن find_template()، وتلف logpolar / linpolar، وانفلات illuminvar() عند قيم لون قريبة من الصفر.

المستشعر والنظام:

  • أُصلحت أخطاء التحكم بالكسب التلقائي، واستُعيد حجم MAIN_FB عند snapshot() (بحيث يعمل copy_to_fb بدقة مختلفة، وإعادة تحجيم مخزن الإطارات، وتجميع التدفق الضوئي من جديد)، ومهلة gethostbyname في WINC، ومسح الحالة pydfu على محمّل إقلاع H7، وأوضاع الطاقة المنخفضة للإيقاف/الاستعداد.

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

  • STM32H7 — أعمال تأسيسية (CMSIS / HAL / محمّل الإقلاع)؛ لوحة OpenMV H7 غير قابلة للاستخدام بعد في هذا الإصدار.

  • WINC1500 — تحديث البرنامج الثابت المرفق.

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

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

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

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

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

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

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

إعادة هيكلة sensor.set_auto_gain() لتستخدم الديسيبل (رئيسي)

لم تعد sensor.set_auto_gain() تقبل المعامل الصحيح value= ولم تعد تُرجع True / False. استخدم sensor.set_auto_gain(False, gain_db=...) (قيمة ديسيبل من نوع float)، واقرأها مرة أخرى عبر الدالة الجديدة sensor.get_gain_db()، ولفّ الاستدعاء بـ try / except لأن الفشل يثير الآن ValueError.

الإيداعات: b906c5f19

إعادة هيكلة sensor.set_auto_exposure() لتستخدم الميكروثانية (رئيسي)

لم تعد sensor.set_auto_exposure() تقبل المعامل الصحيح value= ولم تعد تُرجع True / False. استخدم sensor.set_auto_exposure(False, exposure_us=...)، واقرأها مرة أخرى عبر الدالة الجديدة sensor.get_exposure_us()، وعالِج ValueError المُثار عند الفشل.

الإيداعات: 7be0a7a18

إعادة هيكلة find_displacement() / أحجام إطارات FFT (رئيسي)

أُعيدت هيكلة ارتباط الطور. تُرجع image.find_displacement() الآن كائن إزاحة (مع x_translation() / y_translation() — وكانتا سابقاً x_offset / y_offset — إضافة إلى rotation() / scale() ومعاملي logpolar / fix_rotation_scale الجديدين)؛ وأُزيل كائن الدوران-التحجيم المنفصل وأُضيفت find_rotscale(). وأُعيدت تسمية ثوابت حجم إطار FFT أو أُزيلت: أُزيل sensor.B40x30 كلياً، وأُعيدت تسمية sensor.B64x32 / B64x64 إلى الأحرف الكبيرة sensor.B64X32 / B64X64 (مع B128X64 / B128X128 الجديدين).

الإيداعات: c78f91b42، 213396d09

إعادة هيكلة sensor.set_auto_whitebal() لتستخدم الديسيبل (ثانوي)

استبدلت sensor.set_auto_whitebal() معاملها الصحيح value=[r, g, b] بـ rgb_gain_db=[r, g, b] (ديسيبل من نوع float) وتُرجع الآن None (مثيرةً ValueError عند الفشل) بدلاً من True / False. استخدم الدالة الجديدة sensor.get_rgb_gain_db() لقراءة الكسوب مرة أخرى.

الإيداعات: 30ecbdc4f

تُرجع set_hmirror() / set_vflip() القيمة None (ثانوي)

تُرجع sensor.set_hmirror() وsensor.set_vflip() الآن None وتثيران ValueError عند الفشل بدلاً من إرجاع حالة True / False. أزل أي شيفرة تتفرّع بناءً على قيمتيهما المُرجَعتين.

الإيداعات: aeb023804

أدوات برنامج WINC الثابت تتطلب مسار ملف (ثانوي)

تغيّرت أدوات برنامج network.WINC الثابت: تأخذ wlan.fw_dump() / wlan.fw_update() الآن معامل مسار ملف برنامج ثابت إلزامياً، ويُفتح WINC في وضع برمجة (network.WINC(mode=...)). حدّث الاستدعاءات بلا معامل لتمرير مسار (مثل wlan.fw_update("/winc_19_5_2.bin")).

الإيداعات: fcc3b0b9c

تتطلب image.find_number() منطقة اهتمام بحجم 28x28 (سلوكي)

تتطلب image.find_number() (LeNet) الآن منطقة اهتمام بحجم 28x28 بالضبط تقع داخل الصورة وتثير خطأً خلاف ذلك (بدلاً من العمل على منطقة اهتمام عشوائية/تغطي الصورة كاملة). مرّر roi=(x, y, 28, 28) بشكل صريح.

الإيداعات: 4d09a13f3

انقلاب إشارة z_rotation() لـ AprilTag (سلوكي)

تستخدم z_rotation() لـ AprilTag (والدالة ذات الصلة rotation()) الآن اصطلاح إحداثيات أيمن، لذا فإن الزاوية المُرجَعة سالبة مقارنةً بالإصدارات السابقة. يجب على البرامج النصية التي تعتمد على الإشارة القديمة عكس القيمة أو تعديل حساباتها للزاوية.

الإيداعات: 7673aaf74

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

للحصول على نقل نظيف إلى v2.7.0، العمل المعتاد هو:

  1. انقل set_auto_gain() إلى gain_db= + get_gain_db() وعالِج ValueError (إعادة هيكلة الكسب التلقائي).

  2. انقل set_auto_exposure() إلى exposure_us= + get_exposure_us() (إعادة هيكلة التعريض التلقائي).

  3. حدّث find_displacement() إلى كائن الإزاحة وأعد تسمية ثوابت حجم إطار FFT (إعادة هيكلة find_displacement).

  4. انقل set_auto_whitebal() إلى rgb_gain_db= + get_rgb_gain_db() (إعادة هيكلة موازنة البياض) وتوقّف عن فحص قيمة إرجاع set_hmirror() / set_vflip() (تغيير الانعكاس/القلب).

  5. مرّر مسار برنامج ثابت إلى أدوات WINC ‏fw_* (تغيير أدوات WINC).

  6. مرّر roi بحجم 28x28 إلى find_number() (تغيير find_number) واضبط حسابات زاوية AprilTag للإشارة المنقلبة لـ z_rotation() (تغيير z_rotation).

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