v3.9.0

v3.9.0 是一次重大發行。它新增了 nRF 移植版,支援 Arduino Nano 33 BLE Sense(相機、PDM audio 模組、ulab、凍結的感測器驅動程式),帶來 FLIR Lepton 以及 MLX90641 / MLX90621 熱感測器與大幅重構的 fir 模組、OV5640 自動對焦 ioctl,以及全新的 image.ImageIO 串流型別。舊版 CMSIS-NN nn 模組與舊的 ImageReaderImageWriter 類別已被移除 — 請閱讀下方的破壞性變更。

重點摘要

  • Arduino Nano 33 BLE Sense — 全新 nRF52840 移植版,具備相機、PDM audio 模組、ulab 與凍結的感測器驅動程式。

  • 熱感測 — 支援 FLIR Lepton、MLX90641 與 MLX90621,並重構 fir 模組(調色盤、鏡像、縮放、輻射量測、FFC)。

  • OV5640 自動對焦 — 新增 sensor.IOCTL_*_AUTO_FOCUS ioctl。

  • image.ImageIO — 統一的影像串流型別(記憶體或檔案;read/write/seek/size/close),取代 ImageReaderImageWriter

  • 破壞性變更: CMSIS-NN nn 模組與 image.ImageReaderimage.ImageWriter 已被移除,且 find_lines()fir 的行為有所變更 — 請參閱破壞性變更。

新功能

  • nRF 移植版 / Arduino Nano 33 BLE Sense — 全新的 nRF52840 移植版與開發板支援,具備全新的 audio 模組(audio.init()audio.start_streaming()audio.stop_streaming())、啟用 ulab,以及凍結的 apds9960lps22hlsm9ds1hts221 感測器驅動程式。

  • image.ImageIO — 全新的影像串流型別,透過 read()write()seek()size()close() 同時支援記憶體與檔案串流,並提供 ImageIO 讀取/寫入/記憶體範例。

  • FLIR Lepton — 新增 FIR_LEPTON 支援,含 fir.radiometric()fir.trigger_ffc()fir.register_vsync_cb()

  • 熱感測器 — 新增 MLX90641(FIR_MLX90641)與 MLX90621 熱電堆支援(官方 Melexis 驅動程式)。

  • fir 調色盤 / 方向 — 新增 fir.PALETTE_RAINBOWPALETTE_IRONBOWGRAYSCALERGB565 常數,且 fir.read_ir() 現在接受 hmirrorvfliptranspose

  • OV5640 自動對焦 — 新增 sensor.IOCTL_TRIGGER_AUTO_FOCUSIOCTL_PAUSE_AUTO_FOCUSIOCTL_RESET_AUTO_FOCUSIOCTL_WAIT_ON_AUTO_FOCUS(OpenMV 2/3/4/4 Plus/PT/Portenta)。

  • 將 Arduino 範例重新整理為依開發板分類的目錄。

其他變更與改進

  • 改用壓縮的 MicroPython 錯誤訊息(較短的例外字串);fir.init()type 引數在省略時現在會透過 I2C 匯流排掃描自動偵測;xalloc 例外現在會回報所請求的位元組數;Portenta 上啟用了 UART 8;FIR 範例已整併為 thermal_camera.pythermal_overlay.pythermal_overlay_lcd.py。為了容納於 flash 中,OpenMV 4 建置上停用了 image.get_similarity() 與選擇性搜尋,且影像函式庫現在可在無檔案系統的情況下建置(適用於無檔案系統的開發板)。

錯誤修正

相機與感測器:

  • 修正 OV5640 PCLK 計算、新增遺漏的 I2C IRQ 處理常式(修正 I2C 傳輸卡死)、為提升可靠性重構 cambus I2C 讀/寫、使 Lepton I2C 匯流排可選擇、將 cambus 匯流排復原接腳移至各開發板設定、在失敗前先重試 cambus 掃描一次,並使 OpenMV PT(Lepton + 相機共用 I2C)正常運作。

熱感測:

  • 修正 fir get_ir()draw_ir()image.get_similarity() 中的最大值計算(FLT_MIN-FLT_MAX)、AMG8833 12→16 位元處理,以及 MLX90621 準確度(官方 Melexis 驅動程式)。

