v1.1.0

v1.1.0 是奠定基礎的架構版本:它捨棄了早期的自訂周邊模組,改採標準的 MicroPython 內建模組,將影像 API 移入 image 模組、將影格速率時鐘移入 time,並新增了內建的 Haar 級聯、get_pixel()set_pixel()、OpenMV 2 開發板支援,以及 USB-CDC 除錯。這是一個有大量破壞性變更、定義 API 的版本 — 請閱讀下方的破壞性變更。

重點摘要

  • MicroPython 內建模組 — 自訂的 gpioledspisocketwlanuartfileselect 模組已被移除,改採 MicroPython 的 pybmachine

  • image 模組 — Image()HaarCascade() /描述子現在位於 image 模組中。

  • time.clock — 影格速率時鐘已移入 time 模組。

  • 內建 Haar 級聯HaarCascade("frontalface")HaarCascade("eye")(不需要檔案)。

  • OpenMV 2 開發板支援與 USB-CDC 除錯。

  • 破壞性變更: 模組結構已重新定義 — 請參閱破壞性變更。

新功能

  • Image — 新增了 Image.get_pixel(x, y)set_pixel() 以及 img[i] 下標式像素存取;內建的快閃記憶體 Haar 級聯(HaarCascade("frontalface")HaarCascade("eye"))以及一個用於限制級聯階段的 stages= 關鍵字;draw_string() 可在灰階影像上運作。

  • Sensor — 新增了 sensor.set_colorbar()sensor.set_saturation(),以及 QQVGA2 影格尺寸。

  • mlxmlx.read(type),可輸出 mlx.RAINBOWmlx.GRAYSCALE

  • 除錯 — 實作了透過 USB CDC 的除錯、一個韌體 fw_version() 查詢、各開發板專屬的韌體(OpenMV 1 / OpenMV 2),以及自我測試/色彩條指令碼;致命/剖析錯誤會記錄到快閃記憶體中。

其他變更與改進

  • 記憶體不足現在會引發 MemoryError 而非 OSError;指令碼以例外重新引發的方式執行,因此錯誤會被印出而非導致當機;序列鮑率現在可設定(預設 921600);更大的快閃記憶體檔案系統;感測器像素時脈降低至 54 MHz 以提升擷取穩定性;sensor.reset() 僅依賴感測器的軟體重設。

錯誤修正

  • 修正了樣板匹配、find_features() 重複回傳第一個物件、SCCB/I2C 暫存器的原子存取、SD 卡晶片偵測、軟體 I2C 接腳對應、fast_cbrtf / LAB 色彩準確度,以及 OpenMV 1 / 2 上的積分影像/中值濾鏡記憶體使用問題。

硬體與開發板支援

  • OpenMV 2(STM32F427)開發板支援(以及 OpenMV 3 硬體設計);OpenMV 2 上使用 MCO 作為感測器時脈。

破壞性 API 變更

v1.0.3-beta 與 v1.1.0 之間使用者可見的 API 破壞性變更。範圍:modules/ 中的 Python C 模組,以及 scripts/libraries/ 中的 Python 函式庫。

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

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

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

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

移除自訂周邊模組 (major)

早期的自訂 clockfilegpioledselectsocketspiwlanuart 模組已被移除,改採 MicroPython 內建的 pybmachine 周邊。請將指令碼移植到標準的 MicroPython 對應項(例如 pyb.Pinpyb.LEDpyb.SPIpyb.UART)。

提交: 6d2fafa94

影像 API 移入 image 模組 (major)

Image()HaarCascade() 以及描述子的儲存/載入函式不再是裸的內建函式 — 它們現在位於新的 image 模組中。指令碼必須 import image 並使用 image.Imageimage.HaarCascade()

提交: 54288c535

影格速率時鐘移入 time (major)

獨立的 clock 模組已被移除;影格速率時鐘現在位於 time 中。請使用 import timeclock = time.clock() — 回傳的物件仍然提供 .tick().fps().avg().reset()

提交: a8928ca3b

/flash/sd 不再加入 sys.path (behavior)

磁碟區標籤/根目錄已固定,且 /flash/sd 不再自動附加至 sys.path。以裸名稱從那些位置匯入輔助模組的指令碼,必須明確地加入路徑(或將模組放置於可被找到的位置)。

提交: 09e77b5da

遷移檢查清單

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

  1. 將自訂的 gpioledspiuartsocketwlanfileselect 模組替換為 MicroPython 的 pybmachine自訂模組的移除)。

  2. import image 並在 Image()HaarCascade() 前加上 image. 前綴(image 模組的搬移)。

  3. 使用 import timeclock = time.clock()clock 的搬移)。

  4. 如果你曾以裸名稱匯入輔助模組,請明確地將 /flash/sd 加入 sys.pathsys.path 的變更)。

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