v3.3.0

v3.3.0 เป็นการเปิดตัวครั้งใหญ่ โดยเพิ่มการรองรับกล้องความร้อน FLIR Lepton อย่างสมบูรณ์พร้อมอินเทอร์เฟซ sensor.ioctl() ใหม่และชุดสีพาเลต, โมดูล tv สำหรับแสดงผลวิดีโอผ่าน SPI, โหมดทริกเกอร์ชัตเตอร์แบบ global, เมธอดการวาด/วิเคราะห์ image ใหม่จำนวนมาก (gamma_corr(), draw_ellipse(), draw_edges(), คุณสมบัติบลอบมากมาย), และไลบรารี ToF / มอเตอร์ / linalg ใหม่ API cpufreq ถูกปรับปรุงใหม่ และ sensor.set_framesize() ตอนนี้ raise ข้อผิดพลาด — อ่านการเปลี่ยนแปลงที่ทำให้โค้ดเดิมเสียหายด้านล่าง

จุดเด่น

  • FLIR Lepton — รองรับกล้องความร้อนอย่างสมบูรณ์ผ่านอินเทอร์เฟซ sensor.ioctl() ใหม่, ชุดสีพาเลต, และ image.to_rainbow()

  • โมดูล tv — การส่งออกวิดีโอ TV / composite ผ่าน SPI

  • โหมดทริกเกอร์ชัตเตอร์แบบ global — การจับภาพแบบทริกเกอร์ MT9V034 ผ่าน sensor.ioctl()

  • การประมวลผลภาพgamma_corr(), draw_ellipse(), draw_edges(), การผสม alpha ของ draw_image(), และคุณสมบัติบลอบใหม่มากมาย

  • ไลบรารีใหม่ — VL53L1X ToF distance, TB6612 motor driver, micro-linalg

  • การเปลี่ยนแปลงที่ทำให้โค้ดเดิมเสียหาย: API cpufreq ถูกปรับปรุงใหม่, sensor.set_framesize() ตอนนี้ raise ข้อผิดพลาดเมื่อล้มเหลว, sensor.alloc_extra_fb() ไม่รองรับ Bayer/JPEG แล้ว, และ positional args ของ image.replace() ถูกเลื่อน — ดูการเปลี่ยนแปลงที่ทำให้โค้ดเดิมเสียหาย

คุณสมบัติใหม่

  • FLIR Lepton — เพิ่ม sensor.ioctl() สำหรับควบคุมเซนเซอร์เฉพาะและชุด Lepton ioctls ที่สมบูรณ์ (radiometry, refresh/resolution, run-command, set/get attribute, FPA/AUX temperature ใน °C, measurement mode/range, width/height), 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 สำหรับการจับภาพแบบทริกเกอร์ชัตเตอร์แบบ global ของ MT9V034 พร้อมตัวอย่าง high-FPS และโหมดทริกเกอร์

  • โมดูล tv — เพิ่ม binding การส่งออกวิดีโอ TV / composite ผ่าน SPI

  • การประมวลผลภาพ — เพิ่ม image.gamma_corr(), image.draw_ellipse(), image.draw_edges(), การผสม alpha ของ draw_image(), คีย์เวิร์ด mask= บน clear(), เพิ่ม mask_rectangle() / mask_circle() / mask_ellipse() กลับมา, คีย์เวิร์ด rotation / hmirror / vflip บน draw_string() / draw_text(), คีย์เวิร์ด transpose (และนามแฝง assign / set) บน replace(), copy() x_scale / y_scale และ crop() / scale(), constructor Image() จากขนาด, pixformat sensor.BINARY, ฟังก์ชันแปลงพื้นที่สีที่ export ออกมา, และคุณสมบัติบลอบใหม่มากมาย (corners, perimeter, roundness, elongation, extent, compactness, solidity, convexity, enclosing_circle, enclosed_ellipse, rotation)

  • ไลบรารี — เพิ่มไดรเวอร์ ToF distance-sensor vl53l1x, ไดรเวอร์มอเตอร์ tb6612 (พร้อมตัวอย่าง DC-motor และ stepper Motor-Shield), และไลบรารี micro-linalg (ulinalg / umatrix)

  • อัปเกรด FatFS เป็น FF13C (รองรับ exFAT)

การเปลี่ยนแปลงและปรับปรุงอื่น ๆ

  • ปรับปรุงคุณภาพ JPEG ค่าเริ่มต้น (ช่วงกลางระหว่างต่ำ-สูง แทนค่าที่กำหนดตายตัว); การดำเนินการ image แบบ in-place ไม่จำเป็นต้องระบุ image เป็นอาร์กิวเมนต์แรกซ้ำอีกต่อไป; draw_string() รับค่า scale ที่ไม่ใช่จำนวนเต็มได้

การแก้ไขบั๊ก

กล้องและเซนเซอร์:

  • แก้ไขการค้างตอนเริ่มต้น Lepton 3.5 (timeout + recovery) และความน่าเชื่อถือในการรีเซ็ต, MT9V034 set_framesize() ก่อน set_pixformat() (ลำดับการเรียกใช้ไม่สำคัญอีกต่อไป), MT9V034 WVGA บน STM32H7, ช่วง auto-exposure ของ MT9V034 และการอัปเดต shadow-register, และบั๊ก H7 ADC

