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(), constructorImage()จากขนาด, pixformatsensor.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 อย่างสะอาด งานทั่วไปคือ:
ปรับปรุงโค้ด
cpufreqเป็นset_frequency()แบบจำนวนเต็ม-MHz และget_current_frequencies()/get_supported_frequencies()(การปรับปรุง cpufreq)ส่ง
maskไปยังimage.replace()แบบ keyword (การเปลี่ยนแปลง replace)จัดสรร extra framebuffers เป็น
GRAYSCALE/RGB565แทน Bayer/JPEG (การเปลี่ยนแปลง alloc_extra_fb)Catch
ValueErrorรอบsensor.set_framesize()แทนการตรวจสอบFalse(การเปลี่ยนแปลง set_framesize)
สคริปต์อื่น ๆ ทั้งหมดทำงานได้โดยไม่ต้องแก้ไข