v3.6.1¶
v3.6.1 是一次重大發行。它引入了 imu 模組(LSM6DS3)、一整套全新的 sensor getter API 並具備 IMU 驅動的自動旋轉、4 點透視 rotation_corr(),同時讓 Arduino Portenta H7 搭配 HIMAX HM01B0 與 OV7690 相機正式運作。多個 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()新增fov與corners(4 點)關鍵字。新硬體 — Arduino Portenta H7、HIMAX HM01B0 與 OV7690 相機。
破壞性變更:
set_pixformat()/set_framesize()現在回傳None、sensor.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()— 新增fov與corners(4 點透視)關鍵字,並附有透視校正範例。lcd.init()— 新增bgr關鍵字引數。collections.deque— 在 MicroPython 建置中啟用。新增
sensor.OV7690與sensor.HM01B0id 常數,以及一個類 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() 現在要求影像的寬與高皆為偶數,遇到奇數尺寸時會引發錯誤。請在呼叫這些方法之前,先將影像裁切或調整為偶數尺寸。
遷移檢查清單¶
若要乾淨地移植到 v3.6.1,一般工作如下:
移除
sensor.set_framerate()的呼叫(set_framerate 的移除)。將 TensorFlow 工作負載移出 OpenMV Cam M7(M7 TensorFlow 變更)。
停止依賴
set_pixformat()/set_framesize()的回傳值,並針對不支援的像素格式捕捉ValueError(回傳值變更)。在呼叫
lens_corr()/linpolar()/logpolar()前確保影像尺寸為偶數(偶數尺寸要求)。
所有其他指令碼皆可不變運作。