v4.8.0

v4.8.0 はメジャー機能リリースです。目玉となるのは、マルチカメラに対応した刷新されたクラスベースの csi カメラモジュール、Neural-ART NPU を搭載した OpenMV N6(STM32N6)ボード、NPU 推論バックエンド、GenX320 イベントカメラの RAW イベントモード、新しい crc モジュール、再編成された ML 後処理ライブラリ、そして MicroPython 1.26 です。また、いくつかのレガシー API(buzzer モジュールと fir モジュールの FLIR Lepton 制御)も削除されているため、以下の破壊的変更をお読みください。

ハイライト

  • 新しい csi カメラモジュール。 複数のカメラを同時に扱えるクラスベースの csi.CSI API で、レガシーの sensor モジュールと並行して導入されました。

  • OpenMV N6。 Neural-ART NPU、トリプルバッファリング、Soft-CSI、ToF モジュールを搭載した STM32N6 ボードです。

  • NPU 推論。 ハードウェアアクセラレーションによるモデル推論のための ST Neural-ART(STAI)バックエンドです。

  • GenX320 イベントモード。 RAW イベント出力に加え、イベントカメラのレンダリング向けの draw_event_histogram() を追加しました。

  • 再編成された ML 後処理 — ベンダーごとのサブパッケージ(ml.postprocessing.ultralyticsmediapipeedgeimpulsedarknet)と、新しい BlazeFace / BlazePalm および手・顔のランドマーク検出器を備えています。

  • 新しい crc モジュール — ハードウェアアクセラレーションによる CRC-16 / CRC-32 です。

  • MicroPython を 1.26.0 に更新しました。

  • 破壊的変更: buzzer モジュールと fir モジュールの Lepton 制御が削除されました(Lepton は通常のカメラになりました)。fir/Lepton の変更buzzer の削除 を参照してください。

新機能

  • 新しい csi カメラモジュール — クラスベースの csi.CSI オブジェクトで、複数カメラの同時使用(N6 では最大 3 台)、非ブロッキングのスナップショット、カスタムの (w, h) フレームサイズ、わかりやすい print() / repr を備えています。レガシーの sensor モジュールと並行して導入されており、置き換え用のドロップインではありません。

  • crccrc.crc16()crc.crc32()。OpenMV N6 および AE3 でハードウェアアクセラレーションされ、ソフトウェアフォールバックを備えています。

  • image.Image.draw_image()transform= キーワードが追加されました(アフィン/透視変換のための 2 次元 float の ndarray 行列で、STM32 と Alif では GPU アクセラレーションされます)。同じ変換は画像変換でも利用できます。

  • draw_event_histogram() — イベントカメラのヒストグラムをレンダリングします。

  • GenX320 RAW イベントモードcsi.GENX320_MODE_HISTO / csi.GENX320_MODE_EVENT を指定する csi.IOCTL_GENX320_SET_MODEcsi.IOCTL_GENX320_READ_EVENTScsi.IOCTL_GENX320_CALIBRATE、イベントタイプの定数、および新しいサンプルスクリプトを追加しました。

  • ML — ST Neural-ART(STAI)NPU 推論バックエンドを追加。ml.Modelpostprocess= キーワードが追加されました(後処理はコールバックがなくても predict() 内で自動的に実行されるようになりました)。ml.postprocessing はベンダーごとのサブパッケージに再編成されました — ml.postprocessing.ultralyticsYoloV5YoloV8)、ml.postprocessing.darknetYoloV2YoloLC)、ml.postprocessing.edgeimpulseFomo)、ml.postprocessing.mediapipeBlazeFaceBlazePalmHandLandmarksFaceLandmarks)— 従来のスネークケース名はエイリアスとして残されています。ml.utils.draw_keypoints()ml.utils.draw_skeleton() が追加され、同梱の ROMFS モデルが増えました(BlazeFace、YOLO-LC、YOLOv8n、手のひら/手/顔のランドマーク)。

  • audio — STM32N6 での MDF デジタルマイク入力に対応しました。

  • ディスプレイ — SSD1351 OLED ドライバとサンプルを追加。SPIDisplay コントローラは初期化コマンドをオーバーライドできるようになり、SPI ディスプレイのコンストラクタに hmirror / vflip キーワードが追加されました。

  • オンデバイスプロファイラ — 関数単位の計測を伴う SysTick + Armv8.1-M PMU のサイクル/イベントカウンタで、デバッグリンク経由で読み取れます(pyopenmv にプロファイリングと ELF シンボルのサポートが追加されました)。

  • 新しいセンサーのサポート — PixArt PS5520、OpenMV H7 Plus 上の FLIR BOSON、GenX320 の自動検出を追加しました。

