v3.0.0¶
v3.0.0 是重大的 v2 → v3 版本。它引入了 OpenMV Cam M7(STM32F7)以及新的 nn CMSIS-NN 神經網路模組(取代舊有的硬編碼 find_number() / classify_object() 方法),新增了 MT9V034 全域快門 與 FLIR Lepton 感測器支援、sensor.WVGA 影格大小,並將核心更新至 MicroPython 1.9.4。多項 image / sensor / WiFi 行為已變更——請閱讀下方的破壞性變更說明。
重點摘要¶
OpenMV Cam M7——全新的 STM32F7 主機板。
nn模組——CMSIS-NN 推論:nn.load()、Net.forward()、Net.search(),並附有模型轉換器與範例。新感測器——MT9V034 全域快門(FSIN 觸發)與 FLIR Lepton。
MicroPython 1.9.4 核心更新。
破壞性變更: 硬編碼的
image.find_number()/image.classify_object()已被移除,sensor.sleep()現在會引發例外,WINC sockets 會回傳真實的位元組數,image.binary()會回傳一個新影像,且find_apriltags()上限為 64K 像素——請參閱破壞性變更說明。
新功能¶
nn——全新的 CMSIS-NN 神經網路模組:nn.load(path)、Net.forward(img, roi=, softmax=, dry_run=)(回傳 0.0–1.0 的浮點數)、用於多尺度/位置偵測的Net.search(),以及Net.test(),外加一個 CMSIS-NN 模型轉換器(nn_convert.py/nn_quantizer.py)、隨附的 CIFAR-10 / LeNet / smile 模型,以及 NN / NN-search 範例指令碼。感測器——OpenMV 4 上的 MT9V034 全域快門支援(FSIN 觸發的快照)、具有 Lepton 快照功能的更新版 FLIR Lepton 驅動程式,以及新的
sensor.WVGA(720x480)/sensor.WVGA2(752x480)影格大小。影像處理——
image.find_circles()新增了r_min/r_max/r_step關鍵字(更快的 Hough),find_keypoints()與 Haar 的find_features()現在皆可接受 RGB 影像,且image.compress()/ JPEG 編碼現在支援二值(點陣圖)影像。開機——
boot.py現在會在 USB 初始化之前執行,因此可以覆寫 USB 模式(例如 HID)。範例——新增了小尺寸/高解析度的 AprilTag 範例、一個 I2C LIDAR-Lite V3 範例,以及資料集工具(
augment_images.py/make_patches.py)。
其他變更與改進¶
將隨附的 MicroPython 更新至 1.9.4(含 pyexec parse/compile/exec 還原與 PendSV 修正);更清楚的
fb_alloc/xalloc記憶體不足錯誤訊息;抑制了網路載入期間nn的 printf 雜訊;重新整理了儲存庫(範例 →scripts/、工具 →tools/、Haar 級聯 →ml/)。nn模組在 OpenMV 2 上無法使用(快閃記憶體不足)。
錯誤修正¶
影像處理:
修正了 x≤0 時的
fast_atan2f(先前一律為 0——請重新檢查色塊/線條/關鍵點角度)、find_apriltags()的記憶體處理(在記憶體不足時遺失內容與錯誤的 realloc)、二值/點陣圖的逐 bpp 列指標(損壞的二值結果)、帶有 ROI 的find_edges(EDGE_CANNY)、TO_GS_PIXEL巨集(積分/形態學)、灰階(bpp==0)影格的點陣圖/JPEG 串流、關鍵點/色塊清單的pop_front,以及match_descriptor的結果。
系統與相機:
修正了 USB HID 介面/端點編號、執行階段動態變更 XCLK 頻率、
Net.forward()回傳正確的輸出數量,以及中斷指令碼解析時的硬體錯誤(hardfault)。
硬體與主機板支援¶
OpenMV Cam M7(STM32F7)——全新主機板。
MT9V034 全域快門感測器(OpenMV 4,FSIN 觸發)。
FLIR Lepton——具有快照支援的更新版驅動程式。
破壞性 API 變更¶
v2.9.0 與 v3.0.0 之間使用者可見的 API 破壞性變更。範圍:modules/ 中的 Python C 模組與 scripts/libraries/ 中的 Python 函式庫。
每項變更都標註了其影響等級:
重大——影響大多數使用了該功能的指令碼;您將需要移植程式碼。
輕微——範圍狹窄的 API;僅影響使用了它的指令碼。
行為——相同的 API,但結果不同;請重新檢查經過調校的指令碼。
變更依影響等級按此順序分組。如果您只是想移植程式碼,可直接跳到結尾的 遷移檢查清單。每個提交雜湊都連結到其在 GitHub 上的差異。
image.find_number() / image.classify_object() 已移除 (重大)¶
硬編碼的 image.find_number()(LeNet)與 image.classify_object()(CMSIS CNN)方法已被移除,改用新的 nn 模組。請以 net = nn.load('/model.network'); out = net.forward(img) 取代它們。
提交: d151f7e38
sensor.sleep() / sensor.reset() 在失敗時引發例外 (輕微)¶
sensor.sleep() 與 sensor.reset() 現在在失敗時會引發例外,而非回傳 True / False。檢查 sensor.sleep() 布林回傳值的程式碼必須改為以 try / except 包覆該呼叫。
提交: 7d16d008f
WINC sockets 回傳真實的位元組數 (行為)¶
WINC1500 socket 的 send / recv / sendto / recvfrom 方法先前一律回傳 0;它們現在會回傳實際傳輸的位元組數。假設回傳值為 0(或在其上迴圈/阻塞)的程式碼必須處理真實的位元組數。
提交: a07fb2f60
image.binary() 回傳一個新影像 (行為)¶
image.binary() 新增了 to_bitmap / copy 關鍵字,現在會回傳一個新的影像物件,而非就地回傳/變更來源影像。依賴 binary() 變更原始影像的程式碼應改用回傳的物件(並傳遞 copy=True 以取得非就地行為)。
提交: 8a44f0cd9
遷移檢查清單¶
若要乾淨地移植到 v3.0.0,典型的工作如下:
以
nn模組取代image.find_number()/image.classify_object()(nn 的遷移)。將
sensor.sleep()/sensor.reset()以try/except包覆,而非檢查布林回傳值(sensor.sleep 的變更)。處理來自 WINC socket
send/recv的真實位元組數(WINC socket 的變更)。使用
image.binary()回傳的影像,而非預期就地變更(binary 的變更)。在呼叫
find_apriltags()之前縮小影像,使其保持在 64K 像素以下(find_apriltags 的上限)。
所有其他指令碼皆可不變執行。