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_FAST/CORNER_AGAST)、max_keypoints/scale_factor;match_descriptor()新增filter_outliers關鍵字與旋轉估計;以及關鍵點的儲存/載入。物件 API——
image.get_histogram()/get_statistics()/get_percentile()會回傳直方圖/統計物件;find_blobs()會回傳色塊物件(rect()/cx()/cy()/code()/area()/pixels()),並支援area_threshold/pixels_threshold/merge/margin/invert以及x_stride/y_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;新增一條 Linuxudev規則,避免 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_detector / max_keypoints / scale_factor 並變更了預設值。
感測器自動函式重新命名 (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_count / l_bin_count / a_bin_count / b_bin_count 方法已移除(請改用 len(histogram.bins()) 等)。
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.Image / load_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 品質或影格大小。
lens_corr() 的縮放現在可正常運作 (behavior)¶
image.lens_corr() 現在會實際套用其 zoom 引數(先前雖會解析但無效),因此傳入非預設縮放值的指令碼輸出會有所不同。請重新檢查 lens_corr() 的調校。
Commits: d6b49adef
遷移檢查清單¶
要乾淨地移植到 v2.1.0,通常需要做的工作是:
將
image.FREAK替換為image.ORB、移除描述子類型引數,並將match_descriptor()的元組解包 /draw_keypoints()更新為關鍵點物件(ORB 重構)。將
sensor.set_whitebal()/set_gain_ctrl()/set_exposure_ctrl()重新命名為set_auto_*形式(自動函式重新命名)。將直方圖/統計程式碼遷移至物件方法(直方圖/統計重構)。
將
find_features()的scale=重新命名為scale_factor=(find_features 重新命名)。使用色塊物件存取子,並將
find_markers()替換為find_blobs(merge=True, ...)(find_blobs 變更);將img.copy_to_fb()替換為copy_to_fb=關鍵字(copy_to_fb 變更)。將
compress()的品質值夾限至 1–100,並在 OpenMV 3 上重新檢查 JPEG 大小(compress 變更);重新調校lens_corr()的縮放(lens_corr 變更)。
所有其他指令碼皆可不經修改執行。