v4.7.0

v4.7.0 是一個重大功能版本。重點包括:全新的 OpenMV AE3(Alif Ensemble,Cortex-M55 + Ethos-U55 NPU)板,採用雙核心 openamp 程式設計模型;一個唯讀的 ROMFS/rom)檔案系統,內含隨附的模型與級聯(cascade);VL53L8CX 8x8 飛行時間(time-of-flight)支援;全新的 YOLOv8 / YOLO-LC 後處理器;以及 MicroPython 1.25。此版本也變更了內建模型與 Haar 級聯的載入方式,因此請閱讀下方的破壞性變更。

重點摘要

  • OpenMV AE3 板 — Alif Ensemble(Cortex-M55 + Ethos-U55 NPU)板,具備完整的移植、開機載入程式與 ROMFS。

  • 雙核心 openamp 模組 — 透過 RPMsg 將工作卸載至第二顆 Alif 核心(@async_remote 裝飾器、EndpointEndpointIO)。

  • ROMFS — 一個唯讀的 /rom 檔案系統,內含內建的 TFLite 模型與 Haar 級聯,並提供一個全新的 tools/mkromfs.py 主機端建構工具。

  • VL53L8CX 8x8 多區飛行時間感測器支援。

  • 新的 ML 後處理器yolo_v8_postprocessyolo_lc_postprocess

  • MicroPython 更新至 1.25.0。

  • 破壞性變更: 內建模型與 Haar 級聯現在依路徑從 /rom 載入(請見 ml.Model 變更Haar 級聯變更)。

新功能

  • OpenMV AE3 — 全新的 Alif Ensemble 板(Cortex-M55 應用核心 + Ethos-U55 NPU),具備移植、開機載入程式、板子設定、RGB LED 與 ROMFS 支援。

  • openamp — 一個用於 Alif 雙核心(Open-AMP / RPMsg)RPC 模型的全新模組:EndpointEndpointIOnew_service_callback,以及用於將編組後的函式卸載至第二顆核心的 @async_remote 裝飾器。HE/HP 核心隨附一個預設的以 asyncio 為基礎的 _boot.py 任務執行器。

  • audio — Alif 移植在 AE3 上新增了音訊模組(PDM 麥克風),具備以回呼為基礎的串流 API(audio.init(channels=, frequency=, gain_db=, buffers=, samples=, overflow=, highpass=))。

  • ROMFS — 一個唯讀的 /rom 檔案系統,內含依板子封裝的內建資產(TFLite 模型、Haar 級聯……),一個全新的 tools/mkromfs.py 主機端工具(tflite、tflite+vela、Haar 級聯、文字、二進位),以及一個提供 ls_romfs()scripts/libraries/romfs.py 輔助程式。

  • ML 後處理 — 全新的 yolo_v8_postprocess(YOLOv8)與 yolo_lc_postprocess(具備嵌入式最佳化預設錨點的輕量 tiny-YOLOv2 變體)類別,每個都接受 thresholdnms_thresholdnms_sigma

  • GenX320 抗閃爍 — 一個全新的 IOCTL_GENX320_SET_AFK ioctl,用於啟用並設定事件感測器的抗閃爍濾波器(最小/最大閃爍頻率,單位為 Hz),並附帶一個 genx320_grayscale_set_afk.py 範例。

  • VL53L8CX — 透過 tof 模組支援 8x8 多區飛行時間感測器(自動偵測,8x8 於 15 Hz)。

其他變更與改進

  • MicroPython 更新至 1.25.0(STM32 與 i.MX RT 移植),新增了上游的 Alif 移植,並從 STM32 / i.MX RT 移植中移除了舊版 BT-HCI 驅動程式。

  • GenX320 — 一個全新的 ISSD 序列將內部像素時脈加倍(24 → 48 MHz),以達到更高的影格率。

  • STM32N6 / ST Edge AI — STM32N6 Neural-ART 模型部署的基礎建設(ST Edge AI 工具與 ROMFS 支援)。

  • PAG7936 — 現在會設定 CSI PHY 位元率,改善了該感測器的運作。

