v2.1.0

v2.1.0 は大規模な API 近代化リリースです。FREAK キーポイントディスクリプタを ORB に置き換え、find_blobs() / ヒストグラム / 統計をオブジェクトベースの API に作り直し、sensor の自動露出/ゲイン/ホワイトバランス関数の名前を変更し、QR コード検出と OV7725 のレンズ補正を追加し、初期段階の OpenMV Cam M7 ボードを立ち上げます。多くの API が変更されています。以下の破壊的変更をお読みください。

ハイライト

  • ORB キーポイント — FREAK ディスクリプタが ORB に置き換わりました(find_keypoints()match_descriptor() を作り直し)。

  • オブジェクト APIfind_blobs()get_histogram()get_statistics() が名前付きアクセサを持つオブジェクトを返すようになりました。

  • QR コードimage.find_qrcodes() による検出を追加しました。

  • OpenMV Cam M7 — 初期段階のボードサポート。

  • センサーset_auto_whitebal()set_auto_gain()set_auto_exposure()(改名)と set_lens_correction()

  • 破壊的変更: キーポイント/ディスクリプタ、ブロブ/ヒストグラム/統計、センサーの自動関数、その他いくつかの API が変更されました。破壊的変更を参照してください。

新機能

  • OpenMV Cam M7 — 初期段階の OpenMV 3(M7)ボードサポートを追加しました。

  • QR コードqrcodes.py の例とともに image.find_qrcodes() を追加しました。

  • ORB キーポイント — 新しい ORB ディスクリプタシステム: corner_detector 引数(CORNER_FASTCORNER_AGAST)、max_keypointsscale_factor を備えた find_keypoints()filter_outliers キーワードと回転推定を備えた match_descriptor()、そしてキーポイントの保存/読み込み。

  • オブジェクト APIimage.get_histogram()get_statistics()get_percentile() がヒストグラム/統計オブジェクトを返します。find_blobs()area_thresholdpixels_thresholdmergemargininvertx_stridey_stride を備えたブロブオブジェクト(rect()cx()cy()code()area()pixels())を返します。

  • センサー — OV7725 のレンズシェーディング用に sensor.set_lens_correction(enable, radi, coef) を追加し、sensor.set_windowing()(w, h) タプル(自動センタリング)も受け付けるようになり、image.Image(..., copy_to_fb=True)load_image(copy_to_fb=True) を追加しました。

  • カラートラッキング、Arduino SPI/I2C スレーブ、キーポイント、ヒストグラム/統計のサンプルスクリプトを追加しました。

その他の変更と改善

  • IDE が実行中の main.py を中断できるようになりました。find_blobs()find_qrcodes()get_statistics() を高速化しました。ORB は popcount によるハミング距離を使用します。レンズ補正の RAM 使用量を削減しました。Linux の udev ルールにより ModemManager がシリアルポートを掴むのを防ぎます。

バグ修正

カメラとイメージング:

  • M7 の DMA キャッシュのクリーン/無効化(フレーム破損)、各フレーム末尾の余分な行、JPEG フレームバッファのオーバーフロー境界、compress() 失敗時のフレームバッファ解放、ORB の精度/ROI/空集合の処理、load_image(copy_to_fb=True) のジオメトリを修正しました。

システム:

  • F7 の ADC サポート、OV7725 のレジスタ名、ブートローダー/USB のタイミングを修正し、スナップショット待ちの間に WFI を使用し、MJPEG ストリーマーの例をクライアントごとのタイムアウト付きで非ブロッキングにしました。

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

  • OpenMV Cam M7(OpenMV 3) — 初期段階のボードサポート。

  • OV7725 — レンズ補正(シェーディング)サポート。

破壊的な API 変更

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

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

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

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

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

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

FREAK を ORB に置き換え、ディスクリプタ API を作り直し (major)

