v4.7.0

v4.7.0 เป็นการเผยแพร่ฟีเจอร์หลัก สิ่งที่โดดเด่น ได้แก่ บอร์ด OpenMV AE3 ใหม่ (Alif Ensemble, Cortex-M55 + Ethos-U55 NPU) พร้อมโมเดลการเขียนโปรแกรมแบบ dual-core ผ่าน openamp, ระบบไฟล์แบบอ่านอย่างเดียว ROMFS (/rom) ที่มีโมเดลและ cascade ในตัว, รองรับ VL53L8CX 8x8 time-of-flight, ตัวประมวลผลหลัง YOLOv8 / YOLO-LC ใหม่ และ MicroPython 1.25 นอกจากนี้ยังเปลี่ยนวิธีโหลดโมเดลในตัวและ Haar cascade ดังนั้นโปรดอ่านการเปลี่ยนแปลงที่อาจทำให้เกิดปัญหาด้านล่าง

ไฮไลต์

  • บอร์ด OpenMV AE3 — บอร์ด Alif Ensemble (Cortex-M55 + Ethos-U55 NPU) พร้อมพอร์ตครบสมบูรณ์, บูตโหลดเดอร์ และ ROMFS

  • โมดูล openamp แบบ dual-core — แบ่งงานไปยังแกน Alif ที่สองผ่าน RPMsg (decorator @async_remote, Endpoint/ EndpointIO)

  • ROMFS — ระบบไฟล์แบบอ่านอย่างเดียว /rom ที่มีโมเดล TFLite และ Haar cascade ในตัว พร้อมเครื่องมือสร้างฝั่ง host ใหม่ tools/mkromfs.py

  • รองรับเซนเซอร์ time-of-flight หลายโซน 8x8 VL53L8CX

  • ตัวประมวลผลหลัง ML ใหม่yolo_v8_postprocess และ yolo_lc_postprocess

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

  • Breaking: โมเดลในตัวและ Haar cascade ขณะนี้โหลดจาก /rom ตาม path (ดู การเปลี่ยนแปลง ml.Model และ การเปลี่ยนแปลง Haar cascade)

ฟีเจอร์ใหม่

  • OpenMV AE3 — บอร์ด Alif Ensemble ใหม่ (application core Cortex-M55 + Ethos-U55 NPU) พร้อมพอร์ต, บูตโหลดเดอร์, การกำหนดค่าบอร์ด, RGB LED และการรองรับ ROMFS

  • openamp — โมดูลใหม่สำหรับ RPC model แบบ dual-core ของ Alif (Open-AMP / RPMsg): Endpoint, EndpointIO, new_service_callback และ decorator @async_remote สำหรับแบ่งงานฟังก์ชันแบบ marshal ไปยังแกนที่สอง แกน HE/HP มาพร้อมตัวรัน task _boot.py แบบ asyncio เริ่มต้น

  • audio — พอร์ต Alif เพิ่มโมดูล audio (PDM microphone) พร้อม API สตรีมมิ่งแบบ callback (audio.init(channels=, frequency=, gain_db=, buffers=, samples=, overflow=, highpass=)) บน AE3

  • ROMFS — ระบบไฟล์แบบอ่านอย่างเดียว /rom ที่มี asset ในตัว (โมเดล TFLite, Haar cascade, ...) บรรจุตามบอร์ด, เครื่องมือ host ใหม่ tools/mkromfs.py (tflite, tflite+vela, Haar cascade, text, binary) และตัวช่วย scripts/libraries/romfs.py ที่เปิดเผย ls_romfs()

  • การประมวลผลหลัง ML — คลาสใหม่ yolo_v8_postprocess (YOLOv8) และ yolo_lc_postprocess (tiny-YOLOv2 แบบน้ำหนักเบาพร้อม anchor เริ่มต้นที่ปรับแต่งสำหรับ embedded) แต่ละคลาสรับ threshold, nms_threshold และ nms_sigma

  • GenX320 anti-flicker — ioctl ใหม่ IOCTL_GENX320_SET_AFK สำหรับเปิดใช้งานและกำหนดค่าตัวกรอง anti-flicker ของ event sensor (ความถี่ flicker ต่ำสุด/สูงสุดใน Hz) พร้อมตัวอย่าง genx320_grayscale_set_afk.py

  • VL53L8CX — รองรับเซนเซอร์ time-of-flight หลายโซน 8x8 ผ่านโมดูล tof (ตรวจจับอัตโนมัติ, 8x8 ที่ 15 Hz)

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

  • MicroPython อัปเดตเป็น 1.25.0 (พอร์ต STM32 และ i.MX RT) พร้อมพอร์ต Alif upstream ที่เพิ่มเข้ามาและ legacy BT-HCI driver ที่ถูกลบออกจากพอร์ต STM32 / i.MX RT

  • GenX320 — sequence ISSD ใหม่เพิ่มความเร็ว pixel clock ภายในเป็นสองเท่า (24 → 48 MHz) สำหรับ frame rate ที่สูงขึ้น

  • STM32N6 / ST Edge AI — การวางรากฐานสำหรับการ deploy โมเดล STM32N6 Neural-ART (ST Edge AI tooling และการรองรับ ROMFS)

  • PAG7936 — ขณะนี้มีการตั้งค่า bitrate ของ CSI PHY เพื่อปรับปรุงการทำงานของเซนเซอร์นั้น

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

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

  • แก้ไข IMU ผ่าน I2C — บอร์ดที่เชื่อมต่อ LSM6DSx IMU บน I2C ขณะนี้เริ่มต้นและอ่านข้อมูลได้ถูกต้อง (เส้นทาง I2C เดิมใช้เส้นทางอ่านที่เสียหายและค่าคงที่ที่ผิด)

  • ขณะนี้ FLIR Boson init ลองซ้ำสูงสุด 10 ครั้งสำหรับเซนเซอร์รุ่นเก่า (< IDD 4.x) ที่ใช้เวลาบูตประมาณ 10 วินาที และการตั้งค่าเริ่มต้นจากโรงงานจะถูกกู้คืนเมื่อรีเซ็ตเพื่อป้องกันการตั้งค่าที่โหลดจากภายนอกทำให้การแสดงผลวิดีโอเสียหาย

  • แก้ไข GenX320 psee_ehc_activate_override ที่เขียนค่าการสะสมเวลาผิด (เป็นศูนย์)

  • บนบอร์ด STM32 ที่ไม่มีฮาร์ดแวร์ FastMode+ การร้องขอ I2C fast mode ขณะนี้ได้รับการป้องกันอย่างถูกต้องแทนที่จะกำหนดค่า bus อย่างเงียบ ๆ ผิดพลาด

