v2.8.0

v2.8.0 是一個規模龐大的版本。它讓 OpenMV Cam H7(STM32H7)正式啟用,配備硬體 JPEG 編碼器與 H7 ADC/DAC,並對 image API 進行大幅改寫(繪製粗細/填滿、數學/二進位運算、許多新濾鏡、Otsu 閾值化),加入 MicroPython 執行緒omv 版本模組。Python 的引數解析順序已被鎖定,且 image.mask_ellipse() 已被移除 — 請閱讀下方的破壞性變更。

重點摘要

  • OpenMV Cam H7 — 全新的 STM32H7 主機板,配備硬體 JPEG 編碼器與 H7 ADC/DAC。

  • image 改寫 — 線條粗細、形狀填滿、draw_arrow() / draw_image()、完整的數學/二進位運算,以及許多新濾鏡。

  • Otsu 閾值化histogram.get_threshold()Threshold 物件。

  • 執行緒 — MicroPython _thread 支援。

  • omv 模組 — 版本/主機板資訊。

  • 破壞性變更: Python 的位置引數順序現在變為嚴格,且 image.mask_ellipse() 已被移除 — 詳見破壞性變更。

新功能

  • OpenMV Cam H7 — STM32H7 主機板支援,配備硬體 JPEG 編碼器、H7 ADC 與 H7 DAC。

  • 繪製 — 新增線條 thickness、形狀 fill(矩形/圓形)、文字 scale 與字距、draw_string() 上的 mono_space 關鍵字、image.draw_arrow(),以及 image.draw_image()(精靈圖/遮罩繪製)。

  • 數學運算 — 新增 add()sub()mul()div()min()max()difference()blend()replace()(搭配 hmirror / vflip / mask)與 remove_shadows();基本運算現在可接受套用至所有像素的純量/色彩值。

  • 二進位/形態學 — 新的二進位影像類型與 binary();線條運算與 erode() / dilate() 可接受遮罩;新增 open() / close() / top_hat() / black_hat()

  • 濾鏡 — 新增 cartoonflood_fillbilaterallaplacianblur / gaussian_blur 別名,以及自適應直方圖均衡化(histeq(adaptive=, clip_limit=, mask=))。

  • 統計get_statistics() / get_histogram() 可接受色彩閾值清單與 invert;新增 Otsu 的 histogram.get_threshold()Threshold 物件。

  • CMSIS CNN — 新增 image.classify_object() 並附上 cnn.py 範例(在 v3.0.0 中被 nn 模組取代)。

  • 執行緒 — 啟用 MicroPython 的 _thread 模組。

  • omv 模組 — 新增版本資訊(version_stringarchboard_typeboard_id);啟用 machine 的 I2C4 匯流排與數學特殊函式(erfgamma、…);新增馬達擴充板範例與許多新的範例指令碼。

其他變更與改進

  • H7 的感測器外部時脈已降至 48 MHz(影像品質較佳、FPS 較低);低/高 JPEG 品質現在可依主機板設定(並已針對 H7 調校);新增每塊主機板的 imlib_config.h 功能閘控(在原廠韌體中所有影像函式仍維持啟用);更新內建的 MicroPython。

錯誤修正

影像處理:

  • 修正了無副檔名的 image.save()、OV2640 / OV7725 / OV9650 / MT9V034 的 gain_db / gain_db_ceiling 對應、sharpen() 中過度的增益、形態學的邊緣雜訊、某個影像運算中的除以零,以及濾鏡核心尺寸過大時的堆疊破壞當機(現在會回傳乾淨的錯誤)。

系統:

  • 以原子區段保護 USB VCP 緩衝區(序列埠損毀,#313)、修正 Windows 上的 USB 連線、在 SD 卡失敗時掛載內部 flash 檔案系統、cpufreqset_frequency() PLLP 值,以及一個 bootloader 韌體燒錄錯誤。

硬體與主機板支援

  • OpenMV Cam H7(STM32H7) — 全新主機板,配備硬體 JPEG 編碼器與 H7 ADC/DAC。

  • machine — 啟用 I2C4 匯流排。

破壞性 API 變更

v2.7.0 與 v2.8.0 之間使用者可見的 API 變更。範圍:modules/ 中的 Python C 模組與 scripts/libraries/ 中的 Python 函式庫。

兩項破壞性變更皆為 minor,且只影響使用到相關功能的指令碼。每個 commit 雜湊都連結到 GitHub 上的對應差異。

Python 位置引數順序現在變為嚴格 (minor)

整個 Python C 模組(image / sensor / fir / gif / lcd / mjpeg)的引數解析現在會先讀取位置引數再讀取關鍵字,並鎖定位置順序。結合繪製方法上新增的關鍵字引數(draw_line() / draw_rectangle() / draw_circle() / draw_string() / draw_cross() / draw_keypoints() 新增了 thickness / fill / scale / size),以位置方式亂序傳遞參數的程式碼 — 或在其中一個新引數之後以位置方式傳遞 color 的程式碼 — 必須改用關鍵字引數或遵循文件記載的位置順序。

Commits: e0e112468, fc74e70c3

image.mask_ellipse() 已移除 (minor)

image.mask_ellipse() 已被移除。呼叫它的指令碼必須移除該呼叫,或改用明確的 ROI/遮罩影像。

Commits: d7159fba3

移植檢查清單

以關鍵字(或文件記載的位置順序)傳遞引數,尤其是繪製方法上的 color引數順序變更),並移除 image.mask_ellipse() 呼叫(mask_ellipse 移除)。其餘所有指令碼皆可不經修改正常執行。