v4.5.3

v4.5.3 是一個大型版本:OV5640 自動對焦、抗鋸齒線條繪製、納入主線的硬體 JPEG 解碼器、i.MX RT (RT1060) 大幅提升的功能,以及一系列廣泛的相機/ISP 修正。部分鮮少使用的影像方法已被移除,且部分 ISP/顯示 API 也有所變更——請閱讀下方的破壞性變更。

重點摘要

  • OV5640 自動對焦——在 OpenMV 4 / 4 Plus / RT1060 上啟用(sensor.ioctl(sensor.IOCTL_TRIGGER_AUTO_FOCUS)),並附有範例。

  • 抗鋸齒的 draw_line() 以及納入主線的 STM32 硬體 JPEG 解碼器(更快的 JPEG 解壓縮)。

  • OpenMV RT1060 新增了 ulab、ISP 運算、set_framerate() / set_frame_callback()、大幅加大的影格緩衝區,以及 CAN 驅動程式。

  • 破壞性: Image.div() / cartoon() / mul() 已被移除,部分 ISP/顯示 API 也有所變更——請參閱破壞性變更。

新功能

  • OV5640 自動對焦——自動對焦韌體已在 OPENMV4、OPENMV4P 與 OPENMV RT1060 上啟用;透過 sensor.ioctl(sensor.IOCTL_TRIGGER_AUTO_FOCUS) 觸發。新增了 07-Sensor-Control/autofocus.py 範例。

  • 抗鋸齒線條繪製——draw_line() 新增了抗鋸齒功能。

  • 自訂 SPI 顯示控制器——SPIDisplay 現在接受 controller= 關鍵字,並提供 bus_write 掛鉤以進行自訂的初始化/命令序列。

  • Image.ccm() 升級——現在接受巢狀的 3x3 / 4x3 / 3x4 / 4x4 矩陣以及 ulab 陣列(可選擇加上逐通道的偏移列);新增了色彩校正範例。

  • i.MX RT JPEG 擷取——在 Arduino Portenta/Nicla Vision/Giga 上支援 sensor.JPEG 擷取,並在 mimxrt port 上新增 set_framerate()set_frame_callback()

  • TFLite 模型驗證——模型現在帶有運算子順序雜湊值與運算子集大小。

  • WiFi——新增 CYW43 安全模式常數;新增 i.MX RT 開發板控制範例指令碼(Pin/ADC/CAN/I2C/PWM/SPI/UART/...)。

其他變更與改進

  • MicroPython 更新至 1.22;CMSIS 更新至 5.9.0。

  • 納入主線的 STM32 硬體 JPEG 解碼器——透過晶片內建編解碼器加快 JPEG 解壓縮。

  • 最佳化 Image.invert() / negate() 以及二進位/數學影像運算(CMSIS 內建函式)。

  • rpcvl53l1x 函式庫已改為可移植(使用 machine / time 取代 pyb),因此可在非 STM32 port 上執行。

  • 在 OpenMV H7 / H7 Plus / Pro / Pure Thermal 與 Arduino Giga / Nicla Vision / Portenta H7 上採用 DMA 加速的影格緩衝區 memcpy;STM32 現在每次掃描只掃描一次 I2C 裝置以加快開機。

錯誤修正

相機與感測器:

  • 修正 STM32 相機 XCLK 使其達到真正的 50% 工作週期,以及相機時脈頻率設為零時的錯誤;修正 Bayer 裁切+轉置、YUV422 色彩偏移,以及 mimxrt port 上的 set_windowing()

  • 修正 GC2145 晶片 ID 探測以及旋轉安裝時的 hmirror/vflip;修正 RT1062 上的 PAJ6100 以及 PixArt PAJ7620/PAW3902 的 SPI 緩衝區溢位。

影像處理:

  • 修正 find_rects() 的 roi 裁切、morph() 的小數偏移截斷、image.gamma() 的對比/亮度預設值、RGB565 上 get_threshold() 的 A/B 偏移,以及尺寸非 8 倍數時的 JPEG 解碼。

系統與函式庫:

  • 不帶引數的 machine.LED.value() 現在會回傳 LED 狀態,而非清除它;修正共用匯流排上的 SPI SSEL deinit、RT1062 上的 machine.deepsleep()、缺少運算子時的 TF 當機,以及 WINC1500/ninaw10 NIC 在 connect() 時的自動啟用。

硬體與開發板支援

  • OpenMV RT1060——啟用 ulab 與 ISP 運算、加大的影格緩衝區(10M→20M)/ fb_alloc(2M→11M)、還原 CAN 驅動程式、更多堆積記憶體。

  • Arduino GIGA——支援 GC2145 相機,並具備 GC2145/OV5640 自動偵測(兩者共用同一個 I2C 位址)。

  • i.MX RT——支援 sensor.JPEG 擷取。

破壞性 API 變更

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

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

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

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

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

已移除的影像方法 (minor)

Image.div()Image.cartoon()(及其範例)與 Image.mul() 已被移除。

Commits: 7c932602e055a468b84fe7fb63b

顯示模組 API (minor)

舊有的 udisplay 模組名稱備援已被移除——此模組現在僅以 display 註冊。僅限 DSI 的 dsi_write() / dsi_read() 方法已被 bus_write() / bus_read() 取代,現在所有顯示控制器上都可使用。

Commits: 7df6694c37d1f378a0

MQTT 與 tf.regression API 變更 (minor)

mqtt 函式庫的 MQTTClient 已重新設計:port 現在為必要項目,新增了 ssl_params / callback 建構子關鍵字以及 connect() 上的 timeout 引數,移除了舊有的 ssl= / port=0 預設值,且 check_msg() 現在為非阻塞式。tf.regression() 已重寫——其簽章現在為 regression(model, array),並能處理 1D/2D/3D 與量化(int8)模型。

Commits: d12874c63c5ec576c1

ISP/感測器行為變更 (behavior)

Image.awb() 已重新設計——灰世界(預設)與白色補丁(max=True)現在為明確區分,而 max 引數以及 Image.gamma()gamma / contrast / brightness 引數現在僅限關鍵字(位置式呼叫必須更新)。影像轉置現在對 YUV422 停用(先前會產生不正確的輸出),且 YUV422 色彩偏移已修正以符合 Bayer。STM32 JPEG 路徑現在於 JPEG 幾何不符時會引發錯誤,而非產生損壞的影像,且 WiFi AP 模式現在會在 STM32 與 i.MX RT port 上套用預設的安全模式。

Commits: 36d5cecbd00500ccdec1eeaefd6333fb2b5f55cab8733c7d40f6af

移植檢查清單

若要乾淨地移植至 v4.5.3,典型的工作為:

  1. 停止使用 Image.div() / cartoon() / mul()已移除的方法)。

  2. 將顯示模組匯入為 display,並將 dsi_write/dsi_read 切換為 bus_write/bus_read顯示 API 變更)。

  3. 更新 MQTTClient 的建構方式(port 為必要項目;ssl_params/callback)以及任何 tf.regression() 呼叫(函式庫 API 變更)。

  4. awb()max 以及 gamma()gamma/contrast/brightness 以關鍵字引數傳遞,並重新檢查 YUV422/轉置以及 AP 模式安全性的假設(ISP/感測器變更)。