v4.6.0

v4.6.0 เป็นการเผยแพร่ฟีเจอร์หลัก สิ่งที่โดดเด่น ได้แก่ โมดูลกล้องถูกเปลี่ยนชื่อจาก sensor เป็น csi (โดยมี sensor เป็นนามแฝงที่ยังคงใช้งานได้เพื่อความเข้ากันได้แบบย้อนหลัง) โมดูลใหม่ ml.postprocessing รองรับ Prophesee GenX320 event sensor, PAG7936 และกล้องความร้อน FLIR Boson บูตโหลดเดอร์ DFU แบบใหม่ที่ใช้ TinyUSB การเร่งความเร็วด้วย Nema GPU และ MicroPython 1.24 นอกจากนี้ยังมีการเปลี่ยนแปลงช่วงค่า alpha ในการวาด ดังนั้นโปรดอ่านการเปลี่ยนแปลงที่อาจทำให้เกิดปัญหาด้านล่าง

ไฮไลต์

  • sensor ขณะนี้ยังเป็น csi ด้วย — โมดูลกล้องถูกเปลี่ยนชื่อเป็น csi โดย sensor ยังคงใช้งานได้เป็นนามแฝงที่เข้ากันได้แบบย้อนหลัง (ยังไม่ต้องเปลี่ยนโค้ด)

  • โมดูลใหม่ ml.postprocessingfomo_postprocess, yolo_v2_postprocess, yolo_v5_postprocess

  • เซนเซอร์ใหม่ — กล้อง event-based Prophesee GenX320, PAG7936 และกล้องความร้อน FLIR Boson 320/640

  • DFU bootloader ใหม่ — บูตโหลดเดอร์ DFU มาตรฐานแบบ TinyUSB ทดแทนบูตโหลดเดอร์ CDC รุ่นเก่าบนบอร์ดทุกรุ่น

  • Nema GPU — การเร่งความเร็วกราฟิก 2D/vector บน STM32

  • MicroPython อัปเดตเป็น 1.24.0

  • Breaking: ช่วงค่า alpha ในการวาดเปลี่ยนจาก 0–256 เป็น 0–255 (ดู การเปลี่ยนแปลงช่วง alpha)

ฟีเจอร์ใหม่

  • ml.postprocessing — โมดูลใหม่สำหรับถอดรหัสผลลัพธ์ของโมเดล ประกอบด้วยตัวถอดรหัส FOMO (fomo_postprocess, find_blobs + NMS, threshold ที่ปรับได้) และ yolo_v2_postprocess / yolo_v5_postprocess (พร้อม threshold, anchors, nms_threshold, nms_sigma)

  • การแสดงผล event-camera — เมธอดใหม่ Image.to_evt_dark() / Image.to_evt_light() และชุดสีพาเลตต์ PALETTE_EVT_DARK / PALETTE_EVT_LIGHT

  • การแสดงผลเชิงความลึก — เมธอดใหม่ Image.to_depth() และชุดสีพาเลตต์ PALETTE_DEPTH (บอร์ดที่รองรับ ToF)

  • การตรวจสอบ sensor — ioctl ใหม่ IOCTL_GET_RGB_STATS ที่คืนค่า tuple สถิติช่องสี (R, Gb, Gr, B)

  • GenX320 bias presets — ioctl ใหม่ IOCTL_GENX320_SET_BIASES พร้อมพรีเซต GENX320_BIASES_DEFAULT / LOW_LIGHT / ACTIVE_MARKER / LOW_NOISE / HIGH_SPEED

  • omv.debug_mode() — ฟังก์ชันใหม่สำหรับตรวจสอบว่าอินเทอร์เฟซดีบักผ่าน USB กำลังทำงานอยู่หรือไม่

  • Nema GPU — การรวม driver Cortex-M55 NemaGFX/NemaVG บน STM32 พร้อมการเร่งความเร็ว GPU แบบ in-place สำหรับ draw_image

  • PAG7936 — เพิ่มการแสดงผลแถบสี, auto-exposure / auto-gain, sleep และโหมด MIPI

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

  • MicroPython อัปเดตเป็น 1.24.0; ulab อัปเดตเป็น 6.7.3 (เพิ่ม keepdims)

  • สคริปต์บูตร่วม — STM32 / i.MX RT / RP2 ขณะนี้ใช้ _boot.py ร่วมกันซึ่งสร้างระบบไฟล์ flash/SD โดยอัตโนมัติพร้อม main.py และ README.txt เริ่มต้น และล้าง global ที่ใช้เฉพาะตอนเริ่มต้น

  • การวางรากฐาน STM32N6 — รองรับ STM32N6 เบื้องต้น, XSPI driver, MPU driver ร่วม และการเซ็นเฟิร์มแวร์/บูตโหลดเดอร์บน STM32

  • Computed-goto VM — เปิดใช้งานบน STM32 และ nRF เพื่อเพิ่มความเร็ว interpreter

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

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

  • แก้ไขการคำนวณ PCLK/exposure ของ OV5640 (สองเลน MIPI, ตาราง divider ที่ถูกต้อง)

  • ตัวแปรสาย Bayer-CFA ของ MT9V0xx ขณะนี้รับ RGB565/BAYER/GRAYSCALE และส่งออกข้อมูล Bayer ดิบที่ถูกต้องแทนการแจ้งข้อผิดพลาด

  • เปิดใช้งานการแก้ไข lens-shading ของ PAG7936 และแก้ไขการเลื่อนภาพ HD; ขณะนี้ set_framerate() ถูกจำกัดตามความละเอียด

  • แก้ไขการจับภาพความร้อน FLIR Lepton บน i.MX RT1060 (แก้ไข VoSPI CPOL/CPHA) และสแนปช็อต Lepton ขณะนี้คืนค่ารหัสข้อผิดพลาดเฉพาะ

  • แก้ไขการปัดเศษความถี่ของ GenX320

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

  • แก้ไขการเสียหายของหน่วยความจำใน to_ndarray() สำหรับภาพ grayscale

  • แก้ไขการทำนายขอบเขต debayer ในการแปลง Bayer→RGB/grayscale

  • แก้ไข draw_image() transpose บนบอร์ดที่ไม่มี SDRAM (chunked buffer)

  • แก้ไขการจัดการอาร์กิวเมนต์บูลีนใน Image.binary() และ flag load_to_fb ของ ml.Model

