v1.2.0¶
v1.2.0 是一個奠基性的大型版本,建構出大部分經典的 OpenMV 影像 API:繪製方法、二值化/形態學運算、關鍵點描述子(FAST/FREAK/LBP)、色彩轉換與 image.statistics、BMP/PPM/JPEG 檔案 I/O、lcd、mjpeg、gif 與 mlx 熱感模組、OV7725 相機,以及許多 sensor 控制項。部分核心 sensor 行為已變更——請閱讀下方的破壞性變更。
重點摘要¶
繪製 API——
draw_line()/draw_rectangle()/draw_circle()/draw_string()/draw_cross()/draw_keypoints()。二值化/形態學——
binary()、invert()、and/or/xor/...、erode()/dilate()/morph()、negate()/difference()。關鍵點——FAST/FREAK/LBP 描述子,搭配
match_descriptor()/save_descriptor()/load_descriptor()。OV7725 相機支援;
image.statistics;BMP/PPM/JPEG 檔案 I/O。破壞性變更:
sensor.reset()、sensor.snapshot()與sensor.set_pixformat()的行為已變更——詳見破壞性變更。
新功能¶
繪製——新增
image.draw_line()/draw_rectangle()/draw_circle()/draw_string()/draw_cross()/draw_keypoints(),並支援關鍵字引數(color、thickness……)。二值化/形態學——新增
image.binary()、invert()、and()/nand()/or()/nor()/xor()/xnor()、erode()/dilate()/morph()、negate()/difference()、pixels()、centroid()、orientation_radians()/orientation_degrees(),以及width()/height()/format()。關鍵點/描述子——透過
find_keypoints()擷取 FAST 關鍵點,為 FREAK/LBP 提供統一的match_descriptor()與save_descriptor()/load_descriptor(),並加入側臉 Haar/LBP 級聯。色彩/統計——
image.statistics與色彩轉換函式(rgb_to_lab/lab_to_rgb/rgb_to_grayscale/grayscale_to_rgb)。檔案 I/O——BMP/PPM(P2/P3/P5/P6)/JPEG 的載入與儲存(包含灰階 JPEG 以及 4:2:0/4:2:2 色度子取樣)。
模組——新增
lcd(LCD 擴充板)、mjpeg(影片錄製)、彩色gif(含Gif.loop())與mlx熱感相機模組,各附有範例指令碼。感測器——新增
sensor.get_id()(外加 OV9650/OV2640/OV7725 PID 常數)、sensor.set_special_effect()(SDE_* 常數)、sensor.set_image_filter()(FILTER_BW/FILTER_SKIN)、HQVGA影格尺寸,以及image.set_pixel(x, y, …)。WiFi——新增 ATWINC1500 WiFi 驅動程式與 OpenMV 1/2 BSP 基礎建設,並附 BLE 範例。
其他變更與改進¶
影格緩衝區現在會先經 JPEG 壓縮再串流至 OpenMV IDE(降低頻寬需求);JPEG 壓縮為就地進行;OV7725 的水平/垂直縮放可實現任意比例縮放;改進(更快)的 Haar 人臉偵測可在 QVGA 下執行。
錯誤修正¶
影像:
修正了積分影像計算、
median()濾波器損毀、形心計算、套用於 RGB 輸入的 RGB 膚色/黑白濾波器,並加快灰階 BMP/PPM 的讀寫速度。
感測器與系統:
修正了
pyb.Servo計時器(Servo 現可正常運作)、HQVGA 解析度、SD 卡初始化可靠性、軟重置後重新初始化儲存裝置,以及在無指令碼時重新執行 REPL。
硬體與開發板支援¶
OV7725 相機感測器。
LCD 擴充板(
lcd模組)、mlx熱感相機,以及 ATWINC1500 WiFi 基礎建設。
破壞性 API 變更¶
v1.1.0 與 v1.2.0 之間使用者可見的 API 破壞性變更。範圍:modules/ 中的 Python C 模組與 scripts/libraries/ 中的 Python 函式庫。
這三項破壞性變更都是核心 sensor 函式的行為變更(API 相同、行為不同)——請重新檢查受影響的指令碼。每個提交雜湊都連結至其在 GitHub 上的差異。(本版本絕大部分是在 v1.1→v1.2 範圍內新建構的 API,因此屬於新增而非破壞性。)
sensor.reset() 不再套用預設組態 (行為)¶
sensor.reset() 不再套用內建的預設組態(pixformat/framesize/framerate/gain/contrast/brightness/saturation)。先前依賴 reset() 留下可用預設值的指令碼,現在必須在 reset() 之後明確呼叫 sensor.set_pixformat() 與 sensor.set_framesize()(以及任何其他設定)。
提交: d1e782df3
sensor.snapshot() 逾時時會擲出例外 (行為)¶
sensor.snapshot() 現在會在感測器逾時時擲出 RuntimeError("Sensor Timeout!!"),而非無限期停滯。若需容忍逾時,請以 try/except RuntimeError 包覆 snapshot()。
提交: e3f41d674
sensor.set_pixformat() 遇到不支援的格式時會擲出例外 (行為)¶
sensor.set_pixformat() 現在於收到不支援的像素格式時會擲出例外,而非回傳 False。原本檢查 False 回傳值的程式碼必須改為攔截例外。
提交: e0c5822c2
遷移檢查清單¶
若要乾淨地移植到 v1.2.0,通常需要進行的工作為:
在
sensor.reset()之後明確設定sensor.set_pixformat()/sensor.set_framesize()(reset 變更)。若需容忍感測器逾時,請以
try/except RuntimeError包覆sensor.snapshot()(snapshot 變更)。改為攔截
sensor.set_pixformat()擲出的例外,而非檢查False(set_pixformat 變更)。
所有其他指令碼皆可不經修改地執行。