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_postprocessMicroPython อัปเดตเป็น 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=)) บน AE3ROMFS — ระบบไฟล์แบบอ่านอย่างเดียว
/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_sigmaGenX320 anti-flicker — ioctl ใหม่
IOCTL_GENX320_SET_AFKสำหรับเปิดใช้งานและกำหนดค่าตัวกรอง anti-flicker ของ event sensor (ความถี่ flicker ต่ำสุด/สูงสุดใน Hz) พร้อมตัวอย่างgenx320_grayscale_set_afk.pyVL53L8CX — รองรับเซนเซอร์ 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
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() ในการเริ่มต้นเซนเซอร์ใหม่ควรได้รับการตรวจสอบ
ข้อจำกัดด้านเวลาและโหมด event ของ GenX320 (behavior)¶
sequence ISSD ใหม่ของ GenX320 เปลี่ยนฐานเวลาของเซนเซอร์: อาร์กิวเมนต์ frame-rate และ exposure ขณะนี้แสดงในหน่วย 1 MHz แทนการปรับสเกลตาม clock และ HSYNC blanking ได้รับการปรับแบบไดนามิกตาม frame rate ที่ร้องขอ สคริปต์ที่กำหนดค่าเวลา GenX320 แบบ hard-code ต้องปรับแต่งใหม่ การจับภาพแบบ event-mode ขณะนี้เกิดข้อผิดพลาดเมื่อเปิดใช้งาน image transpose (ไม่รองรับในการกำหนดค่านั้น)
รายการตรวจสอบการย้ายระบบ¶
สำหรับการพอร์ตที่ราบรื่นไปยัง v4.7.0 งานทั่วไปที่ต้องทำ ได้แก่:
เปลี่ยนการโหลดโมเดลในตัวจากสตริงชื่อเป็น path
/rom/<name>.tfliteและจัดเตรียมป้ายกำกับผ่านไฟล์ sidecar<name>.txt(การเปลี่ยนแปลง ml.Model)อัปเดต
haarcascade_frontalface_default.xmlเป็นhaarcascade_frontalface.xmlและจัดการRuntimeError(ไม่ใช่OSError) เมื่อโหลด cascade ล้มเหลว (การเปลี่ยนแปลง Haar cascade)ลบโค้ดที่พึ่งพา
tof.reset()ในการเริ่มต้นเซนเซอร์ใหม่ (การเปลี่ยนแปลง tof)ปรับแต่งค่า frame-rate / exposure ของ GenX320 ที่กำหนดแบบ hard-code ให้อยู่ในหน่วย 1 MHz และอย่าเปิดใช้งาน transpose ในโหมด event (การเปลี่ยนแปลง GenX320)