v3.6.1

v3.6.1 は大きなリリースです。imu モジュール(LSM6DS3)、IMU 駆動の自動回転 を備えた一連の新しい sensor ゲッター API、4 点透視の rotation_corr() を導入し、HIMAX HM01B0 および OV7690 カメラとともに Arduino Portenta H7 を立ち上げます。いくつかの sensor / image API が変更され、M7 では TensorFlow が削除されました。以下の破壊的変更をお読みください。

ハイライト

  • imu モジュール — LSM6DS3(OpenMV 4 / Portenta)での加速度計 / ジャイロ / 温度 / ロール / ピッチ。

  • センサーゲッター + 自動回転get_pixformat() / get_framesize() / get_hmirror() / get_vflip() / get_windowing()set_transpose() / set_auto_rotation()、そして IMU 駆動のスナップショット回転。

  • 透視補正rotation_corr()fov および corners(4 点)キーワードが追加されました。

  • 新しいハードウェア — Arduino Portenta H7、HIMAX HM01B0、OV7690 カメラ。

  • 破壊的変更: set_pixformat() / set_framesize()None を返すようになり、sensor.set_framerate() は削除され、M7 では TensorFlow が削除され、lens_corr() / linpolar() は偶数の寸法を必要とするようになりました。破壊的変更を参照してください。

新機能

  • imu — 新しい IMU モジュール: imu.acceleration_mg()imu.angular_rate_mdps()imu.temperature_c()imu.roll()imu.pitch()imu.sleep()(OpenMV 4 / Portenta の LSM6DS3)。

  • センサーゲッターsensor.get_pixformat()get_framesize()get_hmirror()get_vflip()get_windowing()set_transpose() / get_transpose()set_auto_rotation() / get_auto_rotation() を追加しました。

  • 自動回転sensor.snapshot() は、自動回転が有効な場合に IMU を使用してフレームを反転 / ミラー / 転置します。

  • rotation_corr()fov および corners(4 点透視)キーワードと、透視補正の例を追加しました。

  • lcd.init()bgr キーワード引数を追加しました。

  • collections.deque — MicroPython ビルドで有効化しました。

  • sensor.OV7690 および sensor.HM01B0 の id 定数と、numpy 風の ulab 画像フィルタの例を追加しました。

その他の変更と改善

  • 画像フィルタ(median / mode / mean / …)、find_circles()、レンズ補正を大幅に最適化しました。alloc_extra_fb は任意のバイト数を割り当てられるようになりました。人物検出モデルは新しい average-pool 演算で再構築されました。

バグ修正

カメラとセンサー:

  • OV2640 の sleep()(パワーダウンピンの代わりに COM2 スタンバイレジスタを使用するようになりました)、FSYNC ピンの設定、HM01B0 の HSYNC/VSYNC 極性と I2C アドレス/スキャン、Portenta のセンサーパワーダウン GPIO とカメラリセットピンを修正し、IMU ピッチが 90°/270° 付近のときに自動回転を無効化しました。

イメージングとシステム:

  • 画像フィルタの境界チェックのバグ、D-cache 無効化時のハードフォルト、SD カードのないボードでの起動、tf.load()load_to_fb バグ、人物検出のスタックオーバーフロー(H7 のスタックを 12 KB 以上に引き上げ)、および OpenMV 4 Plus のハイスピードモード用 USB ディスクリプタオフセットを修正しました。

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

  • Arduino Portenta H7 — 初期ボード立ち上げ(STM32H747 のクロック/OSC/HSE 設定、CMSIS ヘッダー、ADC、SDRAM、Arduino USB PID)。

  • HIMAX HM01B0 — 新しいモノクロカメラドライバ(Bayer、外部発振器クロック)。

  • OV7690 — 新しいカメラドライバ。

  • LSM6DS3 IMU — OpenMV 4 / Portenta。

破壊的 API 変更

v3.6.0 と v3.6.1 の間でのユーザーから見える API の破壊的変更。範囲: modules/ 内の Python C モジュールと scripts/libraries/ 内の Python ライブラリ。

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

  • minor — 限定的な API。使用していたスクリプトのみに影響します。

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

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

sensor.set_framerate() の削除 (minor)

何もしないスタブだった sensor.set_framerate() は削除されました。呼び出すと AttributeError が発生するようになりました。この呼び出しを削除し、代わりに framesize/exposure でフレームのタイミングを制御してください。(動作する set_framerate() は v4.0.2 で再導入されます。)

コミット: 705e98f91

OpenMV Cam M7 で TensorFlow を削除 (minor)

TensorFlow(tf モジュール)は OpenMV Cam M7 / OpenMV 3 で無効化されました(もう収まりません)。M7 での import tf は失敗します。TensorFlow には H7 クラスのカメラを使用してください。(tf は v3.6.3 で F7 において再び有効化されます。)

コミット: 2ae875077

set_pixformat() / set_framesize()None を返す (behavior)

sensor.set_pixformat()sensor.set_framesize()True の代わりに None を返すようになり、サポートされていないピクセルフォーマットはアサーションの代わりに ValueError を発生させるようになりました。戻り値をチェックしていたコード(例: if sensor.set_pixformat(...):)はそれをやめる必要があり、サポートされていないフォーマットに対して AssertionError をキャッチしていたコードは ValueError をキャッチする必要があります。

コミット: f314ac4e7

lens_corr() / linpolar() / logpolar() は偶数の寸法を必要とする (behavior)

image.lens_corr() および image.linpolar() / image.logpolar() は画像の幅と高さが偶数であることを必要とするようになり、奇数の寸法ではエラーを発生させます。これらのメソッドを呼び出す前に、画像を偶数の寸法にクロップまたはリサイズしてください。

コミット: b36460a362b26ca17b

移行チェックリスト

v3.6.1 へのクリーンな移植では、一般的な作業は次のとおりです:

  1. sensor.set_framerate() の呼び出しを削除する(set_framerate の削除)。

  2. TensorFlow のワークロードを OpenMV Cam M7 から移す(M7 の TensorFlow 変更)。

  3. set_pixformat() / set_framesize() の戻り値に依存するのをやめ、サポートされていないピクセルフォーマットに対して ValueError をキャッチする(戻り値の変更)。

  4. lens_corr() / linpolar() / logpolar() の前に画像の寸法が偶数であることを確認する(偶数寸法の要件)。

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