v4.7.0¶
v4.7.0 は主要な機能リリースです。目玉として、デュアルコアの openamp プログラミングモデルを備えた新しい OpenMV AE3(Alif Ensemble、Cortex-M55 + Ethos-U55 NPU)ボード、同梱のモデルとカスケードを含む読み取り専用の ROMFS(/rom)ファイルシステム、VL53L8CX 8x8 time-of-flight サポート、新しい YOLOv8 / YOLO-LC 後処理、MicroPython 1.25 が追加されました。組み込みモデルと Haar カスケードのロード方法も変更されているため、以下の破壊的変更をお読みください。
ハイライト¶
OpenMV AE3 ボード — Alif Ensemble(Cortex-M55 + Ethos-U55 NPU)ボード。完全なポート、ブートローダー、ROMFS を備えています。
デュアルコア
openampモジュール — RPMsg 経由で 2 つ目の Alif コアに処理をオフロードします(@async_remoteデコレータ、Endpoint/EndpointIO)。ROMFS — 組み込みの TFLite モデルと Haar カスケードを含む読み取り専用の
/romファイルシステム。さらに新しいtools/mkromfs.pyホストビルダーも追加されました。VL53L8CX 8x8 マルチゾーン time-of-flight センサーのサポート。
新しい ML 後処理 —
yolo_v8_postprocessとyolo_lc_postprocess。MicroPython が 1.25.0 に更新されました。
破壊的変更: 組み込みモデルと Haar カスケードは、パスによって
/romからロードされるようになりました(ml.Model の変更 および Haar カスケードの変更 を参照)。
新機能¶
OpenMV AE3 — 新しい Alif Ensemble ボード(Cortex-M55 アプリケーションコア + Ethos-U55 NPU)。ポート、ブートローダー、ボード設定、RGB LED、ROMFS サポートを備えています。
openamp— Alif デュアルコア(Open-AMP / RPMsg)RPC モデル用の新しいモジュール:Endpoint、EndpointIO、new_service_callback、およびマーシャリングされた関数を 2 つ目のコアにオフロードする@async_remoteデコレータ。HE/HP コアは、デフォルトの asyncio ベースの_boot.pyタスクランナーを搭載しています。audio— Alif ポートは、AE3 上でコールバックベースのストリーミング API(audio.init(channels=, frequency=, gain_db=, buffers=, samples=, overflow=, highpass=))を備えた audio モジュール(PDM マイク)を追加します。ROMFS — ボードごとにパッケージ化された組み込みアセット(TFLite モデル、Haar カスケードなど)を含む読み取り専用の
/romファイルシステム、新しいtools/mkromfs.pyホストツール(tflite、tflite+vela、Haar カスケード、テキスト、バイナリ)、およびls_romfs()を公開するscripts/libraries/romfs.pyヘルパー。ML 後処理 — 新しい
yolo_v8_postprocess(YOLOv8)とyolo_lc_postprocess(組み込み向けに最適化されたデフォルトの anchors を備えた軽量な tiny-YOLOv2 バリアント)クラス。それぞれthreshold、nms_threshold、nms_sigmaを取ります。GenX320 アンチフリッカー — イベントセンサーのアンチフリッカーフィルター(最小/最大フリッカー周波数を Hz 単位で指定)を有効化および設定する新しい
IOCTL_GENX320_SET_AFKioctl。genx320_grayscale_set_afk.pyの例が付属します。VL53L8CX —
tofモジュールを通じた 8x8 マルチゾーン time-of-flight センサーのサポート(自動検出、15 Hz で 8x8)。
その他の変更と改善¶
MicroPython が 1.25.0 に更新されました(STM32 と i.MX RT のポート)。アップストリームの Alif ポートが追加され、従来の BT-HCI ドライバーが STM32 / i.MX RT のポートから削除されました。
GenX320 — 新しい ISSD シーケンスにより、内部ピクセルクロックが 2 倍(24 → 48 MHz)になり、より高いフレームレートが得られます。
STM32N6 / ST Edge AI — STM32N6 Neural-ART モデルデプロイの基盤整備(ST Edge AI ツールと ROMFS サポート)。
PAG7936 — CSI PHY ビットレートが設定されるようになり、このセンサーの動作が改善されました。
バグ修正¶
カメラとセンサー:
I2C 経由の IMU を修正しました — LSM6DSx IMU を I2C で配線しているボードが、正しく初期化および読み取りできるようになりました(I2C パスは以前、壊れた読み取りパスと誤った定数を使用していました)。
FLIR Boson の初期化は、起動に約 10 秒かかる古い(< IDD 4.x)センサーに対して最大 10 回リトライするようになりました。また、リセット時に工場出荷時のデフォルト設定が復元されるため、外部からロードされた設定がビデオ出力を壊すことがなくなりました。
GenX320 の
psee_ehc_activate_overrideが誤った(ゼロの)累積時間を書き込んでいた問題を修正しました。FastMode+ ハードウェアを持たない STM32 ボードでは、I2C ファストモードの要求が、バスを暗黙的に誤設定する代わりに適切にガードされるようになりました。
機械学習:
YOLOv2 / YOLOv5 後処理におけるバウンディングボックスの収集と
np.nonzeroの処理を修正し、検出の信頼性を向上させました。
ハードウェアとボードのサポート¶
OpenMV AE3 — 新しい Alif Ensemble(Cortex-M55 + Ethos-U55 NPU)ボード。
VL53L8CX — 8x8 マルチゾーン time-of-flight センサー。AE3 の ToF センサーは VL53L5CX から VL53L8CX に切り替えられました。
STM32N6 — ST Edge AI(Neural-ART)モデルデプロイの基盤整備。
破壊的な API 変更¶
v4.6.20 と v4.7.0 の間でユーザーから見える API の破壊的変更。対象範囲: modules/ 内の Python C モジュールと scripts/libraries/ 内の Python ライブラリ。
各変更には影響度のタグが付いています:
major — それを使用していたほとんどのスクリプトで編集が必要です。
minor — 限定的な API。それを使用していたスクリプトにのみ影響します。
behavior — 同じ API ですが結果が異なります。調整済みのスクリプトを再確認してください。
変更はその順序で影響度ごとにグループ化されています。コードを移植したいだけの場合は、末尾の 移行チェックリスト に進み、まとめられた ToDo リストを参照してください。各コミットハッシュは GitHub 上の diff にリンクしています。
組み込みモデルは名前ではなくパスでロードされます (major)¶
ml.Model は、組み込みモデルを単なる名前文字列からロードしなくなりました。モデルはパスによってファイルシステム / ROMFS からロードされるようになりました:
model = ml.Model("/rom/person_detect.tflite") # was: ml.Model("person_detect")
C 側の model.labels 属性は削除されました。ラベルは、Python の ml.Model ラッパーによってサイドカーの <model>.txt ファイルからロードされるようになりました(存在しない場合は None)。同梱のすべての例と ml/apps.py は /rom/*.tflite パスに更新されました。
Haar カスケードは ROMFS からロードされます (minor)¶
image.HaarCascade() は、組み込みカスケードを VFS / ROMFS を通じてロードするようになりました。デフォルトの正面顔カスケードファイルは haarcascade_frontalface_default.xml から haarcascade_frontalface.xml に名称変更され、ロード失敗時は OSError の代わりに RuntimeError("Failed to load Haar cascade")が発生するようになりました。
Commit: 9de1220d8
tof.reset() / tof.deinit() のセマンティクス (behavior)¶
tof モジュールでは、reset() は以前 init() のエイリアスであり、実際の deinit はありませんでした。tof.reset() は実際のセンサーリセットを実行するようになり、tof.deinit() はセンサーを適切にシャットダウンするようになりました(VL53L5CX のシャットダウンサポート付き)。reset() がセンサーを再初期化することに依存していたコードは再確認する必要があります。
GenX320 のタイミングとイベントモードの制約 (behavior)¶
新しい GenX320 ISSD シーケンスにより、センサーの時間基準が変わります: フレームレートと露出の引数は、クロックスケールされる代わりに 1 MHz 単位で表現されるようになり、HSYNC ブランキングは要求されたフレームレートに動的に調整されます。GenX320 のタイミング値をハードコードしていたスクリプトは再調整する必要があります。イベントモードのキャプチャは、画像の transpose が有効な場合にエラーを発生させるようになりました(その構成ではサポートされていません)。
移行チェックリスト¶
v4.7.0 にクリーンに移植するための一般的な作業は次のとおりです:
組み込みモデルのロードを名前文字列から
/rom/<name>.tfliteパスに変更し、サイドカーの<name>.txtファイル経由でラベルを提供します(ml.Model の変更)。haarcascade_frontalface_default.xmlをhaarcascade_frontalface.xmlに更新し、カスケードのロード失敗時に(OSErrorではなく)RuntimeErrorをキャッチします(Haar カスケードの変更)。tof.reset()がセンサーを再初期化することに依存していたコードを削除します(tof の変更)。ハードコードされた GenX320 のフレームレート / 露出値を 1 MHz 単位に再調整し、イベントモードでは transpose を有効にしないようにします(GenX320 の変更)。