FREAK キーポイントディスクリプタは削除され、ORB に置き換えられました: image.FREAK はもう存在しません(image.ORB を使用してください)。image.match_descriptor()save_descriptor()load_descriptor() は先頭のディスクリプタ型引数を取らなくなりました(オブジェクトから推論されます)。match_descriptor() は 8 要素のタプル (cx, cy, x, y, w, h, match_count, rotation) を返すようになり(最後の要素はパーセンテージではなく生のカウントです)、draw_keypoints() は生の (x, y, angle) リストの代わりにキーポイントオブジェクトを必要とします。find_keypoints()corner_detectormax_keypointsscale_factor を追加し、デフォルト値が変更されました。

コミット: e2d0c4840, bba8e5a9e, 6000684cb

センサーの自動関数の改名 (major)

sensor.set_whitebal()set_gain_ctrl()set_exposure_ctrl()sensor.set_auto_whitebal()set_auto_gain()set_auto_exposure() に改名されました(旧名は削除されました)。それぞれ、自動の代わりに手動の値を設定するためのオプションの value= キーワードを追加しました。

コミット: 1b22a2961

ヒストグラム/統計をオブジェクト API に作り直し (major)

ヒストグラム/統計の表層は、ヒストグラム/統計オブジェクトを返すオブジェクトベースの image.get_histogram()get_statistics()get_percentile() に作り直されました。従来のフラットなヒストグラム/統計結果と bin_countl_bin_counta_bin_countb_bin_count メソッドは削除されました(len(histogram.bins()) などを使用してください)。

コミット: 011108412, 9f37c83de

find_features()scale を改名 (major)

image.find_features()(Haar)は scale= キーワードを scale_factor= に改名しました。find_features(cascade, scale=...) の呼び出しを scale_factor=... に更新してください。

コミット: 96e4f770c

find_blobs() がオブジェクトを返す; find_markers() を削除 (minor)

image.find_blobs() は名前付きアクセサを持つブロブオブジェクトを返すようになり(後方互換性のためインデックスアクセスも引き続き機能します)、image.find_markers() は削除されました。代わりに find_blobs(..., merge=True, margin=...) を使用してください。高度なカラーブロブフィルターのコールバックはサポートされなくなりました。

コミット: af15ec6eb

img.copy_to_fb() を置き換え (minor)

img.copy_to_fb() メソッドは、image.Imageload_image()copy_to_fb= キーワードに置き換えられました。大きな画像をフレームバッファに直接読み込むには image.Image(path, copy_to_fb=True) を使用してください。

コミット: 1645ab94b

compress() が範囲外の品質を拒否 (behavior)

image.compress()compressed() は、quality が 1〜100 の範囲外のとき、黙ってクランプする代わりにエラーを送出するようになりました。呼び出す前に quality を 1〜100 にクランプしてください。別途、OpenMV 3 の JPEG バッファが 64 KB から 23000 バイトに削減されたため、大きなフレームではメモリ不足が発生する可能性があります。JPEG 品質またはフレームサイズを下げてください。

コミット: 9efd7474a, 9a7c3defc

lens_corr() のズームが機能するように (behavior)

image.lens_corr() は実際に zoom 引数を適用するようになりました(以前は解析されるものの効果がありませんでした)。そのため、デフォルト以外のズームを渡していたスクリプトでは出力が変わります。lens_corr() のチューニングを再確認してください。

コミット: d6b49adef

移行チェックリスト

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

  1. image.FREAKimage.ORB に置き換え、ディスクリプタ型引数を取り除き、match_descriptor() のタプルアンパック/draw_keypoints() をキーポイントオブジェクトに更新してください(ORB の作り直し)。

  2. sensor.set_whitebal()set_gain_ctrl()set_exposure_ctrl()set_auto_* 形式に改名してください(自動関数の改名)。

  3. ヒストグラム/統計のコードをオブジェクトメソッドに移行してください(ヒストグラム/統計の作り直し)。

  4. find_features()scale=scale_factor= に改名してください(find_features の改名)。

  5. ブロブオブジェクトのアクセサを使用し、find_markers()find_blobs(merge=True, ...) に置き換えてください(find_blobs の変更)。img.copy_to_fb()copy_to_fb= キーワードに置き換えてください(copy_to_fb の変更)。

  6. compress() の品質を 1〜100 にクランプし、OpenMV 3 で JPEG サイズを再確認してください(compress の変更)。lens_corr() のズームを再調整してください(lens_corr の変更)。

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