ระบบ:

  • แก้ไขการกำหนดค่าพิน RX-only / TX-only ของ SPI บน STM32 และ i.MX RT

  • ย้าย DMA buffer ของ Ethernet บน Portenta H7 ไปไว้ใน SRAM3 เพื่อให้ Ethernet ทำงานได้

  • แก้ไขตัวอักษรหายในการส่งข้อความผ่านช่องทาง debug ผ่าน USB; ปรับขนาดการจัดสรรหน่วยความจำแบบไดนามิกของ ML ให้ปัดขึ้นเพื่อป้องกัน buffer ของโมเดลมีขนาดเล็กเกินไป

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

  • เซนเซอร์ vision แบบ event-based Prophesee GenX320 (STM32F7 + i.MX RT1060)

  • เซนเซอร์ PAG7936 (พร้อมโหมด MIPI)

  • กล้องความร้อน FLIR Boson 320/640 (IDD 4 driver)

  • การเร่งความเร็ว Nema GPU บน STM32

  • การวางรากฐานบูตโหลดเดอร์/XSPI ของ STM32N6

  • VL53L5CX — เพิ่มการรองรับพิน power-enable

การเปลี่ยนแปลง API ที่อาจทำให้เกิดปัญหา

การเปลี่ยนแปลง API ที่มองเห็นได้จากผู้ใช้ระหว่าง v4.5.9 และ v4.6.0 ขอบเขต: Python C-modules ใน modules/ และไลบรารี Python ใน scripts/libraries/

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

  • major — สคริปต์ส่วนใหญ่ที่ใช้งานจำเป็นต้องแก้ไข

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

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

  • tooling — ส่งผลกระทบเฉพาะการ flash / host tools / การรองรับบอร์ด

การเปลี่ยนแปลงถูกจัดกลุ่มตามระดับผลกระทบตามลำดับนั้น หากต้องการพอร์ตโค้ดโดยเร็ว ให้ข้ามไปยัง รายการตรวจสอบการย้ายระบบ ที่ท้าย hash ของ commit แต่ละรายการเชื่อมโยงไปยัง diff บน GitHub หมายเหตุ: การเปลี่ยนชื่อโมดูล sensorcsi ในการเผยแพร่นี้ ไม่ ทำให้เกิดปัญหา — sensor ยังคงทำงานได้เป็นนามแฝง

ช่วงค่า alpha ในการวาดขณะนี้คือ 0–255 (major)

อาร์กิวเมนต์ alpha ของ draw_image() และการซ้อนทับทุกรายการที่รับค่านั้น (FIR, ToF, display, TV, MJPEG, alpha tables) ขณะนี้ใช้ช่วง 0–255 แทน 0–256 สคริปต์ที่ส่งค่า 256 สำหรับทึบแสงอย่างสมบูรณ์ หรือคำนวณ alpha เทียบกับ 256 จะต้องปรับสเกลให้อยู่ในช่วง 0–255

