v2.1.0

v2.1.0 是一個大規模的 API 現代化版本。它以 ORB 取代了 FREAK 關鍵點描述子、將 find_blobs() /直方圖/統計重構為以物件為基礎的 API、重新命名了 sensor 的自動曝光/增益/白平衡函式、新增了 QR 碼偵測與 OV7725 鏡頭校正,並支援了初步的 OpenMV Cam M7 開發板。許多 API 都有變更——請閱讀下方的破壞性變更。

重點摘要

  • ORB 關鍵點——FREAK 描述子已被 ORB 取代(find_keypoints()match_descriptor() 經過重構)。

  • 物件 API——find_blobs()get_histogram()get_statistics() 現在會回傳具名存取子的物件。

  • QR 碼——新增 image.find_qrcodes() 偵測。

  • OpenMV Cam M7——初步的開發板支援。

  • Sensor——set_auto_whitebal()set_auto_gain()set_auto_exposure()(已重新命名)以及 set_lens_correction()

  • 破壞性變更: 關鍵點/描述子、色塊/直方圖/統計、感測器自動函式以及其他數個 API 都有變更——請參閱破壞性變更。

新功能

  • OpenMV Cam M7——新增初步的 OpenMV 3(M7)開發板支援。

  • QR 碼——新增 image.find_qrcodes() 並附有 qrcodes.py 範例。

  • ORB 關鍵點——全新的 ORB 描述子系統:find_keypoints() 新增 corner_detector 引數(CORNER_FASTCORNER_AGAST)、max_keypointsscale_factormatch_descriptor() 新增 filter_outliers 關鍵字與旋轉估計;以及關鍵點的儲存/載入。

  • 物件 API——image.get_histogram()get_statistics()get_percentile() 會回傳直方圖/統計物件;find_blobs() 會回傳色塊物件(rect()cx()cy()code()area()pixels()),並支援 area_thresholdpixels_thresholdmergemargininvert 以及 x_stridey_stride

  • Sensor——新增 sensor.set_lens_correction(enable, radi, coef) 以支援 OV7725 鏡頭遮光校正、sensor.set_windowing() 現在也可接受 (w, h) 元組(自動置中),以及 image.Image(..., copy_to_fb=True)load_image(copy_to_fb=True)

  • 新增了色彩追蹤、Arduino SPI/I2C 從機、關鍵點,以及直方圖/統計的範例指令碼。

其他變更與改進

  • IDE 現在可以中斷執行中的 main.py;更快的 find_blobs()find_qrcodes()get_statistics();ORB 使用 popcount 漢明距離;鏡頭校正使用較少的 RAM;新增一條 Linux udev 規則,避免 ModemManager 佔用序列埠。

錯誤修正

相機與成像:

  • 修正了 M7 DMA 快取清除/失效(造成影格毀損)、每個影格結尾出現的多餘虛假線條、JPEG 影格緩衝區溢位邊界、在 compress() 失敗時釋放影格緩衝區、ORB 的準確度/ROI /空集合處理,以及 load_image(copy_to_fb=True) 的幾何計算。

系統:

  • 修正了 F7 ADC 支援、一個 OV7725 暫存器名稱、開機載入程式/USB 時序,在等待快照時使用 WFI,並使 MJPEG 串流範例改為非阻塞且具有每客戶端逾時。

硬體與開發板支援

  • OpenMV Cam M7(OpenMV 3)——初步的開發板支援。

  • OV7725——鏡頭校正(遮光)支援。

破壞性 API 變更

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

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

  • major——影響大多數使用到該功能的指令碼;你將需要移植程式碼。

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

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

各項變更依影響程度依序分組。如果你只是想移植程式碼,請直接跳到結尾的 遷移檢查清單。每個提交雜湊都連結到其在 GitHub 上的差異。

FREAK 由 ORB 取代;描述子 API 重構 (major)