การประมวลผลภาพ:

  • แก้ไขการเข้าถึงหน่วยความจำที่ไม่ถูกต้องใน find_apriltags(), copy() เมื่อคัดลอกภาพที่ปรับขนาดไปยัง framebuffer หลัก, การจัดสรร framebuffer ของ to_grayscale() / to_rgb565(), len() ของออบเจ็กต์ keypoint, การจัดการขอบเขต JPEG MCU, การแยกวิเคราะห์รายการ threshold ของ binary(), และ draw_keypoints() รับ keypoint tuples ได้

ระบบ:

  • แก้ไขการรั่วไหลของ mark/free ที่ไม่สมดุลใน fb_alloc ทั่วทั้งเมธอด image / fir / lcd / tv / nn, ทำให้ py_assert ปลดปล่อยหน่วยความจำ framebuffer เมื่อถูก catch exception (#417), ล้างแฟล็ก UART overrun (ORE) เพื่อไม่ให้ overrun ทำให้การอ่าน UART ค้าง, แก้ไขตัวจัดการ IRQ ของ RTC, และแก้ไขเครื่องมือ cascade_convert.py บน Windows

การรองรับฮาร์ดแวร์และบอร์ด

  • กล้องความร้อน FLIR Lepton

  • TV shield — การส่งออกวิดีโอ TV / composite ผ่าน SPI

  • Global-shutter (MT9V034) โหมดทริกเกอร์

การเปลี่ยนแปลง API ที่ทำให้โค้ดเดิมเสียหาย

การเปลี่ยนแปลง API ที่มองเห็นได้ระหว่าง v3.2.0 และ v3.3.0 ขอบเขต: Python C-modules ใน modules/ และไลบรารี Python ใน scripts/libraries/

การเปลี่ยนแปลงแต่ละรายการถูกติดแท็กด้วยผลกระทบ:

  • major — ส่งผลต่อสคริปต์ส่วนใหญ่ที่ใช้คุณสมบัตินี้; คุณจะต้องปรับปรุงโค้ด

  • minor — API แคบ; ส่งผลเฉพาะสคริปต์ที่ใช้มัน

  • behavior — API เดิม แต่ผลลัพธ์ต่างกัน; ตรวจสอบสคริปต์ที่ปรับแต่งแล้วอีกครั้ง

การเปลี่ยนแปลงถูกจัดกลุ่มตามผลกระทบตามลำดับนั้น หากคุณต้องการปรับปรุงโค้ด ให้ข้ามไปที่ รายการตรวจสอบการย้าย ที่ท้ายเอกสาร hash ของแต่ละ commit เชื่อมโยงไปยัง diff บน GitHub

cpufreq API ถูกปรับปรุงใหม่ (major)

โมดูล 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

positional arguments ของ image.replace() ถูกเลื่อน (minor)

image.replace() ได้รับอาร์กิวเมนต์ transpose ซึ่งทำให้ positional argument mask เลื่อนจากตำแหน่ง 4 ไปตำแหน่ง 5 โค้ดที่ส่ง mask แบบ positional (เช่น img.replace(src, hmirror, vflip, mask)) ต้องเปลี่ยนเป็นรูปแบบ keyword img.replace(src, mask=mask)

Commits: dbe7bf059

sensor.alloc_extra_fb() ไม่รองรับ Bayer/JPEG อีกต่อไป (minor)

sensor.alloc_extra_fb() ไม่รองรับ sensor.BAYER หรือ sensor.JPEG อีกต่อไป (ตอนนี้รองรับ sensor.BINARY ด้วย) โค้ดที่จัดสรร extra framebuffers ในรูปแบบ Bayer หรือ JPEG ต้องใช้ GRAYSCALE / RGB565 แทน (หรือจัดสรรบัฟเฟอร์ด้วยวิธีอื่น)

Commits: f9e6b3fe0

sensor.set_framesize() raise ข้อผิดพลาดเมื่อล้มเหลว (behavior)

sensor.set_framesize() ตอนนี้ raise ValueError เมื่อ framesize ไม่รองรับ แทนที่จะส่งคืน False โค้ดที่ตรวจสอบค่าส่งคืน False ต้องเปลี่ยนเป็น catch exception ValueError แทน

Commits: b0442633e

รายการตรวจสอบการย้าย

สำหรับการย้ายไปยัง v3.3.0 อย่างสะอาด งานทั่วไปคือ:

  1. ปรับปรุงโค้ด cpufreq เป็น set_frequency() แบบจำนวนเต็ม-MHz และ get_current_frequencies() / get_supported_frequencies() (การปรับปรุง cpufreq)

  2. ส่ง mask ไปยัง image.replace() แบบ keyword (การเปลี่ยนแปลง replace)

  3. จัดสรร extra framebuffers เป็น GRAYSCALE / RGB565 แทน Bayer/JPEG (การเปลี่ยนแปลง alloc_extra_fb)

  4. Catch ValueError รอบ sensor.set_framesize() แทนการตรวจสอบ False (การเปลี่ยนแปลง set_framesize)

สคริปต์อื่น ๆ ทั้งหมดทำงานได้โดยไม่ต้องแก้ไข