v3.7.0

v3.7.0 是一個重大版本。它新增了 audio 模組(Portenta H7 PDM 麥克風),並提供全新的非阻塞回呼函式 API;新增了 micro_speech TensorFlow 語音辨識模組;推出了全新的並列 RGB LCD 控制器(具備 HDMI 輸出與 FT5X06 觸控);新增了具有像素格式常數的 image.flush() 方法;並重寫了 image.draw_image() 縮放管線。數個舊式輔助程式庫與影像方法已移除,且 yuv_to_* 的運算方式已變更——請閱讀下方的破壞性變更。

重點摘要

  • audio 模組——Portenta H7 板載 PDM 麥克風擷取,具備非阻塞的 start_streaming(callback) API。

  • micro_speech——一個 TensorFlow 微型語音辨識模組。

  • 全新 LCD 控制器——並列 RGB 顯示支援、HDMI 輸出(TFP410)以及 FT5X06 觸控。

  • image.draw_image()——以完整的縮放/alpha/調色盤管線重寫(x_scaley_scalehintcolor_palette 等)。

  • image.flush() 以及像素格式常數(image.BINARYGRAYSCALERGB565YUV422BAYERJPEG)。

  • 破壞性變更:移除了舊式運算輔助程式庫與數個影像方法,重新設計了 draw_image()/LCD API,且 yuv_to_* 不再減去 128——詳見破壞性變更。

新功能

  • audio——一個全新的 Portenta H7 audio 模組,用於 PDM 麥克風擷取:audio.init()、非阻塞的 audio.start_streaming(callback) 以及 audio.stop_streaming()(頻率以 Hz 指定)。

  • micro_speech——一個全新的模組,包含 MicroSpeech 類別、audio_callback()micro_speech(),用於 TensorFlow 語音辨識;listen() 採用滑動視窗平均,並接受 filter 關鍵字以將結果限制在某個標籤清單內。

  • LCD——一個全新的 LCD 控制器,具備並列 RGB 顯示支援、LCD_NONELCD_SHIELDLCD_DISPLAY 類型、眾多影格尺寸常數、triple_bufferframesizerefreshbgrdeinit、一個擴充的 display、透過 TFP410 的 HDMI 輸出,以及 FT5X06 觸控螢幕支援。

  • image.flush()——新增了 image.flush() 方法與像素格式常數(image.BINARYGRAYSCALERGB565YUV422BAYERJPEG)。

  • image.draw_image()——以全新的縮放管線重寫:x_scaley_scalex_sizey_sizergb_channelalphacolor_palettealpha_palette 以及 hint,並新增了 image.AREABILINEARBICUBICCENTEREXTRACT_RGB_CHANNEL_FIRSTAPPLY_COLOR_PALETTE_FIRST 常數,以及新的 alpha 混合/色彩表/縮放範例。

  • ImageReader.next_frame() 新增了一個 pause 關鍵字,可停用即時播放延遲。

  • 新增了 Portenta 音訊範例(audio_fft.pymicro_speech.py)以及一個 ExtInt 從停止狀態喚醒的範例。

其他變更與改進

  • 內建範例已重新整理至 scripts/examples/Arduino/ 之下;使用 copy_to_fb=True 載入/建立影像後,影格緩衝區現在會立即更新(無需手動 flush);Portenta 的堆積空間略為縮減,以容納更多靜態驅動程式狀態。

錯誤修正

相機與影像處理:

  • 修正了擷取影像中紅/藍對調的問題(RGB565 位元組順序)、DMA2D 繪製捨入以符合其他繪製程式碼、遞迴配置中的 fb_alloc 損毀問題(find_blobs()),並將 top_hat()black_hat() 限定在二值與運算操作皆啟用時才可用。

顯示與音訊:

  • 修正了 LCD 擴充板輸出以及 Portenta 單聲道音訊模式。

Portenta:

  • 解決了一個 Ethernet/SDRAM 問題(將 rst_eth 拉高)並修正了 SDRAM 時序設定。

硬體與板支援

  • Arduino Portenta H7——板載 PDM 麥克風(SAI/PDM2PCM)音訊擷取。

  • LCD——全新的並列 RGB 顯示控制器(在 H7 版本中啟用 LTDC)、透過 TFP410 的 HDMI 輸出,以及 FT5X06 觸控螢幕 LCD 支援。

破壞性 API 變更

v3.6.9 與 v3.7.0 之間使用者可見的 API 破壞性變更。範圍:modules/ 中的 Python C 模組以及 scripts/libraries/ 中的 Python 程式庫。

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

  • minor——範圍狹窄的 API;僅影響使用過它的指令碼。

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

變更依該順序按影響程度分組。如果您只想移植程式碼,請直接跳至最後的 移植檢查清單。每個提交雜湊值都連結至其在 GitHub 上的差異。

移除舊式運算輔助程式庫 (minor)

mtxrvulinalgumatrixvec 輔助程式庫已從 scripts/libraries 中移除,改用 ulab。任何 import 這些程式庫的指令碼都會失敗,必須移植至 ulab

提交: 1f7da9272

移除 remove_shadows()chrominvar()illuminvar() (minor)

image.remove_shadows()image.chrominvar()image.illuminvar() 已刪除且無替代方案。呼叫這些方法的指令碼必須移除這些呼叫。

提交: 3173c2bb3

重新設計 image.draw_image() 的簽章 (minor)

image.draw_image() 已在全新的縮放管線之上重寫。舊有的位置式 alpha/單一 scale 引數以及先前的位置順序皆不再適用;請改用新的關鍵字形式(x_scale=y_scale=x_size=y_size=alpha=color_palette=hint= 等)。

提交: 3439f8824

LCD 模組重寫 (minor)

lcd 模組已為新的顯示控制器重寫。lcd.init() 現在接受一個顯示 typeLCD_NONELCD_SHIELDLCD_DISPLAY)以及新的關鍵字引數,且常數/API 介面已大幅重新整理。舊有的僅限擴充板的指令碼大多仍可運作,但預設值與行為已變更——請依新的 typeframesize API 檢查 LCD 指令碼。

提交: 185538207

yuv_to_* 不再減去 128 (behavior)

image.yuv_to_binary()yuv_to_grayscale()yuv_to_rgb()yuv_to_lab() 現在會將 Y 元組元素視為無號的 0–255 值,而非減去 128。呼叫端必須傳入未套用先前 −128 偏移的 Y,才能得到與以往相同的色彩。

提交: dcf141192

移植檢查清單

若要乾淨地移植至 v3.7.0,典型的工作為:

  1. mtxrvulinalgumatrixvec 的用法移植至 ulab運算程式庫移除)。

  2. 移除 image.remove_shadows()chrominvar()illuminvar() 的呼叫(已移除的影像方法)。

  3. image.draw_image() 的呼叫更新為新的關鍵字簽章(draw_image 重新設計)。

  4. 依新的 lcd typeframesize API 檢查 LCD 指令碼(LCD 重寫)。

  5. 在將 Y 傳入 yuv_to_* 時去除 −128 偏移(yuv_to_* 變更)。

其餘所有指令碼皆可原封不動執行。