v3.9.0

v3.9.0 はメジャーリリースです。nRF ポートArduino Nano 33 BLE Sense(カメラ、PDM audio モジュール、ulab、フリーズされたセンサードライバ)を追加し、FLIR Lepton に加えて MLX90641 / MLX90621 サーマルセンサー、および大幅に再構築された fir モジュール、OV5640 の オートフォーカス ioctl、新しい image.ImageIO ストリーミング型をもたらします。レガシーの CMSIS-NN nn モジュールと古い ImageReader / ImageWriter クラスは削除されました。以下の破壊的変更をお読みください。

ハイライト

  • Arduino Nano 33 BLE Sense — カメラ、PDM audio モジュール、ulab、フリーズされたセンサードライバを備えた新しい nRF52840 ポート。

  • サーマル — 再構築された fir モジュール(パレット、ミラーリング、スケーリング、放射測定、FFC)とともに FLIR Lepton、MLX90641、MLX90621 をサポート。

  • OV5640 オートフォーカス — 新しい sensor.IOCTL_*_AUTO_FOCUS ioctl。

  • image.ImageIOImageReader / ImageWriter を置き換える統一された画像ストリーム型(メモリまたはファイル。read/write/seek/size/close 対応)。

  • 破壊的変更: CMSIS-NN nn モジュールと image.ImageReader / image.ImageWriter が削除され、find_lines() / fir の挙動が変更されました。破壊的変更を参照してください。

新機能

  • nRF ポート / Arduino Nano 33 BLE Sense — 新しい nRF52840 ポートとボードサポート。新しい audio モジュール(audio.init()audio.start_streaming()audio.stop_streaming())、有効化された ulab、フリーズされた apds9960 / lps22h / lsm9ds1 / hts221 センサードライバを備えています。

  • image.ImageIOread() / write() / seek() / size() / close() を介してメモリストリームとファイルストリームの両方をサポートする新しい画像ストリーム型。ImageIO の read/write/memory の例も追加しました。

  • FLIR Leptonfir.radiometric()fir.trigger_ffc()fir.register_vsync_cb() とともに FIR_LEPTON サポートを追加しました。

  • サーマルセンサー — MLX90641(FIR_MLX90641)および MLX90621 サーモパイルのサポートを追加しました(公式の Melexis ドライバ)。

  • fir のパレット/向き — fir.PALETTE_RAINBOW / PALETTE_IRONBOW / GRAYSCALE / RGB565 定数を追加し、fir.read_ir()hmirror / vflip / transpose を受け付けるようになりました。

  • OV5640 オートフォーカスsensor.IOCTL_TRIGGER_AUTO_FOCUS / IOCTL_PAUSE_AUTO_FOCUS / IOCTL_RESET_AUTO_FOCUS / IOCTL_WAIT_ON_AUTO_FOCUS を追加しました(OpenMV 2/3/4/4 Plus/PT/Portenta)。

  • Arduino の例をボードごとのディレクトリに再編成しました。

その他の変更と改善

  • 圧縮された MicroPython エラーメッセージ(より短い例外文字列)に切り替えました。fir.init()type 引数は省略された場合に I2C バススキャンで自動検出するようになりました。xalloc 例外は要求されたバイト数を報告するようになりました。Portenta で UART 8 を有効化しました。FIR の例は thermal_camera.py / thermal_overlay.py / thermal_overlay_lcd.py に統合されました。フラッシュに収めるため、OpenMV 4 ビルドでは image.get_similarity() とセレクティブサーチを無効化し、画像ライブラリをファイルシステムなしでビルドできるようにしました(ファイルシステムを持たないボード向け)。

バグ修正

カメラとセンサー:

  • OV5640 の PCLK 計算を修正し、不足していた I2C IRQ ハンドラを追加し(I2C 転送のハングを修正)、信頼性のために cambus の I2C 読み書きを再構築し、Lepton の I2C バスを選択可能にし、cambus のバス復旧ピンをボードごとの設定に移動し、失敗前に cambus スキャンを一度リトライするようにし、OpenMV PT(Lepton + カメラの共有 I2C)を動作させました。

サーマル:

  • firget_ir() / draw_ir() および image.get_similarity() における最大値計算(FLT_MIN-FLT_MAX)、AMG8833 の 12→16 ビット処理、MLX90621 の精度(公式の Melexis ドライバ)を修正しました。

