v4.8.0¶
v4.8.0 是一個重大功能釋出版本。重點包括:全新的基於類別的 csi 相機模組,支援多相機;搭載 Neural-ART NPU 的 OpenMV N6(STM32N6)開發板;NPU 推論後端;GenX320 事件相機 RAW 事件模式;全新的 crc 模組;重新整理過的 ML 後處理函式庫;以及 MicroPython 1.26。本版本也移除了一些舊版 API——buzzer 模組和 fir 模組的 FLIR Lepton 控制功能——因此請閱讀下方的破壞性變更。
重點摘要¶
全新
csi相機模組。 基於類別的csi.CSIAPI,支援多台相機同時運作,與舊版sensor模組並存推出。OpenMV N6。 STM32N6 開發板,搭載 Neural-ART NPU、三重緩衝、Soft-CSI 以及 ToF 模組。
NPU 推論。 用於硬體加速模型推論的 ST Neural-ART(STAI)後端。
GenX320 事件模式。 RAW 事件輸出,加上用於事件相機渲染的
draw_event_histogram()。重新整理過的 ML 後處理——廠商子套件(
ml.postprocessing.ultralytics、mediapipe、edgeimpulse、darknet),加上全新的 BlazeFace / BlazePalm / 手部及臉部關鍵點偵測器。全新
crc模組——硬體加速的 CRC-16 / CRC-32。MicroPython 更新至 1.26.0。
破壞性變更:
buzzer模組與fir模組的 Lepton 控制功能已移除(Lepton 現在是一般相機)。請參閱 fir/Lepton 變更 與 buzzer 移除說明。
新功能¶
全新的
csi相機模組——基於類別的csi.CSI物件,支援多台相機同時運作(N6 上最多三台)、非阻塞快照、自訂(w, h)影格大小,以及資訊豐富的print()/ repr。它與舊版sensor模組並存推出(並非直接替代品)。crc——crc.crc16()與crc.crc32(),在 OpenMV N6 與 AE3 上提供硬體加速並附帶軟體備援。image.Image.draw_image()新增了transform=關鍵字(一個用於仿射/透視扭曲的 2 維浮點ndarray矩陣,在 STM32 與 Alif 上以 GPU 加速);相同的轉換也可用於影像轉換。draw_event_histogram()——渲染事件相機直方圖。GenX320 RAW 事件模式——
csi.IOCTL_GENX320_SET_MODE搭配csi.GENX320_MODE_HISTO/csi.GENX320_MODE_EVENT、csi.IOCTL_GENX320_READ_EVENTS、csi.IOCTL_GENX320_CALIBRATE、事件類型常數,以及新的範例指令碼。ML——一個 ST Neural-ART(STAI)NPU 推論後端;
ml.Model新增了postprocess=關鍵字(後處理器現在會在predict()內自動執行,即使沒有提供回呼函式);ml.postprocessing重新整理為廠商子套件——ml.postprocessing.ultralytics(YoloV5、YoloV8)、ml.postprocessing.darknet(YoloV2、YoloLC)、ml.postprocessing.edgeimpulse(Fomo),以及ml.postprocessing.mediapipe(BlazeFace、BlazePalm、HandLandmarks、FaceLandmarks)——舊的 snake_case 名稱仍保留為別名;新增了ml.utils.draw_keypoints()與ml.utils.draw_skeleton();隨附的 ROMFS 模型也增加了(BlazeFace、YOLO-LC、YOLOv8n、手掌/手部/臉部關鍵點)。audio——STM32N6 上的 MDF 數位麥克風輸入。顯示——SSD1351 OLED 驅動程式與範例;
SPIDisplay控制器可覆寫其初始化命令;SPI 顯示器建構子新增了hmirror/vflip關鍵字。裝置端分析器——SysTick + Armv8.1-M PMU 週期/事件計數器,具備函式層級的儀器化,可透過除錯連結讀取(
pyopenmv新增了分析與 ELF 符號支援)。新感測器支援——PixArt PS5520;OpenMV H7 Plus 上的 FLIR BOSON;GenX320 自動偵測。
其他變更與改進¶
MicroPython 更新至 1.26.0。
相機啟動——感測器時脈已與 CSI 狀態解耦,開機時的相機偵測更快(會先嘗試最常見的設定),且 OpenMV 3 OV7725 的預設時脈已修正。
影像品質——軟體 ISP 伽瑪校正(Alif 與 STM32)與壞點校正(STM32)預設啟用;PAG7936 與 PS5520 感測器新增了自動白平衡控制。
效能——
image.Image.to_ndarray()以 Helium SIMD 加速,且 FOMO 後處理器已使用 ulab 向量化。FLIR Lepton 驅動程式重寫,可在背景非同步接收影格——旋轉/
transpose現在可運作、繪製時以雙線性方式放大、重置也更快。擷取吞吐量——i.MX RT1062 CSI 現在使用完整的 DMA 卸載,且 STM32 N6 具備硬體 GPU 的
draw_image()。
錯誤修正¶
相機與感測器:
修正了 STM32 感測器、OpenMV H7 / H7 Plus 上的 PAJ6100、OpenMV 2 QVGA RGB565,以及 N6 CSI mono / RGB-YUV 設定中的 RGB565 / GRAYSCALE / BAYER / YUV422 模式;軟體測試相機現在會以確定性的方式重置。
自動白平衡在低或變動影格率下不再使影像偏綠(以 250 毫秒移動平均取代每 100 影格取樣一次),且 PS5520 的亮度閃爍問題已修正。
影像處理:
修正了一個畫線渲染瑕疵;
image.Image.flush()現在會清空其所呼叫影像的 JPEG 緩衝區;Normalization現在會對浮點輸入套用平均值/標準差;從檔案載入影像的配置問題已修正。
相機擷取:
修正了非 JPEG 傳輸時嚴重的影像損毀問題(影格中斷現在僅在 JPEG 模式下啟用)、JPEG 模式 3 支援,以及 STM32 上的 DMA 行大小與小緩衝區鎖死問題;VOSPI / Lepton 同步更為可靠,尤其在 N6 上。
其他:
omv.board_id()在 RT1060 上會回傳正確的 UID;YoloV2在未提供明確 anchors 而建構時不再當機。
硬體與開發板支援¶
破壞性 API 變更¶
v4.7.0 與 v4.8.0 之間使用者可見的 API 破壞性變更。範圍:modules/ 中的 Python C 模組與 scripts/libraries/ 中的 Python 函式庫。
每項變更都標記了其影響程度:
major——大多數使用到它的指令碼都需要修改。
minor——窄範圍 API;僅影響使用到它的指令碼。
behavior——相同 API,不同結果;請重新檢查調校過的指令碼。
tooling——僅影響主機工具/從原始碼建置。
變更依影響程度按該順序分組——先是 major,接著 minor、behavior 與 tooling。如果你只想移植你的程式碼,可直接跳到結尾的 移植檢查清單,那裡有精簡的待辦清單。每個提交雜湊都連結至其在 GitHub 上的 diff。
FLIR Lepton 移出 fir 模組 (major)¶
FLIR Lepton 現在以一般相機感測器來驅動,而非透過 fir 模組。Lepton 控制功能已從 fir 移除:FIR_LEPTON 類型,以及 radiometric()、register_vsync_cb()、register_frame_cb()、get_frame_available() 與 trigger_ffc() 方法都已消失。請像擷取任何其他相機一樣擷取 Lepton(它在 OpenMV Pure Thermal 上顯示為次要感測器);Pure Thermal 範例已改寫為新 API。非 Lepton 的 fir 感測器(Grid-EYE、MLX、AMG8833)維持不變。
buzzer 模組已移除 (minor)¶
buzzer 模組已從 STM32 與 i.MX RT 移植版本中移除。請改用 machine.PWM 來驅動蜂鳴器;本版本新增了一個使用 PWM 的 Pure Thermal 蜂鳴器範例。
omv.disable_fb() 已移除 (minor)¶
omv.disable_fb() 函式已移除;影格緩衝區串流現在透過相機 API 控制。依賴它的舊版 RPC 桌面指令碼也一併移除。
csi 是新模組——其 API 尚未凍結 (minor)¶
csi 模組在 v4.8.0 中推出,其 API 在釋出過程中有所演進:csi.fb() 已移除,且 csi.CSI.snapshot() 的 (image=...) 現在需要一個可變影像,並會將擷取到的影格繪製/縮放到其中,而非進行原始的深層複製。新模組的早期採用者應重新測試;舊版 sensor API 不受影響。
image.ImageIO 串流模式與 close() (minor)¶
image.ImageIO——mode 引數現在僅接受小寫的 'r' / 'w'(大寫會被拒絕並顯示更新後的錯誤訊息),且以 'w' 開啟時一律會截斷/重新建立檔案,而非保留現有串流。ImageIO.close() 現在是冪等的(關閉已關閉的串流不再引發例外),並回傳 None 而非串流物件。
BlazeFace / BlazePalm 回傳值 (minor)¶
BlazeFace 與 BlazePalm 後處理器(本版本新增)現在回傳單一邊界框清單,而非完整的逐類別清單——呼叫端直接對結果進行索引,而非使用 [0]。
提交: 75e16b573
ML 後處理器回呼函式接收原始張量 (behavior)¶
ml.Model 的 predict() 後處理回呼函式現在會接收原始(量化)的輸出張量參考,而非預先轉換的浮點 ndarray——這可避免大型模型上的記憶體耗盡。如果未提供回呼函式,仍會回傳浮點 ndarray。自訂回呼函式必須自行反量化張量(內建的後處理器已會這麼做)。
提交: 84e6ee650
相機時脈與 CSI 狀態解耦 (behavior)¶
感測器時脈現在獨立於 CSI 狀態。set_clock / set_frequency 僅在所請求的頻率差異超過容許值時才會重新設定時脈,且 get_clk_frequency 接受一個布林值以回傳精確(而非標稱)頻率。OpenMV N6 與 AE3 上的預設時脈為 24 MHz,因此開機時不需要明確的 set_clock()。為了時序敏感的擷取而切換時脈的指令碼,應重新檢查其假設。
USB 除錯協定與韌體目標 (tooling)¶
這些都不影響 MicroPython 指令碼。過時的 USBDBG 命令(SCRIPT_SAVE、TEMPLATE_SAVE、DESCRIPTOR_SAVE、ATTR_READ、ATTR_WRITE、TX_INPUT、SET_TIME)已移除,且來自較舊 IDE 的不支援命令現在會被清除,而非在連線時讓 TinyUSB 開發板當機;舊版 STM32 UVC 韌體目標已移除。舊的主機工具應更新;詳情請參閱 韌體儲存庫 的歷史記錄。
移植檢查清單¶
若要乾淨地移植到 v4.8.0,典型的工作如下:
如果你透過
fir使用 FLIR Lepton,請改為將它當作相機感測器來擷取(fir/Lepton 變更)。將任何
buzzer的使用替換為machine.PWM(buzzer 移除說明)。移除
omv.disable_fb()呼叫(omv.disable_fb() 移除說明)。對於
image.ImageIO:使用小寫的'r'/'w',並預期'w'會截斷檔案(ImageIO 變更)。對於自訂的 ML 後處理回呼函式:自行反量化原始張量參考,或依賴預設的浮點路徑(回呼函式變更)。
重新檢查任何為了時序敏感擷取而驅動感測器時脈的指令碼(時脈變更)。