錯誤修正

相機與感測器:

  • 修正了透過 I2C 的 IMU — 將 LSM6DSx IMU 接在 I2C 上的板子現在能正確初始化與讀取(先前 I2C 路徑使用了有問題的讀取路徑與錯誤的常數)。

  • FLIR Boson 初始化現在會針對需要約 10 秒才能開機的較舊(< IDD 4.x)感測器重試最多 10 次,且重置時會還原原廠預設設定,使外部載入的設定無法破壞視訊輸出。

  • 修正了 GenX320 psee_ehc_activate_override 寫入錯誤(為零)累積時間的問題。

  • 在無 FastMode+ 硬體的 STM32 板子上,要求 I2C 快速模式現在會被正確防護,而不再靜默地錯誤設定匯流排。

機器學習:

  • 修正了 YOLOv2 / YOLOv5 後處理器中的邊界框收集與 np.nonzero 處理,改善了偵測的可靠性。

硬體與板子支援

  • OpenMV AE3 — 全新的 Alif Ensemble(Cortex-M55 + Ethos-U55 NPU)板。

  • VL53L8CX — 8x8 多區飛行時間感測器;AE3 的 ToF 感測器已從 VL53L5CX 切換為 VL53L8CX。

  • STM32N6 — ST Edge AI(Neural-ART)模型部署的基礎建設。

破壞性 API 變更

v4.6.20 與 v4.7.0 之間使用者可見的 API 破壞性變更。範圍:modules/ 中的 Python C 模組與 scripts/libraries/ 中的 Python 程式庫。

每項變更都標註了其影響程度:

  • major — 大多數使用到它的指令碼都需要修改。

  • minor — 範圍狹窄的 API;只影響使用到它的指令碼。

  • behavior — 相同的 API,但結果不同;請重新檢查已調校的指令碼。

變更會依該順序按影響程度分組。如果你只想移植你的程式碼,請直接跳至最後的 移植檢查清單,以取得精簡的待辦清單。每個 commit 雜湊值都連結至其在 GitHub 上的 diff。

內建模型依路徑載入,而非依名稱 (major)

ml.Model 不再從單純的名稱字串載入內建模型。模型現在依路徑從檔案系統/ROMFS 載入:

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

C 端的 model.labels 屬性已移除;標籤現在由 Python 的 ml.Model 包裝器從附屬的 <model>.txt 檔案載入(若不存在則為 None)。所有隨附的範例與 ml/apps.py 都已更新為 /rom/*.tflite 路徑。

Commits: 978fa436c, 3f55d956c, 416bc4613

Haar 級聯從 ROMFS 載入 (minor)

image.HaarCascade() 現在透過 VFS / ROMFS 載入內建級聯。預設的正面臉部級聯檔案已從 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

GenX320 計時與事件模式限制 (behavior)

全新的 GenX320 ISSD 序列變更了感測器的時間基準:影格率與曝光引數現在以 1 MHz 為單位表示,而非依時脈縮放,且 HSYNC 消隱會依要求的影格率動態調整。硬編碼 GenX320 計時值的指令碼必須重新調校。事件模式擷取現在會在啟用影像轉置(transpose)時引發錯誤(該設定下不支援此功能)。

Commits: 660a783d6, 7a718c6af

移植檢查清單

若要乾淨地移植到 v4.7.0,典型的工作如下:

  1. 將內建模型的載入從名稱字串改為 /rom/<name>.tflite 路徑,並透過附屬的 <name>.txt 檔案提供標籤(ml.Model 變更)。

  2. haarcascade_frontalface_default.xml 更新為 haarcascade_frontalface.xml,並在級聯載入失敗時捕捉 RuntimeError(而非 OSError)(Haar 級聯變更)。

  3. 移除依賴 tof.reset() 重新初始化感測器的程式碼(tof 變更)。

  4. 將任何硬編碼的 GenX320 影格率/曝光值重新調校為 1 MHz 單位,且在事件模式中不要啟用轉置(transpose)(GenX320 變更)。