カスタムカメラキャリブレーション
14 分
この機能はkognic ioのバージョン1 8 0で追加され、一部の機能はオプションの依存関係が必要です。インストールするには pip install kognic io\[wasm] を実行してください。 キャリブレーションがサポートされている標準カメラキャリブレーションの一覧にない場合は、カスタムキャリブレーションを提供できます。以下の表に customcameracalibration オブジェクトの属性を示します。 wasm base64 属性は、キャリブレーションを実装するwebassemblyモジュールのbase64エンコード文字列です。 test cases 属性は、作成時にキャリブレーションを検証するために使用される testcase オブジェクトのリストです。キャリブレーションが正しいことを確認するために、いくつかのテストケースを提供することを推奨します。 キー 値 パラメータ rotation quaternion rotationquaternion オブジェクト w , x , y , z position position オブジェクト x , y , z image width 整数 なし image height 整数 なし wasm base64 文字列 なし test cases testcase オブジェクトのリスト point3d, point2d customcameracalibrationオブジェクトは、バイナリまたはwasmファイルから直接インスタンス化することができます。 calibration file = customcameracalibration from file("/path/to/calibration wasm", ) calibration binary = customcameracalibration from bytes(b" ", ) webassemblyモジュールの操作を容易にするユーティリティセットを提供しています。具体的には、検証コードといくつかの異なる言語からwebassemblyへのコンパイルコードを提供しています。このコードはpython関数および kognicutil cliの両方から利用できます。 webassemblyモジュール webassemblyは、モジュールが project point to image という関数をエクスポートする厳密なインターフェースに従う必要があります。この関数は float64 型の3つの引数を受け取り、 float64 型の2つの値を返す必要があります。したがって、このインターフェースのwebassemblyテキスト表現は func (param f64 f64 f64) (result f64 f64) となります。3つの引数は3d点のx、y、z座標です。2つの戻り値は画像平面に投影された点のxおよびy座標です。webassemblyはデフォルトでは複数の戻り値をサポートしていませんが、==! https //github com/webassembly/multi value プロポーザルで有効化できます。 点が視野内にない場合、関数はxおよびy座標の両方に対して https //en wikipedia org/wiki/nan を返す必要があります。 検証 これには wasmtime のインストールが必要です。 wasmtime はkognic ioのオプションの依存関係です。インストールするには pip install kognic io\[wasm] を実行してください。 検証コードはpython関数および kognicutil cliの両方で提供しています。検証する内容は以下を含みますが、これらに限りません。 モジュールがロードできること 関数が存在し、正しいシグネチャを持つこと モジュールを使用して点を投影できること テストケースが提供されている場合、点が正しく投影されること pythonでキャリブレーションを検証する方法は3つあります。 import kognic io tools calibration validation as wasm validation from kognic io model calibration camera custom camera calibration import customcameracalibration, point2d, point3d, testcase test cases = \[ testcase( point3d=point3d(x=1 0, y=2 0, z=3 0), point2d=point2d(x=2 0, y=5 6) ), testcase( point3d=point3d(x=1 0, y=1 0, z= 1 0), point2d=point2d(x=float("nan"), y=float("nan")) # point is outside field of view ) ] wasm file = "/path/to/calibration wasm" calibration = customcameracalibration from bytes(wasm file, test cases=test cases, ) wasm bytes = calibration to bytes() \# validate the calibration object wasm validation validate custom camera calibration(calibration, test cases=test cases) \# validate the wasm file wasm validation validate wasm file(wasm file, test cases=test cases) \# validate the wasm binary wasm validation validate wasm bytes(wasm bytes, test cases=test cases) kognicutil cliは以下のように使用できます。 kognicutil wasm validate calibration wasm コンパイル rust 1 82 0ではマルチバリューフィーチャーターゲット(関数からの複数値の返却)のサポートが削除されました。この機能はカスタムカメラキャリブレーションの動作に現在必要なため、rustおよびcargoのバージョンを1 82 0未満に固定する必要があります。 wasmファイルはできる限り小さく保つことを推奨します。不要な依存関係の使用は避けてください。例えば、標準ライブラリを使用する代わりに、一部の数学関数を自分で実装する方が望ましい場合があります。 上述のとおり、webassemblyモジュールは厳密なインターフェースに従う必要があり、コンパイルにはマルチバリュープロポーザルが必要です。webassemblyモジュールをいくつかの言語からコンパイルしやすくするユーティリティセットを提供しています。以下の表を参照してください。 言語 ターゲット コンパイルツール 必要なバージョン rust rs rustc < 1 82 0 rust (cargo) cargo toml cargo < 1 82 0 c++ cc, cpp emscripten n/a c c emscripten n/a ユーティリティはpython関数および kognicutil cliの両方で利用できます。pythonからは以下のようにモジュールをコンパイルできます。 from kognic io tools calibration compilation import compile to wasm wasm binary = compile to wasm("path/to/source") 返されたバイナリは customcameracalibration オブジェクトの作成に使用できます。 output wasm パラメータが渡された場合、バイナリは指定されたパスに保存されます。 kognicutil cliは以下のように使用できます。 kognicutil wasm compile path/to/source path/to/output wasm コンパイル後にデフォルトで検証が実行されることに注意してください。これは skip validation フラグで無効化できます。 キャリブレーションパラメータはwebassemblyモジュールで使用できるようにバイナリに埋め込む必要があります。ランタイム時の投 影関数の速度を上げるために、できる限り事前計算を行うようにしてください。 以下に、いくつかの異なる言語でのpinholeキャリブレーションの簡略版の例を示します。 例:rust これには wasm32 wasi ターゲットでrustをインストールする必要があります。 https //www rust lang org/tools/install の手順に従ってrustをインストールし、 rustup target add wasm32 wasi でターゲットを追加してください。 https //github com/annotell/kognic io examples python/tree/master/examples/calibration/custom/pinhole rs は以下のようにコンパイルできます。 kognicutil wasm compile path/to/source rs path/to/output wasm panics はサポートされていないため、コードに含まれている場合はコンパイルが失敗することに注意してください。 cargoを使用したrust これには wasm32 wasi ターゲットでrustとcargoをインストールする必要があります。 https //doc rust lang org/cargo/getting started/installation html の手順に従ってrustとcargoをインストールし、 rustup target add wasm32 wasi でターゲットを追加してください。 https //github com/annotell/kognic io examples python/tree/master/examples/calibration/custom/pinhole rust cargo は以下のようにコンパイルできます。 kognicutil wasm compile path/to/source/cargo toml path/to/output wasm ライブラリが cdylib であることを指定することが重要であり、webassemblyモジュールのサイズを削減するために strip = true を設定することも推奨されることに注意してください。これは cargo toml ファイルに以下を追加することで行います。 \[lib] crate type = \["cdylib"] \[profile release] strip = true 例:c++ これには emscripten のインストールが必要です。 https //emscripten org/docs/getting started/downloads html の手順に従ってインストールしてください。 https //github com/annotell/kognic io examples python/tree/master/examples/calibration/custom/pinhole cc は以下のようにコンパイルできます。 kognicutil wasm compile path/to/source cc path/to/output wasm または以下のようにコンパイルできます。 kognicutil wasm compile path/to/source cpp path/to/output wasm 例:c これにはemscriptenのインストールが必要です。 https //emscripten org/docs/getting started/downloads html の手順に従ってインストールしてください。 https //github com/annotell/kognic io examples python/tree/master/examples/calibration/custom/pinhole c は以下のようにコンパイルできます。 kognicutil wasm compile path/to/source c path/to/output wasm
