v3.3.0

إصدار v3.3.0 إصدار ضخم. فهو يضيف دعمًا كاملًا لكاميرا التصوير الحراري FLIR Lepton عبر واجهة sensor.ioctl() جديدة ولوحات ألوان، ووحدة إخراج فيديو SPI تُسمى tv، ووضع التشغيل بالتحفيز للمصراع الشامل، ودفعة كبيرة من طرق الرسم/التحليل الجديدة في image (gamma_corr() و draw_ellipse() و draw_edges() والعديد من خصائص الكتل)، ومكتبات ToF / المحركات / linalg جديدة. أُعيدت هيكلة واجهة cpufreq كما أصبحت sensor.set_framesize() تطلق استثناءً الآن — اقرأ التغييرات الجذرية أدناه.

أبرز النقاط

  • FLIR Lepton — دعم كامل لكاميرا التصوير الحراري عبر واجهة sensor.ioctl() الجديدة ولوحات الألوان و image.to_rainbow().

  • وحدة tv — إخراج فيديو SPI TV / فيديو مركّب.

  • وضع التحفيز للمصراع الشامل — التقاط بالتحفيز للمستشعر MT9V034 عبر sensor.ioctl().

  • التصويرgamma_corr() و draw_ellipse() و draw_edges() ومزج ألفا في draw_image() والعديد من خصائص الكتل الجديدة.

  • مكتبات جديدة — قياس المسافة VL53L1X ToF، وبرنامج تشغيل المحرك TB6612، و micro-linalg.

  • تغيير جذري: أُعيدت هيكلة واجهة cpufreq، وأصبحت sensor.set_framesize() تطلق استثناءً عند الفشل الآن، وأزالت sensor.alloc_extra_fb() دعم Bayer/JPEG، وانزاحت الوسائط الموضعية في image.replace() — انظر التغييرات الجذرية.

ميزات جديدة

  • FLIR Lepton — أُضيفت sensor.ioctl() للتحكم الخاص بالمستشعر ومجموعة كاملة من أوامر ioctl الخاصة بـ Lepton (القياس الإشعاعي، التحديث/الدقة، تنفيذ الأوامر، تعيين/جلب السمات، درجة حرارة FPA/AUX بوحدة °C، وضع/مدى القياس، العرض/الارتفاع)، و sensor.set_color_palette() / sensor.get_color_palette() مع sensor.PALETTE_RAINBOW / PALETTE_IRONBOW، و image.to_rainbow()، وبرامج Lepton النصية النموذجية (27-Lepton).

  • وضع التحفيزIOCTL_SET_TRIGGERED_MODE / IOCTL_GET_TRIGGERED_MODE لالتقاط المصراع الشامل بالتحفيز للمستشعر MT9V034، مع أمثلة عالية معدل الإطارات وأمثلة لوضع التحفيز.

  • وحدة tv — أُضيفت روابط إخراج فيديو SPI TV / فيديو مركّب.

  • التصوير — أُضيفت image.gamma_corr() و image.draw_ellipse() و image.draw_edges() ومزج ألفا في draw_image()، وكلمة مفتاحية mask= في clear()، وأُعيدت إضافة mask_rectangle() / mask_circle() / mask_ellipse()، وكلمات مفتاحية للتدوير / hmirror / vflip في draw_string() / draw_text()، وكلمة مفتاحية transpose (واسماء بديلة assign / set) في replace()، و x_scale / y_scale في copy() إضافة إلى crop() / scale()، ومُنشئ Image() من الأبعاد، وتنسيق البكسل sensor.BINARY، وتصدير دوال تحويل فضاء الألوان، والعديد من خصائص الكتل الجديدة (corners و perimeter و roundness و elongation و extent و compactness و solidity و convexity و enclosing_circle و enclosed_ellipse والتدوير).

  • المكتبات — أُضيف برنامج تشغيل مستشعر قياس المسافة vl53l1x ToF، وبرنامج تشغيل المحرك tb6612 (مع أمثلة للمحرك DC والمحرك الخطوي Motor-Shield)، ومكتبة micro-linalg (ulinalg / umatrix).

  • تمت ترقية FatFS إلى FF13C (يدعم exFAT).

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

  • تحسين جودة JPEG الافتراضية (المدى المتوسط بين المنخفض والمرتفع بدلًا من قيمة مثبتة في الكود)؛ لم تعد عمليات الصور في المكان تتطلب تكرار الصورة كوسيط أول؛ وأصبحت draw_string() تقبل قيم مقياس غير صحيحة.

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

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

  • أُصلح تعليق بدء التشغيل في Lepton 3.5 (مهلة زمنية + استرداد) وموثوقية إعادة التعيين، و set_framesize() قبل set_pixformat() في MT9V034 (لم يعد ترتيب الاستدعاء مهمًا)، و WVGA للمستشعر MT9V034 على STM32H7، ومدى التعريض التلقائي وتحديثات سجل الظل في MT9V034، وخطأ ADC في H7.