顯示、音訊與系統:

  • 將 STM32 SPI LCD 傳輸移至 HAL SPI 回呼函式(顯示可靠性)、修正 Nano 33 audio.init()(HF 振盪器 + PDM 比率,使麥克風正常運作)、修正新 HAL 下的 H7 計時器狀態、nRF gc_collect 與早期開發板初始化/解除初始化,並停止在 find_apriltags()find_rects() 期間印出多餘的「uh oh, no preference for overlapping detection」訊息。

硬體與開發板支援

  • Arduino Nano 33 BLE Sense — 全新 nRF52840 開發板(相機、PDM 音訊、ulab、凍結的感測器驅動程式)。

  • FLIR LeptonMLX90641MLX90621 熱感測器。

  • OV5640 自動對焦 — OpenMV 2/3/4/4 Plus/PT/Portenta。

  • Portenta — 啟用 UART 8。

破壞性 API 變更

v3.8.0 與 v3.9.0 之間使用者可見的 API 變更。範圍:modules/ 中的 Python C 模組與 scripts/libraries/ 中的 Python 函式庫。

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

  • major — 影響大多數使用該功能的指令碼;您將需要移植程式碼。

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

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

變更依影響程度依此順序分組。若您只想移植程式碼,可直接跳至文末的 移植檢查清單。每個 commit 雜湊值都連結至其在 GitHub 上的 diff。

CMSIS-NN nn 模組已移除 (major)

CMSIS-NN nn 模組已被移除,包括 nn.load()net.forward()net.search()nn_class 輔助類別。模型推論改用 TensorFlow Lite(tf)模組。原本以 nn 載入 .network 模型的指令碼必須移植為使用 tf 搭配 TensorFlow Lite 模型。

Commits: fbc767b36

ImageReaderImageWriterimage.ImageIO 取代 (major)

image.ImageReaderimage.ImageWriter 及其 next_frame()add_frame() 方法已被移除,並由全新的 image.ImageIO 型別取代,後者透過 read()write()seek()size()close() 同時支援記憶體與檔案串流。使用舊版 reader/writer 類別的程式碼必須移植為 image.ImageIO(請參閱更名後的 imageio_read.pyimageio_write.py 範例)。

Commits: 783a78754

fir.draw_ir()scale 關鍵字已移除 (minor)

fir.draw_ir() 已在全新的影像繪製流程之上重寫。scale=(min, max) 關鍵字已被移除,並新增了 hintx_scaley_scaleroi 與位置式 x/y 位移引數。原本將 scale=(min, max) 傳給 fir.draw_ir() 的指令碼必須移除它並改用新引數。

Commits: 0a29103b1

find_lines() 近似運算 (behavior)

image.find_lines() 現在以 (abs(gx) + abs(gy)) / 2 來近似梯度量值,並跳過低於 126 的量值。這較快,但會改變偵測到的線段集合與累加器值,因此請重新檢查並重新調校 thresholdtheta_marginrho_margin

Commits: 902ae3c98

fir.snapshot() 重構 (behavior)

fir.snapshot() 已大幅重構,採用全新的關鍵字 API(hmirrorvfliptransposex_scaley_scalex_sizey_sizescalergb_channelalphacolor_palettehintpixformatcopy_to_fb),且內建範例也已重寫。先前僅支援位置式/pixformat 的行為已變更;請將 FIR 指令碼移植為新的關鍵字形式(請參閱更新後的 thermopile-shield 範例)。

Commits: 53f2248b8

fir.init() 在失敗時拋出例外 (behavior)

fir.init() 現在在未偵測到熱感測器時會拋出例外(並乾淨地解除初始化),而非默默繼續。在您先前依賴它不拋出例外之處,請以 tryexcept 包裹 fir.init()(或確保感測器已連接)。

Commits: 4b2f972f3

移植檢查清單

要乾淨地移植至 v3.9.0,通常需進行的工作有:

  1. 將 CMSIS-NN nn 模型推論移植至 TensorFlow Lite tf 模組(nn 移除)。

  2. image.ImageReaderimage.ImageWriter 替換為 image.ImageIOImageIO 變更)。

  3. fir.draw_ir() 移除 scale=(min, max) 關鍵字並改用新引數(draw_ir 變更)。

  4. 針對近似量值度量重新調校 find_lines() 參數(find_lines 變更)。

  5. 將 FIR 指令碼移植為新的 fir.snapshot() 關鍵字 API(fir.snapshot 變更),並處理 fir.init() 在感測器遺失時拋出例外的情況(fir.init 變更)。

所有其他指令碼皆可不經修改執行。