v1.4.0

v1.4.0 是一次奠基性的 imlib 重組。find_blobs()find_markers() 被重寫以支援直接色彩閾值追蹤,許多獨立的影像方法被併入色塊元組,且數個影像方法被重新命名(subimgcopyblitreplacefind_eyesfind_eyecompresscompressed)。它也新增了 sensor.get_fb()/AGC/AEC 切換,以及約 60 個範例指令碼。這是一次破壞性極大的版本——請閱讀下方的破壞性變更。

重點摘要

  • 基於色彩的色塊追蹤——find_blobs() 直接接受色彩閾值,並回傳扁平的色塊元組清單。

  • Imlib 清理——subimg()copy()blit()replace()find_eyes()find_eye()compress()compressed()

  • 感測器——新增 sensor.get_fb() 與 AGC/AEC 啟用切換。

  • 新增/擴充約 60 個範例指令碼

  • 破壞性變更: 色塊 API、移除的影像方法,以及數項重新命名——詳見破壞性變更。

新功能

  • 感測器——新增 sensor.get_fb()(取得最後一次快照的影格緩衝區)、sensor.set_gain_ctrl(enable)(切換 AGC)與 sensor.set_exposure_ctrl(enable)(切換 AEC)。

  • 影像——影像下標(img[i])現在同時支援讀取與寫入像素(灰階/RGB565/JPEG);新增就地的 image.compress() 以及 JPEG 函式上的 quality= 關鍵字;find_blobs()find_markers()find_features() 現在於找不到結果時回傳空的(可迭代)清單,而非非清單值。

  • 新增約 60 個範例指令碼(開發板控制、影像濾波器、色彩追蹤、人臉/眼睛/特徵偵測、WiFi 擴充板),以及第二個虹膜偵測範例。

其他變更與改進

  • image.histeq() 現在可用於 RGB565 影像,而不僅限於灰階。

錯誤修正

  • 於開機時初始化 pyb.DAC 使 DAC 可正常運作(#121),修正了損壞的 image.dilate()、WINC client.send() 的零位元組損毀、色塊合併的重新迭代、一個導致首次使用後檔案系統失效的檔案緩衝區重新初始化錯誤、熱電堆的 To_minTo_max 計算(#113),並套用了上游 MicroPython HAL I2C/DMA 修補。

硬體與開發板支援

  • WiFi 擴充板——WINC1500 更新至 Rev-B 開發板檔案。

  • pyb.DAC——已啟用 DAC 周邊裝置。

破壞性 API 變更

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

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

  • 重大——影響大部分使用該功能的指令碼;您需要移植程式碼。

  • 次要——範圍狹窄的 API;僅影響使用到它的指令碼。

各項變更依此順序按影響程度分組。若您只想移植程式碼,請跳至結尾的遷移檢查清單。每個提交雜湊都連結至其在 GitHub 上的差異。

find_blobs()find_markers() 已重寫 (重大)

image.find_blobs()find_markers() 被重寫以支援基於色彩的追蹤:您現在直接傳入色彩閾值(以及選用的濾波函式),而非對預先分割的影像進行操作,且結果是單一扁平的 10 元素色塊元組清單(含色碼欄位),而非巢狀的逐色彩樹狀結構。請重構色彩追蹤指令碼,改為傳入色彩閾值並迭代扁平清單。

提交: d1ff36602, 16daeb83a

移除獨立的影像方法 (重大)

image.thresholdimage.centroid()image.orientation_radians()image.orientation_degrees()image.pixels() 已被移除。形心/方向/像素計數資料現在可作為 find_blobs() 所回傳色塊元組的欄位取得。

提交: 9e5d379c1

Imlib 方法重新命名 (重大)

數個影像方法被重新命名/重構:image.subimg()image.copy()image.blit()image.replace(),且 image.blend() 已變更以與其他兩種雙影像運算一致。image.scale()scaled()rainbow() 方法已被移除(rainbow 移至 FIR 模組)。請更新呼叫為新名稱。

提交: b534dc6ff

find_eyes() 重新命名為 find_eye() (次要)

image.find_eyes() 已重新命名為 image.find_eye(),且現在回傳虹膜的 2 元組 (x, y),而非先前的眼睛元組。請重新命名呼叫並更新回傳值的處理方式。

提交: 7a01a9bed

image.compress() 重新命名為 compressed() (次要)

image.compress()(原本回傳新的 JPEG 影像)已重新命名為 image.compressed();新的 image.compress() 改為就地壓縮影像並回傳 Noneimage.save() 也新增了 quality= 關鍵字,且現在回傳 None 而非 True。請將 img.compress(q)(預期回傳影像)遷移為 img.compressed(quality=q)

提交: 367e5fdd3

遷移檢查清單

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

  1. 重構色彩追蹤程式碼,改為將色彩閾值傳入 find_blobs()find_markers() 並迭代扁平的色塊元組清單(find_blobs 的重寫)。

  2. 改為從色塊元組讀取形心/方向/像素資料,而非已移除的獨立方法(移除的影像方法)。

  3. subimgcopyblitreplace 重新命名,修正 blend() 呼叫,並替換 scalescaledrainbowimlib 重新命名)。

  4. find_eyes()find_eye()find_eye 重新命名)與 compress()compressed()compress 重新命名)重新命名。

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