FREAK 關鍵點描述子已被移除並以 ORB 取代:image.FREAK 不再存在(請使用 image.ORB)。image.match_descriptor()save_descriptor()load_descriptor() 不再接受開頭的描述子類型引數(改由物件推斷),match_descriptor() 現在會回傳一個 8 元素的元組 (cx, cy, x, y, w, h, match_count, rotation)(最後一個元素是原始計數,而非百分比),且 draw_keypoints() 需要一個關鍵點物件,而非原始的 (x, y, angle) 串列。find_keypoints() 新增了 corner_detectormax_keypointsscale_factor 並變更了預設值。

Commits: e2d0c4840, bba8e5a9e, 6000684cb

感測器自動函式重新命名 (major)

sensor.set_whitebal()set_gain_ctrl()set_exposure_ctrl() 已重新命名為 sensor.set_auto_whitebal()set_auto_gain()set_auto_exposure()(舊名稱已移除)。每個函式都新增了一個可選的 value= 關鍵字,用以設定手動值而非自動。

Commits: 1b22a2961

直方圖/統計重構為物件 API (major)

直方圖/統計介面已重構為以物件為基礎的 image.get_histogram()get_statistics()get_percentile(),回傳直方圖/統計物件。舊有的扁平直方圖/統計結果以及 bin_countl_bin_counta_bin_countb_bin_count 方法已移除(請改用 len(histogram.bins()) 等)。

Commits: 011108412, 9f37c83de

find_features()scale 重新命名 (major)

image.find_features()(Haar)已將其 scale= 關鍵字重新命名為 scale_factor=。請將 find_features(cascade, scale=...) 呼叫更新為 scale_factor=...

Commits: 96e4f770c

find_blobs() 回傳物件;find_markers() 移除 (minor)

image.find_blobs() 現在會回傳具名存取子的色塊物件(索引存取仍可運作以維持向後相容),且 image.find_markers() 已移除——請改用 find_blobs(..., merge=True, margin=...)。進階色彩色塊濾鏡回呼函式已不再支援。

Commits: af15ec6eb

img.copy_to_fb() 被取代 (minor)

img.copy_to_fb() 方法已被 image.Imageload_image() 上的 copy_to_fb= 關鍵字取代。請使用 image.Image(path, copy_to_fb=True) 將大型影像直接載入影格緩衝區。

Commits: 1645ab94b

compress() 拒絕超出範圍的品質值 (behavior)

quality 超出 1–100 範圍時,image.compress()compressed() 現在會拋出錯誤,而非默默地夾限。請在呼叫前將 quality 夾限至 1–100。另外,OpenMV 3 的 JPEG 緩衝區已從 64 KB 縮減為 23000 位元組,因此大型影格現在可能會引發記憶體不足——請降低 JPEG 品質或影格大小。

Commits: 9efd7474a, 9a7c3defc

lens_corr() 的縮放現在可正常運作 (behavior)

image.lens_corr() 現在會實際套用其 zoom 引數(先前雖會解析但無效),因此傳入非預設縮放值的指令碼輸出會有所不同。請重新檢查 lens_corr() 的調校。

Commits: d6b49adef

遷移檢查清單

要乾淨地移植到 v2.1.0,通常需要做的工作是:

  1. image.FREAK 替換為 image.ORB、移除描述子類型引數,並將 match_descriptor() 的元組解包 / draw_keypoints() 更新為關鍵點物件(ORB 重構)。

  2. sensor.set_whitebal()set_gain_ctrl()set_exposure_ctrl() 重新命名為 set_auto_* 形式(自動函式重新命名)。

  3. 將直方圖/統計程式碼遷移至物件方法(直方圖/統計重構)。

  4. find_features()scale= 重新命名為 scale_factor=find_features 重新命名)。

  5. 使用色塊物件存取子,並將 find_markers() 替換為 find_blobs(merge=True, ...)find_blobs 變更);將 img.copy_to_fb() 替換為 copy_to_fb= 關鍵字(copy_to_fb 變更)。

  6. compress() 的品質值夾限至 1–100,並在 OpenMV 3 上重新檢查 JPEG 大小(compress 變更);重新調校 lens_corr() 的縮放(lens_corr 變更)。

所有其他指令碼皆可不經修改執行。