その他の変更と改善

  • MicroPython を 1.26.0 に更新しました。

  • カメラ起動 — センサークロックが CSI の状態から分離され、起動時のカメラ検出が高速になり(最も一般的な構成が最初に試されます)、OpenMV 3 の OV7725 のデフォルトクロックが修正されました。

  • 画質 — ソフトウェア ISP のガンマ補正(Alif と STM32)と不良ピクセル補正(STM32)がデフォルトで有効になりました。PAG7936 および PS5520 センサーにオートホワイトバランス制御が追加されました。

  • パフォーマンスimage.Image.to_ndarray() が Helium SIMD でアクセラレーションされ、FOMO 後処理が ulab でベクトル化されました。

  • FLIR Lepton ドライバを書き直し、バックグラウンドで非同期にフレームを受信するようになりました。回転/transpose が動作するようになり、描画時にバイリニアでアップスケールされ、リセットが高速になりました。

  • キャプチャスループット — i.MX RT1062 の CSI が完全な DMA オフロードを使用するようになり、STM32 N6 はハードウェア GPU による draw_image() を備えました。

バグ修正

カメラとセンサー:

  • STM32 センサー全体、OpenMV H7 / H7 Plus 上の PAJ6100、OpenMV 2 の QVGA RGB565、N6 CSI のモノ / RGB-YUV 構成における RGB565 / GRAYSCALE / BAYER / YUV422 モードを修正しました。ソフトウェアテストカメラは決定論的にリセットされるようになりました。

  • オートホワイトバランスが低いフレームレートや変動するフレームレートで画像を緑がからせなくなり(100 フレームごとのサンプリングに代わって 250 ms の移動平均を使用)、PS5520 の輝度フリッカも修正されました。

画像処理:

  • 線描画のレンダリング不具合を修正。image.Image.flush() は呼び出された画像の JPEG バッファをフラッシュするようになりました。Normalization は float 入力に平均/標準偏差を適用するようになりました。ファイルからの画像のアロケーションも修正されました。

カメラキャプチャ:

  • 非 JPEG 転送での深刻な画像破損を修正(フレーム割り込みは JPEG モードでのみ有効になるようになりました)、JPEG モード 3 のサポート、STM32 における DMA ラインサイズおよび小バッファのロックアップを修正しました。VOSPI / Lepton の同期がより確実になり、特に N6 で改善されています。

その他:

  • omv.board_id() が RT1060 で正しい UID を返すようになりました。YoloV2 は明示的なアンカーなしで構築してもクラッシュしなくなりました。

ハードウェアとボードのサポート

  • OpenMV N6 — Neural-ART NPU、トリプルバッファリング、SPI LCD/TV 出力、Soft-CSI、tof モジュール、および同梱の ROMFS モデルを備えた STM32N6。

  • Arduino GIGA — MIPI DSI ディスプレイ出力。

  • 新しいセンサー — PixArt PS5520、OpenMV H7 Plus 上の FLIR BOSON、GenX320 の自動検出。

  • OpenMV Pure Thermal — FLIR Lepton が通常の(セカンダリ)カメラセンサーになりました。

  • Alif AE3 — ソフトウェア ISP のガンマ補正、crc モジュール、SPI の修正。

破壊的な API 変更

v4.7.0 から v4.8.0 の間でユーザーに影響する API の破壊的変更です。対象範囲: modules/ 内の Python C モジュールと scripts/libraries/ 内の Python ライブラリです。

各変更には影響度のタグが付けられています:

  • major — それを使っていたほとんどのスクリプトに修正が必要です。

  • minor — 限定的な API で、それを使っていたスクリプトにのみ影響します。

  • behavior — API は同じでも結果が異なります。チューニング済みのスクリプトを再確認してください。

  • tooling — ホストツールやソースからのビルドにのみ影響します。

変更は影響度ごとにその順序でグループ化されています — まず major、次に minorbehaviortooling です。コードを移植したいだけの場合は、末尾の 移行チェックリスト に進めば、やるべきことの一覧が簡潔にまとまっています。各コミットハッシュは GitHub 上の差分にリンクしています。

FLIR Lepton が fir モジュールから移動 (major)

FLIR Lepton は fir モジュール経由ではなく、通常のカメラセンサーとして駆動されるようになりました。Lepton 制御は fir から削除されました。FIR_LEPTON タイプと、radiometric()register_vsync_cb()register_frame_cb()get_frame_available()trigger_ffc() の各メソッドはなくなりました。Lepton は他のカメラと同じようにキャプチャしてください(OpenMV Pure Thermal ではセカンダリセンサーとして現れます)。Pure Thermal のサンプルは新しい API に合わせて書き直されました。Lepton 以外の fir センサー(Grid-EYE、MLX、AMG8833)は変更ありません。

