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裝飾器、Endpoint/EndpointIO)。ROMFS — 一個唯讀的
/rom檔案系統,內含內建的 TFLite 模型與 Haar 級聯,並提供一個全新的tools/mkromfs.py主機端建構工具。VL53L8CX 8x8 多區飛行時間感測器支援。
新的 ML 後處理器 —
yolo_v8_postprocess與yolo_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 模型的全新模組:Endpoint、EndpointIO、new_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 變體)類別,每個都接受threshold、nms_threshold與nms_sigma。GenX320 抗閃爍 — 一個全新的
IOCTL_GENX320_SET_AFKioctl,用於啟用並設定事件感測器的抗閃爍濾波器(最小/最大閃爍頻率,單位為 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 路徑。
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() 重新初始化感測器的程式碼應重新檢查。
GenX320 計時與事件模式限制 (behavior)¶
全新的 GenX320 ISSD 序列變更了感測器的時間基準:影格率與曝光引數現在以 1 MHz 為單位表示,而非依時脈縮放,且 HSYNC 消隱會依要求的影格率動態調整。硬編碼 GenX320 計時值的指令碼必須重新調校。事件模式擷取現在會在啟用影像轉置(transpose)時引發錯誤(該設定下不支援此功能)。
移植檢查清單¶
若要乾淨地移植到 v4.7.0,典型的工作如下:
將內建模型的載入從名稱字串改為
/rom/<name>.tflite路徑,並透過附屬的<name>.txt檔案提供標籤(ml.Model 變更)。將
haarcascade_frontalface_default.xml更新為haarcascade_frontalface.xml,並在級聯載入失敗時捕捉RuntimeError(而非OSError)(Haar 級聯變更)。移除依賴
tof.reset()重新初始化感測器的程式碼(tof 變更)。將任何硬編碼的 GenX320 影格率/曝光值重新調校為 1 MHz 單位,且在事件模式中不要啟用轉置(transpose)(GenX320 變更)。