ディスプレイ、オーディオ、システム:

  • STM32 SPI LCD の転送を HAL SPI コールバックに移動し(ディスプレイの信頼性向上)、Nano 33 の audio.init()(HF オシレータ + PDM 比率を修正してマイクが動作するように)、新しい HAL での H7 タイマー状態、nRF の gc_collect と初期のボード init/deinit を修正し、find_apriltags() / find_rects() 実行中に表示される誤った "uh oh, no preference for overlapping detection" メッセージの出力を停止しました。

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

  • Arduino Nano 33 BLE Sense — 新しい nRF52840 ボード(カメラ、PDM オーディオ、ulab、フリーズされたセンサードライバ)。

  • FLIR LeptonMLX90641MLX90621 サーマルセンサー。

  • OV5640 オートフォーカス — OpenMV 2/3/4/4 Plus/PT/Portenta。

  • Portenta — UART 8 を有効化。

破壊的 API 変更

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

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

  • major — その機能を使用したほとんどのスクリプトに影響します。コードの移植が必要になります。

  • minor — 狭い範囲の API。それを使用していたスクリプトにのみ影響します。

  • behavior — API は同じだが結果が異なる。調整済みのスクリプトを再確認してください。

変更はこの順で影響度ごとにグループ化されています。コードを移植したいだけであれば、末尾の 移行チェックリスト に進んでください。各コミットハッシュは GitHub 上の差分にリンクしています。

CMSIS-NN nn モジュールの削除 (major)

CMSIS-NN nn モジュールが削除されました。nn.load()net.forward()net.search()nn_class ヘルパーが含まれます。モデル推論は TensorFlow Lite(tf)モジュールに移行します。nn.network モデルを読み込んでいたスクリプトは、TensorFlow Lite モデルを使って tf に移植する必要があります。

コミット: fbc767b36

ImageReader / ImageWriterimage.ImageIO に置き換え (major)

image.ImageReader / image.ImageWriter とその next_frame() / add_frame() メソッドが削除され、read() / write() / seek() / size() / close() を介してメモリストリームとファイルストリームの両方をサポートする新しい image.ImageIO 型に置き換えられました。古いリーダー/ライタークラスを使用しているコードは image.ImageIO に移植する必要があります(名称変更された imageio_read.py / imageio_write.py の例を参照)。

コミット: 783a78754

fir.draw_ir()scale キーワードを削除 (minor)

fir.draw_ir() は新しい画像描画パイプラインの上に書き直されました。scale=(min, max) キーワードは削除され、hintx_scaley_scaleroi、および位置指定の x/y オフセット引数が追加されました。fir.draw_ir()scale=(min, max) を渡していたスクリプトは、それを削除して新しい引数を使用する必要があります。

コミット: 0a29103b1

find_lines() の近似計算 (behavior)

image.find_lines() は勾配の大きさを (abs(gx) + abs(gy)) / 2 として近似し、126 未満の大きさをスキップするようになりました。これは高速ですが、検出される線の集合とアキュムレータ値が変わるため、threshold / theta_margin / rho_margin を再確認・再調整してください。

コミット: 902ae3c98

fir.snapshot() の再構築 (behavior)

fir.snapshot() は新しいキーワード API(hmirrorvfliptransposex_scaley_scalex_sizey_sizescalergb_channelalphacolor_palettehintpixformatcopy_to_fb)で大幅に再構築され、同梱の例も書き直されました。従来の位置指定/pixformat のみの挙動が変更されたため、FIR スクリプトを新しいキーワード形式に移植してください(更新された Thermopile シールドの例を参照)。

コミット: 53f2248b8

fir.init() が失敗時に例外を送出 (behavior)

fir.init() は、サーマルセンサーが検出されない場合に黙って続行する代わりに、例外を送出(してクリーンに de-init)するようになりました。以前これが例外を送出しないことに依存していた箇所では、fir.init()try / except で囲む(またはセンサーが接続されていることを確認する)ようにしてください。

コミット: 4b2f972f3

移行チェックリスト

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

  1. CMSIS-NN nn のモデル推論を TensorFlow Lite tf モジュールに移植してください(nn の削除)。

  2. image.ImageReader / image.ImageWriterimage.ImageIO に置き換えてください(ImageIO の変更)。

  3. fir.draw_ir() から scale=(min, max) キーワードを削除し、新しい引数を使用してください(draw_ir の変更)。

  4. 近似された大きさの指標に対して find_lines() のパラメータを再調整してください(find_lines の変更)。

  5. FIR スクリプトを新しい fir.snapshot() キーワード API に移植し(fir.snapshot の変更)、センサーが見つからない場合に fir.init() が例外を送出することに対処してください(fir.init の変更)。

その他のすべてのスクリプトは変更なしで動作します。