13

Kinect を使用する C# アプリケーションを作成しています。現在、出力を取得してシェーダー リソースに書き込み、テクスチャとしてレンダリングしています。私の問題は、Kinect が (明らかに) 30 fps でしか実行されないため、調整されていることです。私のパフォーマンスが悪い。

これを克服する最善の方法は何ですか?それはマルチスレッドですか? この種の問題に役立つ設計パターンはありますか? 私が知る限り、kinect がスレッド上でデータを処理し、プロセスが終了したときにそれにアクセスできるようにしたいかもしれませんが、安全な方法でどこから始めればよいかわかりません。

あなたが提供できるアドバイスをありがとう。

現在、kinect ドライバー/API には OpenNI を使用し、レンダリングの directX 側には SlimDX を使用しています。

4

2 に答える 2

8

私は以前に Kinect を使用したことがなく、使用しているドライバー/ラッパーを指定していませんでしたが、おそらく問題にはならないと思います。

おそらく行う必要があるのは、次のとおりです。

  1. Kinect の「更新」サイクルを独自のスレッドに分離します。これにより、kinect ハードウェアからの更新を待たずにアプリケーション ロジックを可能な限り高速に実行できるようになります。
  2. Kinect が新しいデータを入力している間、パスごとに画像/深度データを「ロック」する必要があります。
  3. Kinect がデータを埋めるプロセスに 2 時間かかる場合、ドライバーがまだバッファリングを行っていない場合は、画像と深度データのバッファリングを試すことができます。これは、メモリ内に 2 つのコピーを保持し、一方が書き込まれている間にもう一方が読み取られることを意味します。

C# でのスレッド化に関する優れたチュートリアルについては、Albahari の Threading in C#を常にお勧めします。また、アプリケーションを高速化するために何ができるかについてより具体的な情報が必要な場合は、おそらく質問を編集して、現在どのように構造化されているか、どのラッパー/ドライバーを使用しているかなどの詳細を追加することをお勧めします.

于 2011-06-13T04:10:52.180 に答える
1

高いパフォーマンスを必要とする Kinect を使用した開発では、イベント モデルの代わりにプーリング モデルを使用する必要があります。これを補完する最善の方法は、スレッドを開いてプーリング操作を行うことです。長時間の操作を行い、ユーザー インターフェイスをフリーズさせないように、イベント モデルでスレッドを使用することもできます。

そして、これを見ることができます:http://msdn.microsoft.com/en-us/library/hh973076

于 2012-08-23T12:46:10.073 に答える