Machine learning:

  • แก้ไขการรวบรวมกรอบล้อมรอบและการจัดการ np.nonzero ในตัวประมวลผลหลัง YOLOv2 / YOLOv5 เพื่อปรับปรุงความน่าเชื่อถือของการตรวจจับ

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

  • OpenMV AE3 — บอร์ด Alif Ensemble ใหม่ (Cortex-M55 + Ethos-U55 NPU)

  • VL53L8CX — เซนเซอร์ time-of-flight หลายโซน 8x8; เซนเซอร์ ToF ของ AE3 ถูกเปลี่ยนจาก VL53L5CX เป็น VL53L8CX

  • STM32N6 — การวางรากฐานการ deploy โมเดล ST Edge AI (Neural-ART)

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

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

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

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

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

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

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

โมเดลในตัวโหลดด้วย path ไม่ใช่ชื่อ (major)

ml.Model ไม่โหลดโมเดลในตัวจากสตริงชื่อเปล่าอีกต่อไป ขณะนี้โมเดลถูกโหลดจากระบบไฟล์ / ROMFS ด้วย path:

model = ml.Model("/rom/person_detect.tflite")   # was: ml.Model("person_detect")

attribute model.labels ฝั่ง C ถูกลบออก; ป้ายกำกับขณะนี้ถูกโหลดโดย wrapper Python ml.Model จากไฟล์ sidecar <model>.txt (คืนค่า None ถ้าไม่มี) ตัวอย่างที่รวมมาทั้งหมดและ ml/apps.py ได้รับการอัปเดตให้ใช้ path /rom/*.tflite

Commits: 978fa436c, 3f55d956c, 416bc4613

Haar cascade โหลดจาก ROMFS (minor)

image.HaarCascade() ขณะนี้โหลด cascade ในตัวผ่าน VFS / ROMFS ไฟล์ cascade สำหรับใบหน้าด้านหน้าเริ่มต้นถูกเปลี่ยนชื่อจาก haarcascade_frontalface_default.xml เป็น haarcascade_frontalface.xml และการโหลดล้มเหลวขณะนี้เกิด RuntimeError ("Failed to load Haar cascade") แทน OSError

Commit: 9de1220d8

ความหมายของ tof.reset() / tof.deinit() (behavior)

ในโมดูล tof, reset() เดิมเป็นนามแฝงของ init() และไม่มี deinit จริง ขณะนี้ tof.reset() ทำการรีเซ็ตเซนเซอร์จริง ๆ และ tof.deinit() ปิดเซนเซอร์อย่างถูกต้อง (พร้อมรองรับการปิด VL53L5CX) โค้ดที่พึ่งพา reset() ในการเริ่มต้นเซนเซอร์ใหม่ควรได้รับการตรวจสอบ

Commits: 20d6b53f8, c743cab6a

ข้อจำกัดด้านเวลาและโหมด event ของ GenX320 (behavior)

sequence ISSD ใหม่ของ GenX320 เปลี่ยนฐานเวลาของเซนเซอร์: อาร์กิวเมนต์ frame-rate และ exposure ขณะนี้แสดงในหน่วย 1 MHz แทนการปรับสเกลตาม clock และ HSYNC blanking ได้รับการปรับแบบไดนามิกตาม frame rate ที่ร้องขอ สคริปต์ที่กำหนดค่าเวลา GenX320 แบบ hard-code ต้องปรับแต่งใหม่ การจับภาพแบบ event-mode ขณะนี้เกิดข้อผิดพลาดเมื่อเปิดใช้งาน image transpose (ไม่รองรับในการกำหนดค่านั้น)

Commits: 660a783d6, 7a718c6af

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

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

  1. เปลี่ยนการโหลดโมเดลในตัวจากสตริงชื่อเป็น path /rom/<name>.tflite และจัดเตรียมป้ายกำกับผ่านไฟล์ sidecar <name>.txt (การเปลี่ยนแปลง ml.Model)

  2. อัปเดต haarcascade_frontalface_default.xml เป็น haarcascade_frontalface.xml และจัดการ RuntimeError (ไม่ใช่ OSError) เมื่อโหลด cascade ล้มเหลว (การเปลี่ยนแปลง Haar cascade)

  3. ลบโค้ดที่พึ่งพา tof.reset() ในการเริ่มต้นเซนเซอร์ใหม่ (การเปลี่ยนแปลง tof)

  4. ปรับแต่งค่า frame-rate / exposure ของ GenX320 ที่กำหนดแบบ hard-code ให้อยู่ในหน่วย 1 MHz และอย่าเปิดใช้งาน transpose ในโหมด event (การเปลี่ยนแปลง GenX320)