التصوير:

  • أُصلح وصول غير صالح للذاكرة في find_apriltags()، و copy() عند نسخ صورة مُقاسة إلى مخزن الإطارات الرئيسي، وتخصيص مخزن الإطارات في to_grayscale() / to_rgb565()، و len() لكائن النقطة المفتاحية، ومعالجة حدود MCU في JPEG، وتحليل قائمة العتبات في binary()، وقبول draw_keypoints() لصفوف النقاط المفتاحية.

النظام:

  • أُصلحت تسريبات اختلال التوازن بين mark/free في fb_alloc عبر طرق image / fir / lcd / tv / nn، وجُعلت py_assert تحرر ذاكرة مخزن الإطارات عند التقاط الاستثناءات (#417)، ومُسحت راية تجاوز سعة UART (ORE) كي لا تعلّق التجاوزات قراءات UART بعد الآن، وأُصلح معالج مقاطعة RTC، وأُصلحت أداة cascade_convert.py على نظام Windows.

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

  • كاميرا التصوير الحراري FLIR Lepton.

  • درع TV — إخراج فيديو SPI TV / فيديو مركّب.

  • المصراع الشامل (MT9V034) وضع التحفيز.

تغييرات API الجذرية

تغييرات API المرئية للمستخدم بين v3.2.0 و v3.3.0. النطاق: وحدات Python بلغة C في modules/ ومكتبات Python في scripts/libraries/.

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

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

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

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

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

أُعيدت هيكلة واجهة cpufreq (رئيسي)

أُعيدت هيكلة وحدة cpufreq لدعم H7. أُزيلت الثوابت cpufreq.CPUFREQ_120MHZ / 144 / 168 / 192 / 216MHZ والدالة cpufreq.get_frequency(). أصبحت cpufreq.set_frequency() تأخذ عددًا صحيحًا بسيطًا بوحدة MHz (مثل cpufreq.set_frequency(120))، وأُضيفت cpufreq.get_current_frequencies() / cpufreq.get_supported_frequencies().

Commits: 6babf84a1

انزياح الوسائط الموضعية في image.replace() (ثانوي)

اكتسبت image.replace() وسيطًا transpose، مما أزاح الوسيط الموضعي mask من الموضع 4 إلى الموضع 5. يجب على الكود الذي مرّر mask موضعيًا (مثل img.replace(src, hmirror, vflip, mask)) التحول إلى الصيغة المفتاحية img.replace(src, mask=mask).

Commits: dbe7bf059

لم تعد sensor.alloc_extra_fb() تقبل Bayer/JPEG (ثانوي)

لم تعد sensor.alloc_extra_fb() تقبل sensor.BAYER أو sensor.JPEG (وهي تدعم الآن أيضًا sensor.BINARY). يجب على الكود الذي خصّص مخازن إطارات إضافية بتنسيق Bayer أو JPEG استخدام GRAYSCALE / RGB565 (أو تخصيص المخزن بطريقة أخرى).

Commits: f9e6b3fe0

تطلق sensor.set_framesize() استثناءً عند الفشل (سلوك)

أصبحت sensor.set_framesize() تطلق الآن استثناء ValueError عندما يكون حجم الإطار غير مدعوم بدلًا من إرجاع False. يجب على الكود الذي فحص قيمة الإرجاع False التقاط استثناء ValueError بدلًا من ذلك.

Commits: b0442633e

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

للنقل النظيف إلى v3.3.0 يكون العمل المعتاد:

  1. انقل كود cpufreq إلى set_frequency() بعدد صحيح من MHz و get_current_frequencies() / get_supported_frequencies() (إعادة هيكلة cpufreq).

  2. مرّر mask إلى image.replace() ككلمة مفتاحية (تغيير replace).

  3. خصّص مخازن الإطارات الإضافية كـ GRAYSCALE / RGB565 بدلًا من Bayer/JPEG (تغيير alloc_extra_fb).

  4. التقط ValueError حول sensor.set_framesize() بدلًا من الفحص عن False (تغيير set_framesize).

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