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() は画像の幅と高さが偶数であることを必要とするようになり、奇数の寸法ではエラーを発生させます。これらのメソッドを呼び出す前に、画像を偶数の寸法にクロップまたはリサイズしてください。
移行チェックリスト¶
v3.6.1 へのクリーンな移植では、一般的な作業は次のとおりです:
sensor.set_framerate()の呼び出しを削除する(set_framerate の削除)。TensorFlow のワークロードを OpenMV Cam M7 から移す(M7 の TensorFlow 変更)。
set_pixformat()/set_framesize()の戻り値に依存するのをやめ、サポートされていないピクセルフォーマットに対してValueErrorをキャッチする(戻り値の変更)。lens_corr()/linpolar()/logpolar()の前に画像の寸法が偶数であることを確認する(偶数寸法の要件)。
その他のすべてのスクリプトは変更なしで動作します。