v2.4.0¶
v2.4.0 では find_lines() がハフ変換ベースの検出器として書き直され、find_line_segments()、find_datamatrices() のデータマトリックスデコード、sensor.set_vsync_output()、画像スライスの読み書き、そして高 FPS 向けの多数のスケーリングされた新しいフレームサイズが追加されました。find_lines()、match_descriptor()、skip_frames() が変更されています — 以下の破壊的変更をお読みください。
ハイライト¶
find_lines()— ライン (line) オブジェクトを返すハフ変換ベースのライン検出器として書き直されました(グレースケールだけでなく RGB565 でも動作するようになりました)。find_line_segments()— 有限のライン (line) セグメントを検出します。find_datamatrices()— データマトリックスのデコード。sensor.set_vsync_output()— カメラ同期のために I/O ピンで VSYNC を駆動します。さらに多くのフレームサイズ — 高 FPS 向けの多数の追加スケーリング解像度。
破壊的変更:
find_lines()、match_descriptor()、skip_frames()が変更されました — 破壊的変更を参照してください。
新機能¶
image.find_line_segments()— 無限ではないライン (line) セグメントを検出します。ライン (line) オブジェクトに.length()アクセサーが追加されました。image.find_datamatrices()— サンプルスクリプト付きのデータマトリックスのデコード。sensor.set_vsync_output(pin)— カメラ同期のために GPIO ピンで VSYNC 信号を出力します(OpenMV 2 / OpenMV 3)。画像スライス — 画像の添字 / バッファプロトコルが画像データのスライスの読み書きをサポートするようになりました。
より高いフレームレートをサポートするために、スケーリングされた解像度 / フレームサイズの組み合わせを多数追加しました。
clock.fps()は 2 秒ごとにアキュムレーターをリセットするようになり、報告される FPS が直近のレートを追跡するようになりました。
その他の変更と改善¶
OV7725 は解像度が VGA 以下の場合に QVGA にウィンドウ化され(高いキャプチャレートでのフレーム落ちが減少)、PLL は 6 倍に設定され外部クロックが低減されました(OpenMV 2 は 48 MHz、OpenMV 3 は 54 MHz)。これによりセンサーのフレームタイミングが変わります。
バグ修正¶
イメージング:
compress_for_ide()のバッファサイズの誤り(開始/終了マーカー)、QR デコード(加えて上流の quirc のセルビットマップのインデックス指定とアライメントパターンの境界の修正)を修正しました。
センサーと接続:
より高いセンサー PLL(カメラの init/sync)で動作するように OpenMV 2 のセンサークロックを下げ、WINC の
socket.recvfrom()が実際に受信したサイズを返すようにしました(古い値を返す代わりに、正でないサイズではエラーを発生させます)。
ハードウェアおよびボードサポート¶
sensor.set_vsync_output()を支える GPIO ピンでの VSYNC 出力(OpenMV 2 / OpenMV 3)。OpenMV 3 —
pyb.UARTの UART1 を有効化しました。
APIの破壊的変更¶
v2.3.0 と v2.4.0 の間でのユーザーから見える API の破壊的変更です。範囲: modules/ 内の Python C モジュールおよび scripts/libraries/ 内の Python ライブラリ。
各変更にはその影響度のタグが付けられています:
major — その機能を使用していたほとんどのスクリプトに影響します。コードを移植する必要があります。
minor — 限定された API。それを使用していたスクリプトにのみ影響します。
behavior — API は同じですが結果が異なります。調整済みのスクリプトを再確認してください。
変更はその順序で影響度ごとにグループ化されています。コードの移植だけが目的の場合は、末尾の 移行チェックリスト に進んでください。各コミットハッシュは GitHub 上の差分にリンクしています。
find_lines() がハフ検出器として書き直された (major)¶
image.find_lines() はハフ変換ベースの検出器として書き直されました。(x1, y1, x2, y2) のタプルのリストを返さなくなり、ライン (line) オブジェクト(.line() / .x1() / .y1() / .x2() / .y2() / .theta() / .rho() / .magnitude())を返すようになりました。また、グレースケールだけでなく RGB565 でも動作するようになりました。threshold 引数は 0.0–1.0 の浮動小数点数から整数のエッジ強度の合計に変更され、line.magnitude は整数になり、新しい theta_margin / rho_margin キーワードが追加されました。タプルのアンパックを行うコードをライン (line) オブジェクトに移植し、threshold を再調整してください。
match_descriptor() がマッチオブジェクトを返す (minor)¶
image.match_descriptor()(ORB)は、単純な 8 要素のタプルではなく、.cx() / .cy() / .x() / .y() / .w() / .h() / .count() / .theta() / .rect() アクセサーを持つ kptmatch オブジェクトを返すようになりました。このオブジェクトは依然として添字アクセス / スライスが可能なので位置インデックス指定は引き続き機能しますが、isinstance(result, tuple) を行っていた(またはタプルのメソッドを使用していた)コードは新しいアクセサーを使用する必要があります。
Commits: e960546b6
sensor.skip_frames() が時間ベースになった (behavior)¶
sensor.skip_frames() は time= キーワード(デフォルト約 300 ms)を受け付けるように作り直され、固定のフレーム数を実行するのではなくデフォルトで時間ベースになり、時間が経過すると早期に停止するようになりました。正確なフレーム数に依存していたスクリプトは、明示的なカウントを渡す、または time= を適切に設定する必要があります。
Commits: a039b5d1c
移行チェックリスト¶
v2.4.0 へのクリーンな移植では、典型的な作業は次のとおりです:
find_lines()のタプルのアンパックをライン (line) オブジェクトに移植し、整数のthresholdを再調整してください(find_lines の書き直し)。match_descriptor()の結果をタプルとして扱う代わりにkptmatchアクセサーを使用してください(match_descriptor の変更)。固定のフレーム数に依存していた場合は、
sensor.skip_frames()に明示的なカウントおよび/またはtime=を渡してください(skip_frames の変更)。
その他のすべてのスクリプトはそのまま動作します。