v1.2.0

v1.2.0 是一個奠基性的大型版本,建構出大部分經典的 OpenMV 影像 API:繪製方法、二值化/形態學運算、關鍵點描述子(FAST/FREAK/LBP)、色彩轉換image.statisticsBMP/PPM/JPEG 檔案 I/O、lcdmjpeggifmlx 熱感模組、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()

  • 新模組——lcdmjpeggif(色彩)與 mlx 熱感模組。

  • 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_lablab_to_rgbrgb_to_grayscalegrayscale_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!!"),而非無限期停滯。若需容忍逾時,請以 tryexcept RuntimeError 包覆 snapshot()

提交: e3f41d674

sensor.set_pixformat() 遇到不支援的格式時會擲出例外 (行為)

sensor.set_pixformat() 現在於收到不支援的像素格式時會擲出例外,而非回傳 False。原本檢查 False 回傳值的程式碼必須改為攔截例外。

提交: e0c5822c2

遷移檢查清單

若要乾淨地移植到 v1.2.0,通常需要進行的工作為:

  1. sensor.reset() 之後明確設定 sensor.set_pixformat()sensor.set_framesize()reset 變更)。

  2. 若需容忍感測器逾時,請以 tryexcept RuntimeError 包覆 sensor.snapshot()snapshot 變更)。

  3. 改為攔截 sensor.set_pixformat() 擲出的例外,而非檢查 Falseset_pixformat 變更)。

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