Commits: bacfb7aeb, 117710566, 592a22902, 1a614202e

buzzer モジュールの削除 (minor)

buzzer モジュールは STM32 および i.MX RT ポートから削除されました。代わりに machine.PWM でブザーを駆動してください。PWM を使った Pure Thermal のブザーサンプルが追加されました。

Commits: ccb947924, 444120f2d

omv.disable_fb() の削除 (minor)

omv.disable_fb() 関数は削除されました。フレームバッファのストリーミングはカメラ API を通じて制御するようになりました。これに依存していたレガシーの RPC デスクトップスクリプトも削除されました。

Commits: 84c3db58a, 6fe99051c

csi は新規 — その API はまだ確定していません (minor)

csi モジュールは v4.8.0 で導入され、その API はリリース中に進化しました。csi.fb() は削除され、csi.CSI.snapshot()(image=...)ミュータブルな 画像を要求するようになり、生のディープコピーを行う代わりにキャプチャしたフレームをそこへ描画/スケーリングするようになりました。新モジュールを早期に採用した方は再テストしてください。レガシーの sensor API は影響を受けません。

Commits: 0bc0385eb, 8cd7a309f

image.ImageIO のストリームモードと close() (minor)

image.ImageIOmode 引数は小文字の 'r' / 'w' のみを受け付けるようになり(大文字は更新されたエラーメッセージで拒否されます)、'w' で開くと既存のストリームを保持する代わりに常にファイルを切り詰め/再作成します。ImageIO.close() は冪等になり(すでに閉じているストリームを閉じても例外を送出しなくなりました)、ストリームオブジェクトではなく None を返します。

Commits: 715c4cbba, 21ceec422

BlazeFace / BlazePalm の戻り値 (minor)

BlazeFace および BlazePalm 後処理(本リリースで新規追加)は、クラスごとの完全なリストではなく単一のバウンディングボックスリストを返すようになりました。呼び出し側は [0] ではなく結果を直接インデックスしてください。

Commit: 75e16b573

ML 後処理コールバックが生のテンソルを受け取る (behavior)

ml.Modelpredict() 後処理コールバックは、事前変換された float の ndarray ではなく生の(量子化された)出力テンソルの参照を受け取るようになりました — これにより大きなモデルでのメモリ枯渇を回避できます。コールバックが指定されていない場合は、引き続き float の ndarray が返されます。カスタムコールバックはテンソルを自分で逆量子化する必要があります(組み込みの後処理はすでに対応しています)。

Commit: 84e6ee650

カメラクロックが CSI の状態から分離 (behavior)

センサークロックは CSI の状態とは独立になりました。set_clock / set_frequency は、要求された周波数が許容範囲を超えて異なる場合にのみクロックを再構成し、get_clk_frequency は(公称ではなく)正確な周波数を返すためのブール値を取ります。デフォルトのクロックは OpenMV N6 と AE3 で 24 MHz なので、起動時に明示的な set_clock() は不要です。タイミングに敏感なキャプチャのためにクロックを切り替えていたスクリプトは、前提を再確認してください。

Commits: 2040a0a00, 09c0052df, 66ade9aea, 7e0a251bc, e6f43f3ca

USB デバッグプロトコルとファームウェアターゲット (tooling)

これらはいずれも MicroPython スクリプトには影響しません。廃止された USBDBG コマンド(SCRIPT_SAVETEMPLATE_SAVEDESCRIPTOR_SAVEATTR_READATTR_WRITETX_INPUTSET_TIME)が削除され、古い IDE からのサポートされていないコマンドは、接続時に TinyUSB ボードをクラッシュさせる代わりにフラッシュ(破棄)されるようになりました。レガシーの STM32 UVC ファームウェアターゲットは削除されました。古いホストツールは更新してください。詳細は ファームウェアリポジトリ の履歴を参照してください。

Commits: 90bd11e93, 657c9a632, 35182f035

移行チェックリスト

v4.8.0 へきれいに移植するための一般的な作業は次のとおりです:

  1. FLIR Lepton を fir 経由で使っていた場合は、カメラセンサーとしてキャプチャする方式に切り替えてください(fir/Lepton の変更)。

  2. buzzer の使用箇所を machine.PWM に置き換えてください(buzzer の削除)。

  3. omv.disable_fb() の呼び出しを削除してください(omv.disable_fb() の削除)。

  4. image.ImageIO については、小文字の 'r'/'w' を使用し、'w' が切り詰めることを想定してください(ImageIO の変更)。

  5. カスタム ML 後処理コールバックについては、生のテンソル参照を自分で逆量子化するか、デフォルトの float パスに依存してください(コールバックの変更)。

  6. タイミングに敏感なキャプチャのためにセンサークロックを操作していたスクリプトを再確認してください(クロックの変更)。