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 H7 audio モジュール: 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_sizergb_channelalphacolor_palettealpha_palettehint、さらに image.AREA / BILINEAR / BICUBIC / CENTER / EXTRACT_RGB_CHANNEL_FIRST / APPLY_COLOR_PALETTE_FIRST の定数と、新しいアルファブレンディング/カラーテーブル/スケーリングのサンプルを追加しました。

  • ImageReader.next_frame() に、リアルタイム再生の遅延を無効化する pause キーワードが追加されました。

  • Portenta のオーディオサンプル(audio_fft.pymicro_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)

mtxrvulinalgumatrixvec のヘルパーライブラリは、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() はディスプレイの typeLCD_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 へきれいに移植するための一般的な作業は次のとおりです:

  1. mtx / rv / ulinalg / umatrix / vec の使用箇所を ulab に移植する(数学ライブラリの削除)。

  2. image.remove_shadows() / chrominvar() / illuminvar() の呼び出しを削除する(削除された画像メソッド)。

  3. image.draw_image() の呼び出しを新しいキーワードシグネチャに更新する(draw_image の作り直し)。

  4. 新しい lcdtype / framesize API に対して LCD スクリプトを見直す(LCD の書き直し)。

  5. yuv_to_* に Y を渡す際に −128 バイアスを取り除く(yuv_to_* の変更)。

それ以外のスクリプトはすべてそのまま動作します。