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_scale/y_scale/hint/color_palette等)。image.flush()以及像素格式常數(image.BINARY/GRAYSCALE/RGB565/YUV422/BAYER/JPEG)。破壞性變更:移除了舊式運算輔助程式庫與數個影像方法,重新設計了
draw_image()/LCD API,且yuv_to_*不再減去 128——詳見破壞性變更。
新功能¶
audio——一個全新的 Portenta H7audio模組,用於 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_NONE/LCD_SHIELD/LCD_DISPLAY類型、眾多影格尺寸常數、triple_buffer/framesize/refresh/bgr/deinit、一個擴充的display、透過 TFP410 的 HDMI 輸出,以及 FT5X06 觸控螢幕支援。image.flush()——新增了image.flush()方法與像素格式常數(image.BINARY/GRAYSCALE/RGB565/YUV422/BAYER/JPEG)。image.draw_image()——以全新的縮放管線重寫:x_scale/y_scale/x_size/y_size、rgb_channel、alpha、color_palette、alpha_palette以及hint,並新增了image.AREA/BILINEAR/BICUBIC/CENTER/EXTRACT_RGB_CHANNEL_FIRST/APPLY_COLOR_PALETTE_FIRST常數,以及新的 alpha 混合/色彩表/縮放範例。ImageReader.next_frame()新增了一個pause關鍵字,可停用即時播放延遲。新增了 Portenta 音訊範例(
audio_fft.py、micro_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)¶
mtx、rv、ulinalg、umatrix 與 vec 輔助程式庫已從 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() 現在接受一個顯示 type(LCD_NONE/LCD_SHIELD/LCD_DISPLAY)以及新的關鍵字引數,且常數/API 介面已大幅重新整理。舊有的僅限擴充板的指令碼大多仍可運作,但預設值與行為已變更——請依新的 type/framesize 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,典型的工作為:
移除
image.remove_shadows()/chrominvar()/illuminvar()的呼叫(已移除的影像方法)。將
image.draw_image()的呼叫更新為新的關鍵字簽章(draw_image 重新設計)。依新的
lcdtype/framesizeAPI 檢查 LCD 指令碼(LCD 重寫)。在將 Y 傳入
yuv_to_*時去除 −128 偏移(yuv_to_* 變更)。
其餘所有指令碼皆可原封不動執行。