マルチデバイスエラー
エラー
理由
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
つづく…