v4.0.0

v4.0.0 是重大的 v3 → v4 版本。它引入了現代化的多影格 sensor 緩衝 API(雙重/三重緩衝與視訊 FIFO)、影格完成回呼函式、一個含 Portenta 支援的 Bluetooth 模組(NimBLE 堆疊)、初始的 MT9M114 相機驅動程式、MDMA 卸載的相機擷取、image.draw_image() 中的 Bayer/JPEG 支援,並升級至 MicroPython 1.15。舊版的串流模式已被移除,且 sensor.set_windowing() 已重新改寫 — 請閱讀以下的破壞性變更。

重點摘要

  • 多影格緩衝sensor 新增了雙重緩衝、三重緩衝與視訊 FIFO 模式,以獲得更高、更流暢的影格率。

  • 影格完成回呼函式 — 註冊一個在新影格就緒時觸發的回呼函式,用於非阻塞式的擷取流程。

  • Bluetooth — 一個建構於 NimBLE 堆疊上的 bluetooth 模組,在 Arduino Portenta H7 上啟用(並附 BLE 範例)。

  • MT9M114 — 初始的相機感測器驅動程式。

  • 更快的擷取 — 相機資料擷取的 MDMA 卸載;draw_image() 現在可接受 Bayer 與 JPEG 來源/目標。

  • MicroPython 1.15 — 內建的 MicroPython 已從 1.13 更新至 1.15。

  • 破壞性: 舊版的串流模式已被移除,且 sensor.set_windowing() 已重新改寫 — 請參閱破壞性變更。

新功能

  • Sensor 多重緩衝 — 新增了 sensor.set_framebuffers() / sensor.get_framebuffers() 以及 SINGLE_BUFFER / DOUBLE_BUFFER / TRIPLE_BUFFER / VIDEO_FIFO 模式,並新增了 sensor.get_frame_available() 用於雙重、三重與視訊 FIFO 擷取。

  • 影格完成回呼函式 — 新增了 sensor.set_frame_callback(),讓每個新影格完成時都能執行一個 Python 回呼函式。

  • Bluetooth — 新增了一個以 NimBLE 堆疊為後端的 bluetooth 模組(NimBLE 子模組、CYW-BT 驅動程式),在 Arduino Portenta H7 上啟用並附 BLE 範例。

  • MT9M114 — 新增了初始的 MT9M114 相機感測器驅動程式。

  • draw_image — 新增了去馬賽克支援與 JPEG 複製支援,因此 image.draw_image() 可接受 Bayer 與 JPEG 來源/目標影像。

  • MDMA 擷取卸載 — 相機資料擷取已卸載至 MDMA,以獲得更高的吞吐量。

  • 現在可透過傳入 -1 來停用色彩調色盤引數(因為 None 已保留作為有效引數)。

其他變更與改進

  • 切換至新的軟體 I2C 實作;與 MicroPython 上游同步;每個開發板各自的 ulab 設定;為 OpenMV 2 啟用基本的內建模組;更公平的影格緩衝區讀出鎖定;互斥鎖支援已擴充至 Cortex-M0/M0+ 並具備鎖定逾時。

錯誤修正

相機與影像處理:

  • 修正了 Pure Thermal 開發板上 FLIR Lepton 初始化的可靠性、ImageIO 的 JPEG 緩衝區/暫停處理、HM01B0 的 vflip/hmirror 設定、影像失效時的 JPEG 緩衝區清空,以及在 framesize 無效時被設定的 cropped 旗標。

系統與連線:

  • 修正了 USB 命令的排空與重置至 bootloader 的命令、互斥鎖初始化、UART 時脈來源、FatFS 的 code-page 定義、WINC1500 的頻外 ACK 處理、WiFi 除錯,以及 Nano33 的 USB PID;隔離了專用的類比焊墊。

硬體與開發板支援

  • MT9M114 相機感測器(初始驅動程式)。

  • Arduino Portenta H7 — 已啟用 Bluetooth(NimBLE)並附 BLE 範例。

  • Arduino Nano RP2040 Connect / Nano 33 BLE Sense — 在不支援之處停用 WiFi 除錯旗標;新增閃爍範例;修正 USB PID。

破壞性的 API 變更

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

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

  • 重大 — 影響大多數指令碼;您幾乎一定需要移植程式碼。

  • 次要 — 範圍狹窄的 API;僅影響使用它的指令碼。

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

變更依該順序依影響程度分組。如果您只想移植程式碼,請跳至結尾的 移植檢查清單。每個提交雜湊都連結到其在 GitHub 上的差異。

移除串流模式 (重大)

舊版的 sensor 串流模式已被移除,改採新的多影格緩衝 API。啟用串流模式的程式碼必須改用 sensor.set_framebuffers() 搭配 DOUBLE_BUFFER / TRIPLE_BUFFER / VIDEO_FIFO,並改以 sensor.snapshot() / sensor.get_frame_available() 來驅動擷取。

提交: a42f3a647

sensor.set_windowing() 重新改寫 (行為)

sensor.set_windowing() 變得更具彈性:它現在接受多種引數形式(一個區域元組、或置中的寬度/高度、或 x, y, w, h),並相對於目前的解析度解析視窗。以舊有固定形式傳遞視窗引數的指令碼可能會選取到不同的區域,應重新檢查。

提交: 3e9c43554

MicroPython 1.13 → 1.15 (行為)

內建的 MicroPython 核心已從 1.13 更新至 1.15(經由 1.14)。標準函式庫與語言行為依循上游 MicroPython 1.15;請重新檢查依賴特定版本 micropython / 標準模組行為的指令碼。

提交: 364eea6c726c5376b0

移除 ImageIO 的 update_jpeg_buffer 引數 (次要)

ImageIO 的 JPEG 緩衝區更新已重新改寫,改為從影像來源引數推導出緩衝區,並移除了明確的 update_jpeg_buffer 引數。向 ImageIO 傳遞 update_jpeg_buffer 的指令碼必須移除該引數。

提交: 5c6937bd1

移植檢查清單

若要乾淨地移植至 v4.0.0,通常需要:

  1. 將任何對已移除串流模式的使用替換為新的 sensor.set_framebuffers() 多重緩衝 API(移除串流模式)。

  2. 針對重新改寫、更具彈性的引數處理重新檢查 sensor.set_windowing() 的呼叫(視窗變更)。

  3. 針對 MicroPython 1.15 重新驗證依賴特定版本 MicroPython 行為的指令碼(MicroPython 升級)。

  4. 從 ImageIO 呼叫中移除 update_jpeg_buffer 引數(ImageIO 變更)。

所有其他指令碼皆可原封不動地執行。