Commit: 1f87b5bb6

ค่าคงที่ FLIR Lepton ioctl ถูกเปลี่ยนชื่อ (minor)

ค่าคงที่ Lepton ioctl สามรายการถูกย่อให้สั้นลง: IOCTL_LEPTON_SET_MEASUREMENT_MODEIOCTL_LEPTON_SET_MODE, IOCTL_LEPTON_SET_MEASUREMENT_RANGEIOCTL_LEPTON_SET_RANGE, IOCTL_LEPTON_GET_FPA_TEMPERATUREIOCTL_LEPTON_GET_FPA_TEMP ตัวอย่างที่รวมมาได้รับการอัปเดตแล้ว

Commit: 12582d54d

การเปลี่ยนแปลง API การประมวลผลหลัง ML (minor)

ml.postprocessing เป็นโมดูลใหม่ในการเผยแพร่นี้และ API ของมันเปลี่ยนแปลงระหว่างการพัฒนา: คีย์เวิร์ดตัวสร้าง yolo_v2_postprocess ชื่อ score_threshold ถูกเปลี่ยนชื่อเป็น threshold และผลลัพธ์การประมวลผลหลังที่ว่างเปล่าขณะนี้คืนค่า () แทน [] โมเดลที่รวมมาชื่อ yolov5_rgb_person ถูกเปลี่ยนชื่อเป็น yolo_v5_224_nano และ ml.apps.MicroSpeech ขณะนี้ส่งต่อ **kwargs ใดก็ได้ไปยัง audio.init() แทนที่จะกำหนด gain_db=24 ตายตัว

Commits: d67bd1ad7, 979b4e8ee, b89b815b2, 6671d9df5, 5c2f4388c

AGAST เป็นตัวตรวจจับมุมเริ่มต้น (behavior)

find_keypoints() ขณะนี้ใช้ AGAST แทน FAST เป็นตัวตรวจจับมุมเริ่มต้นบนบอร์ดทุกรุ่น ชุดจุดสำคัญ (และการจับคู่ตัวบ่งชี้ลักษณะ) จึงแตกต่างจากการเผยแพร่ก่อนหน้า — ตรวจสอบ pipeline จุดสำคัญที่ปรับแต่งไว้อีกครั้ง การสตรีม frame buffer ของ IDE ยังถูกจำกัดไว้ที่ 20 Hz เพื่อลดภาระ USB

Commits: da6bf6910, bc4e39246

บูตโหลดเดอร์, บอร์ดและฟีเจอร์ที่ถูกลบออก (tooling)

บูตโหลดเดอร์ CDC รุ่นเก่าถูกแทนที่ด้วยบูตโหลดเดอร์ standard DFU แบบใหม่ที่ใช้ TinyUSB บนบอร์ดทุกรุ่น — กลไกการอัปเดตเฟิร์มแวร์เปลี่ยนไป; อัปเดต workflow/tooling การ flash ของคุณตามนั้น บอร์ด OpenMV Pro, บิลด์ Raspberry Pi Pico แบบแยกเดี่ยว และฟีเจอร์ WiFi-debug (wifidbg) สำหรับ remote-IDE ถูกลบออก

Commits: a03fc90d8, c2e616aae, af3ea774b, f8bca9799, 59a38a0d3, 7edeb4fbe, d58d77fa2

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

สำหรับการพอร์ตที่ราบรื่นไปยัง v4.6.0 งานทั่วไปที่ต้องทำ ได้แก่:

  1. ปรับสเกลค่า alpha ของการวาด/การซ้อนทับทุกค่าจากช่วง 0–256 เป็น 0–255 (การเปลี่ยนแปลงช่วง alpha)

  2. เปลี่ยนชื่อค่าคงที่ FLIR Lepton ioctl เป็นรูปแบบที่สั้นลง (การเปลี่ยนชื่อ Lepton ioctl)

  3. หากคุณใช้ตัวประมวลผลหลัง ML ใหม่ ให้เปลี่ยน score_threshold เป็น threshold, จัดการผลลัพธ์ว่างเปล่า () และอัปเดตชื่อโมเดล yolo_v5_224_nano (การเปลี่ยนแปลง ML)

  4. ตรวจสอบ pipeline ที่ใช้ find_keypoints() สำหรับการเปลี่ยนตัวตรวจจับเป็น AGAST (การเปลี่ยนแปลงตัวตรวจจับมุม)

  5. อัปเดต workflow การ flash เฟิร์มแวร์ของคุณสำหรับบูตโหลดเดอร์ DFU ใหม่ (การเปลี่ยนแปลงบูตโหลดเดอร์/บอร์ด)