v3.7.0¶
v3.7.0 は大規模なリリースです。新しいノンブロッキングのコールバック API を備えた audio モジュール(Portenta H7 の PDM マイク)、TensorFlow による音声認識モジュール micro_speech、まったく新しいパラレル RGB LCD コントローラ(HDMI 出力と FT5X06 タッチ対応)、ピクセルフォーマット定数を伴う image.flush() メソッド、そして書き直された image.draw_image() のスケーリングパイプラインを追加しています。いくつかの旧来のヘルパーライブラリと画像メソッドが削除され、yuv_to_* の計算が変更されました — 下記の互換性を壊す変更を参照してください。
ハイライト¶
audioモジュール — ノンブロッキングのstart_streaming(callback)API による Portenta H7 オンボード PDM マイクのキャプチャ。micro_speech— TensorFlow によるマイクロ音声認識モジュール。新しい LCD コントローラ — パラレル RGB ディスプレイのサポート、HDMI 出力(TFP410)、FT5X06 タッチ。
image.draw_image()— 完全なスケーリング/アルファ/パレットパイプライン(x_scale/y_scale/hint/color_palette…)を備えて書き直しました。image.flush()とピクセルフォーマット定数(image.BINARY/GRAYSCALE/RGB565/YUV422/BAYER/JPEG)。互換性を壊す変更: 旧来の数学ヘルパーライブラリといくつかの画像メソッドが削除され、
draw_image()/ LCD API が作り直され、yuv_to_*が 128 を減算しなくなりました — 互換性を壊す変更を参照してください。
新機能¶
audio— PDM マイクのキャプチャ用の新しい Portenta H7audioモジュール:audio.init()、ノンブロッキングのaudio.start_streaming(callback)、およびaudio.stop_streaming()(周波数は Hz で指定します)。micro_speech— TensorFlow による音声認識のためのMicroSpeechクラス、audio_callback()、micro_speech()を備えた新しいモジュール。listen()は移動窓平均を使用し、結果をラベルリストに制限するfilterキーワードを受け付けます。LCD — パラレル RGB ディスプレイのサポート、
LCD_NONE/LCD_SHIELD/LCD_DISPLAYのタイプ、多数の framesize 定数、triple_buffer/framesize/refresh/bgr/deinit、拡張されたdisplay、TFP410 経由の HDMI 出力、FT5X06 タッチスクリーンのサポートを備えた、新しい LCD コントローラ。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の定数と、新しいアルファブレンディング/カラーテーブル/スケーリングのサンプルを追加しました。ImageReader.next_frame()に、リアルタイム再生の遅延を無効化するpauseキーワードが追加されました。Portenta のオーディオサンプル(
audio_fft.py、micro_speech.py)と、ストップモードからの ExtInt ウェイクのサンプルを追加しました。
その他の変更と改善¶
組み込みのサンプルを
scripts/examples/Arduino/配下に再編成しました。copy_to_fb=Trueで画像を読み込み/作成した後、フレームバッファが即座に更新されるようになりました(手動の flush は不要)。より多くの静的ドライバ状態を収めるため、Portenta のヒープをわずかに削減しました。
バグ修正¶
カメラと画像処理:
キャプチャした画像での赤/青の入れ替わり(RGB565 のバイト順)を修正し、DMA2D の描画の丸めを他の描画コードと一致させ、再帰的な割り当て(
find_blobs())でのfb_allocの破損を修正し、top_hat()/black_hat()をバイナリ演算と数学演算の両方が有効な場合に限定しました。
ディスプレイとオーディオ:
LCD シールド出力と、Portenta の 1 チャンネルモノラルオーディオモードを修正しました。
Portenta:
イーサネット/SDRAM の問題を回避し(
rst_ethを High にドライブ)、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 のヘルパーライブラリは、ulab を優先して scripts/libraries から削除されました。これらのいずれかを 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() は、128 を減算する代わりに、Y タプル要素を符号なしの 0〜255 の値として扱うようになりました。以前と同じ色を得るには、呼び出し側は以前の −128 バイアスなしで Y を渡す必要があります。
コミット: dcf141192
移行チェックリスト¶
v3.7.0 へきれいに移植するための一般的な作業は次のとおりです:
mtx/rv/ulinalg/umatrix/vecの使用箇所をulabに移植する(数学ライブラリの削除)。image.remove_shadows()/chrominvar()/illuminvar()の呼び出しを削除する(削除された画像メソッド)。image.draw_image()の呼び出しを新しいキーワードシグネチャに更新する(draw_image の作り直し)。新しい
lcdのtype/framesizeAPI に対して LCD スクリプトを見直す(LCD の書き直し)。yuv_to_*に Y を渡す際に −128 バイアスを取り除く(yuv_to_* の変更)。
それ以外のスクリプトはすべてそのまま動作します。