v3.0.0

v3.0.0 はメジャーな v2 → v3 リリースです。OpenMV Cam M7(STM32F7)と新しい nn CMSIS-NN ニューラルネットワークモジュール(旧来のハードコードされた find_number() / classify_object() メソッドを置き換え)を導入し、MT9V034 グローバルシャッターFLIR Lepton センサーのサポート、sensor.WVGA フレームサイズを追加し、コアを MicroPython 1.9.4 に更新しました。いくつかの image / sensor / WiFi の動作が変更されました。以下の破壊的変更をお読みください。

ハイライト

  • OpenMV Cam M7 — 新しい STM32F7 ボード。

  • nn モジュール — CMSIS-NN 推論: nn.load()Net.forward()Net.search()。モデルコンバータと例が含まれます。

  • 新しいセンサー — MT9V034 グローバルシャッター(FSIN トリガー)と FLIR Lepton。

  • MicroPython 1.9.4 コア更新。

  • 破壊的変更: ハードコードされた image.find_number() / image.classify_object() が削除され、sensor.sleep() は例外を送出するようになり、WINC ソケットは実際のバイト数を返すようになり、image.binary() は新しい画像を返すようになり、find_apriltags() は 64K ピクセルに上限が設けられました。破壊的変更を参照してください。

新機能

  • nn — 新しい CMSIS-NN ニューラルネットワークモジュール: nn.load(path)Net.forward(img, roi=, softmax=, dry_run=)(0.0〜1.0 の浮動小数点数を返す)、マルチスケール/位置検出のための Net.search()、および Net.test()。加えて CMSIS-NN モデルコンバータ(nn_convert.py / nn_quantizer.py)、バンドルされた CIFAR-10 / LeNet / スマイルモデル、NN / NN 検索のサンプルスクリプトが含まれます。

  • センサー — OpenMV 4 での MT9V034 グローバルシャッターサポート(FSIN トリガーのスナップショット)、Lepton スナップショットを備えた更新済み FLIR Lepton ドライバ、および新しい sensor.WVGA(720x480)/ sensor.WVGA2(752x480)フレームサイズ。

  • イメージングimage.find_circles()r_min / r_max / r_step キーワードが追加され(より高速な Hough)、find_keypoints() と Haar の find_features() が RGB 画像を受け付けるようになり、image.compress() / JPEG エンコードがバイナリ(ビットマップ)画像をサポートするようになりました。

  • ブートboot.py が USB の初期化前に実行されるようになり、USB モード(例: HID)をオーバーライドできるようになりました。

  • — 小型/高解像度の AprilTag の例、I2C LIDAR-Lite V3 の例、およびデータセットツール(augment_images.py / make_patches.py)を追加しました。

その他の変更と改善

  • バンドルされた MicroPython を 1.9.4 に更新(pyexec の parse/compile/exec のリバートと PendSV の修正を含む)、fb_alloc / xalloc のメモリ不足エラーメッセージをより明確化、ネットワーク読み込み中の nn の printf ノイズを抑制、リポジトリを再編成(examples → scripts/、tools → tools/、Haar カスケード → ml/)しました。nn モジュールは OpenMV 2 では利用できません(フラッシュ容量が不足)。

バグ修正

イメージング:

  • x≤0 における fast_atan2f を修正(以前は常に 0 でした。ブロブ/ライン/キーポイントの角度を再確認してください)、find_apriltags() のメモリ処理(OOM 時の内容破棄と不正な realloc)、バイナリ/ビットマップの bpp ごとの行ポインタ(バイナリ結果の破損)、ROI 付きの find_edges(EDGE_CANNY)TO_GS_PIXEL マクロ(積分/モルフォロジー)、グレースケール(bpp==0)フレームのビットマップ/JPEG ストリーミング、キーポイント/ブロブリストの pop_front、および match_descriptor の結果を修正しました。

システムとカメラ:

  • USB HID のインターフェース/エンドポイント番号、実行時の XCLK 周波数の動的変更、正しい数の出力を返す Net.forward()、およびスクリプト解析を中断した際のハードフォルトを修正しました。

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

  • OpenMV Cam M7(STM32F7) — 新しいボード。

  • MT9V034 グローバルシャッターセンサー(OpenMV 4、FSIN トリガー)。

  • FLIR Lepton — スナップショットサポート付きの更新済みドライバ。

破壊的な API 変更

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

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

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

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

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

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

image.find_number() / image.classify_object() を削除 (major)

ハードコードされた image.find_number()(LeNet)および image.classify_object()(CMSIS CNN)メソッドは、新しい nn モジュールに置き換えられて削除されました。これらを net = nn.load('/model.network'); out = net.forward(img) に置き換えてください。

コミット: d151f7e38

sensor.sleep() / sensor.reset() が失敗時に例外を送出 (minor)

sensor.sleep()sensor.reset() は、失敗時に True / False を返す代わりに例外を送出するようになりました。sensor.sleep() のブール戻り値をチェックしていたコードは、代わりに呼び出しを try / except でラップする必要があります。

コミット: 7d16d008f

WINC ソケットが実際のバイト数を返す (behavior)

WINC1500 ソケットの send / recv / sendto / recvfrom メソッドは、以前は常に 0 を返していましたが、実際に転送されたバイト数を返すようになりました。0 の戻り値を前提としていた(またはそれをループ/ブロックしていた)コードは、実際のカウントを処理する必要があります。

コミット: a07fb2f60

image.binary() が新しい画像を返す (behavior)

image.binary()to_bitmap / copy キーワードが追加され、ソース画像をその場で返却/変更する代わりに、新しい画像オブジェクトを返すようになりました。binary() が元の画像を変更することに依存していたコードは、返されたオブジェクトを使用する必要があります(非インプレース動作のためには copy=True を渡してください)。

コミット: 8a44f0cd9

find_apriltags() が 64K ピクセルに上限設定 (behavior)

image.find_apriltags() は、画像(または ROI)が 64K ピクセルを超える場合に例外を送出し、4x4 より小さい画像に対しては空のリストを返すようになりました。find_apriltags() を呼び出す前に、大きな画像を縮小してください(より小さい framesize を使用するか、明示的な roi を渡してください)。

コミット: bd77afbc0

移行チェックリスト

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

  1. image.find_number() / image.classify_object()nn モジュールに置き換える(nn への移行)。

  2. ブール戻り値をチェックする代わりに、sensor.sleep() / sensor.reset()try / except でラップする(sensor.sleep の変更)。

  3. WINC ソケットの send / recv からの実際のバイト数を処理する(WINC ソケットの変更)。

  4. インプレース変更を期待する代わりに、image.binary() が返す画像を使用する(binary の変更)。

  5. 64K ピクセル未満に保つために、find_apriltags() の前に画像を縮小する(find_apriltags の上限)。

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