v3.6.1

v3.6.1 是一次重大發行。它引入了 imu 模組(LSM6DS3)、一整套全新的 sensor getter API 並具備 IMU 驅動的自動旋轉、4 點透視 rotation_corr(),同時讓 Arduino Portenta H7 搭配 HIMAX HM01B0OV7690 相機正式運作。多個 sensor / image API 有所變更,且 M7 上已移除 TensorFlow — 請閱讀下方的破壞性變更。

重點摘要

  • imu 模組 — LSM6DS3(OpenMV 4 / Portenta)上的加速度計 / 陀螺儀 / 溫度 / 翻滾角(roll)/ 俯仰角(pitch)。

  • Sensor getter + 自動旋轉get_pixformat() / get_framesize() / get_hmirror() / get_vflip() / get_windowing()set_transpose() / set_auto_rotation(),以及 IMU 驅動的快照旋轉。

  • 透視校正rotation_corr() 新增 fovcorners(4 點)關鍵字。

  • 新硬體 — Arduino Portenta H7、HIMAX HM01B0 與 OV7690 相機。

  • 破壞性變更: set_pixformat() / set_framesize() 現在回傳 Nonesensor.set_framerate() 已移除、M7 上已移除 TensorFlow,且 lens_corr() / linpolar() 現在要求尺寸為偶數 — 請參閱破壞性變更。

新功能

  • imu — 全新的 IMU 模組:imu.acceleration_mg()imu.angular_rate_mdps()imu.temperature_c()imu.roll()imu.pitch()imu.sleep()(OpenMV 4 / Portenta 上的 LSM6DS3)。

  • Sensor getter — 新增 sensor.get_pixformat()get_framesize()get_hmirror()get_vflip()get_windowing()set_transpose() / get_transpose(),以及 set_auto_rotation() / get_auto_rotation()

  • 自動旋轉 — 啟用自動旋轉時,sensor.snapshot() 會利用 IMU 對影格進行翻轉 / 鏡像 / 轉置。

  • rotation_corr() — 新增 fovcorners(4 點透視)關鍵字,並附有透視校正範例。

  • lcd.init() — 新增 bgr 關鍵字引數。

  • collections.deque — 在 MicroPython 建置中啟用。

  • 新增 sensor.OV7690sensor.HM01B0 id 常數,以及一個類 numpy 的 ulab 影像濾鏡範例。

其他變更與改進

  • 大幅最佳化了影像濾鏡(median / mode / mean / …)、find_circles() 與鏡頭校正;alloc_extra_fb 現在可配置任意位元組數量;行人偵測模型以新的 average-pool 運算重新建置。

錯誤修正

相機與感測器:

  • 修正了 OV2640 的 sleep()(現在改用 COM2 待機暫存器而非電源關閉接腳)、FSYNC 接腳設定、HM01B0 的 HSYNC/VSYNC 極性與 I2C 位址/掃描、Portenta 感測器電源關閉 GPIO 與相機重置接腳,並在 IMU 俯仰角接近 90°/270° 時停用自動旋轉。

影像處理與系統:

  • 修正了影像濾鏡邊界檢查的錯誤、停用 D-cache 時的硬性錯誤(hardfault)、在無 SD 卡的開發板上開機、tf.load()load_to_fb 錯誤、行人偵測的堆疊溢位(H7 堆疊提高至 ≥12 KB),以及 OpenMV 4 Plus 上高速模式的 USB 描述子偏移量。

硬體與開發板支援

  • Arduino Portenta H7 — 初步的開發板啟用(STM32H747 時脈/OSC/HSE 設定、CMSIS 標頭檔、ADC、SDRAM、Arduino USB PID)。

  • HIMAX HM01B0 — 全新的單色相機驅動程式(Bayer、外部振盪器時脈)。

  • OV7690 — 全新的相機驅動程式。

  • LSM6DS3 IMU — OpenMV 4 / Portenta。

破壞性 API 變更

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

每項變更皆標註其影響範圍:

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

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

變更依影響範圍依序分組。如果你只想移植程式碼,請直接跳到結尾的 遷移檢查清單。每個 commit 雜湊值皆連結至其在 GitHub 上的 diff。

sensor.set_framerate() 已移除 (minor)

無作用的 sensor.set_framerate() 樁(stub)已被移除;現在呼叫它會引發 AttributeError。請移除該呼叫,改透過 framesize/exposure 控制影格時序。(可正常運作的 set_framerate() 在 v4.0.2 中重新引入。)

Commits: 705e98f91

OpenMV Cam M7 上已移除 TensorFlow (minor)

TensorFlow(tf 模組)已在 OpenMV Cam M7 / OpenMV 3 上停用(已無法容納)。在 M7 上 import tf 會失敗 — 請改用 H7 等級的相機來使用 TensorFlow。(tf 在 v3.6.3 於 F7 上重新啟用。)

Commits: 2ae875077

set_pixformat() / set_framesize() 回傳 None (behavior)

sensor.set_pixformat()sensor.set_framesize() 現在回傳 None 而非 True,且不支援的像素格式現在會引發 ValueError 而非斷言錯誤。原本檢查回傳值的程式碼(例如 if sensor.set_pixformat(...):)必須停止這麼做,而原本針對不支援格式捕捉 AssertionError 的程式碼必須改為捕捉 ValueError

Commits: f314ac4e7

lens_corr() / linpolar() / logpolar() 要求尺寸為偶數 (behavior)

image.lens_corr()image.linpolar() / image.logpolar() 現在要求影像的寬與高皆為偶數,遇到奇數尺寸時會引發錯誤。請在呼叫這些方法之前,先將影像裁切或調整為偶數尺寸。

Commits: b36460a36, 2b26ca17b

遷移檢查清單

若要乾淨地移植到 v3.6.1,一般工作如下:

  1. 移除 sensor.set_framerate() 的呼叫(set_framerate 的移除)。

  2. 將 TensorFlow 工作負載移出 OpenMV Cam M7(M7 TensorFlow 變更)。

  3. 停止依賴 set_pixformat() / set_framesize() 的回傳值,並針對不支援的像素格式捕捉 ValueError回傳值變更)。

  4. 在呼叫 lens_corr() / linpolar() / logpolar() 前確保影像尺寸為偶數(偶數尺寸要求)。

所有其他指令碼皆可不變運作。