Azure Kinect ------ マルチカメラ(概要)

マルチデバイスエラー

エラー

ここに画像の説明を挿入します

理由

Capture が None なので、新しい Device が作成されますが、デフォルトの Device.capture は None であるため、エラーが発生します
ここに画像の説明を挿入します

解決

tracker.update を呼び出すときは、対応するデバイスのキャプチャ デバイス ------>self を渡す必要があります
。そうしないと、複数のカメラがある場合、デバイスはメモリ ブロックを共有します。
ここに画像の説明を挿入します

パラメータ: セグメントのみ

関数呼び出し時のデフォルト値

draw_bodies(only_segments=True)

ここに画像の説明を挿入します

カラー画像をキャプチャして結合する

イントロ

キャプチャのカラー画像を取得し、それらを結合するため、理論的には 2 台のカメラで 2 つの視点が表示されるはずです。
ここに画像の説明を挿入します

エラー

しかし、出力は同じ視点です
ここに画像の説明を挿入します

デバッグ

ここに画像の説明を挿入します
デバイスのメモリ アドレスが異なります。これは、異なるデバイスである 2 つのデバイスが存在することを意味しますが、キャプチャのメモリ アドレスは同じです。つまり、2 つのキャプチャは 1 つの device.capture を共有するため、出力カラー イメージは同じです。

痕跡

更新機能のデバッグに入る
ここに画像の説明を挿入します

最初のデバイスの device0.update()ここに画像の説明を挿入します

2 番目のデバイスの device1.update()
ここに画像の説明を挿入します

device.capture のメモリアドレスは同じです。
更新されるたびに、ハンドラ (カラー画像へのポインタ) は異なりますが、同じ device.capture が返されます
ここに画像の説明を挿入します
。capture0 と Capture1 が指す device.capture は、 1 行目では、capture0 が device.capture を指し、capture0 のハンドラーに device.capture を割り当てます
(つまり、capture0 のハンドラーが device.capture にインストールされます)。2
行目では、capture1 が device を指します。 Capture し、device.capture を Capture1.handler のハンドラーに割り当てます
(つまり、capture1 のハンドラーが device.capture に供給されます)

これで、capture0 と Capture1 のハンドラーは両方とも Capture1 のハンドラーになります。

device.capture をボックスとして考えてください。capture0 のハンドラーは赤いボール、capture1 のハンドラーは黒いボールです。最初に赤いボールが箱に入れられ、次に黒いボールが箱に入れられ、赤いボールが蹴り飛ばされました。

Device.capture によってコード内で作成されるため、これはグローバル変数になります。Device.capture のライフサイクルは、メインスレッド全体のサイクルです。Device.capture は、構築時に
メモリ ブロックをすでに決定しています。

ソース管理

変更を表示するための git ソース管理
ここに画像の説明を挿入します

参照

https://learn.microsoft.com/en-us/answers/questions/1306098/azure-kinect-sdk-1-4-1-body-tracking-for-more-than

つづく…

おすすめ

転載: blog.csdn.net/weixin_45646640/article/details/131827731