このドキュメントでは、開発者がIntel RealSense SDKのバックグラウンドセグメンテーション(BGS)を使用して、エキサイティングな新しいコラボレーションアプリケーションを作成する方法について説明します。 プログラムの予想される動作とさまざまなシナリオでのパフォーマンスについて説明し、製品を顧客に提供する前に開発者が覚えておくべき制限を指定します。 この記事の主な対象読者は、BGSおよびOEMを使用する開発チームです。
KDPV-BGSのアプリケーションの例としてのCyberlink YouCam RXアプリケーション。
応用分野
バックグラウンドセグメンテーション(BGS)は、コラボレーションおよびコンテンツ作成アプリケーション向けのIntel RealSenseカメラの重要な機能です。 特別な機器や後処理なしでバックグラウンドをリアルタイムで分離する機能は、既存の電話会議アプリケーションにとって非常に興味深い追加機能です。
BGSテクノロジーを使用して、既存のアプリケーションを改良したり、新しいアプリケーションを作成したりする大きな可能性があります。 たとえば、消費者は、ビデオチャットセッション中に別のプログラムを通じてYouTubeで友人と共有コンテンツを表示できます。 従業員は、仮想会議の共通のワークスペースに重ねられた互いの画像を見ることができます。 開発者は、BGSを統合して、カメラや画面共有を使用するアプリケーションで背景や背景ビデオを変更するなど、新しい使用シナリオを作成できます。 上と下に、Intel RealSenseカメラを使用するアプリケーションを示します。 さらに、開発者は、セルフィーの撮影や背景の変更など、他の使用シナリオを考案し、コラボレーションツール(ブラウザー、オフィスアプリケーション)を使用して共有や共同編集を行い、たとえば異なる背景のカラオケビデオを作成できます。
BGSを使用してアプリケーションを個人化する
バックグラウンドセグメンテーションを使用したサンプルアプリケーションの作成
必要条件
- USB3.0ルートポートが有効なIntel Coreプロセッサを搭載したプラットフォーム
- メモリー:4 GB
- Intel RealSense F200カメラ
- Intel RealSense SDK
- Intel Depth Camera ManagerソフトウェアまたはこのコンポーネントがすでにOEMによってインストールされているシステム
- Microsoft Windows * 8.1 64ビット
- Microsoft Visual Studio * 2010–2013、最新のサービスパック
この記事では、開発者がサンプルアプリケーションの背景をビデオや他の画像に置き換える方法を説明します。 また、出力画像を背景画像と混合するためのコードスニペットを提供し、パフォーマンスへの影響について説明します。
現在のバックグラウンドセグメンテーションの実装は、YUY2およびRGB形式をサポートしています。 許容される解像度は、360pから720p(カラー画像の場合)および480p(深度画像の場合)です。
以下の図は、BGSパイプラインの一般的なビューを示しています。 深度とカラーフレームは、Intel RealSenseカメラによって記録され、メインSDK(つまり、Intel RealSense SDKランタイム)に転送されます。 アプリケーションから受信した要求に基づいて、フレームはUser Extractionブロックに配信され、RGBA形式のセグメント化された画像が形成されます。 他のRGB画像とのアルファブレンディングをこの画像に適用して、最終的な背景画像出力を生成できます。 開発者は任意のメカニズムを使用して画面上の画像を混合できますが、最高のパフォーマンスはGPUを使用して実現されます。
BGSコンベヤー
以下では、3Dセグメンテーションを開発者アプリケーションに統合する方法について説明します。
1.次のIntel RealSense SDKコンポーネントをインストールします。
- コアIntel RealSense SDKランタイム
- バックグラウンドセグメンテーションモジュール
2. Webインストーラーまたはスタンドアロンインストーラーを使用して、コアおよび個々のコンポーネントのみをインストールします。 ランタイムはUACモードでのみ設定できます。
intel_rs_sdk_runtime_websetup_x.xxxxxxxx --silent --no-progress --accept-license = yes --finstall = core、personify --fnone = all ''
次のIntel RealSense SDK APIを使用して、システムにインストールされているランタイムを確認できます。
// session is a PXCSession instance PXCSession::ImplVersion sdk_version=session->QueryVersion();
3. 3Dカメラを使用するインスタンスを作成します。 これにより、3次元アルゴリズムの操作用のパイプラインが作成されます。
PXCSenseManager* pSenseManager = PXCSenseManager::CreateInstance();
4.目的の中間モジュールの電源を入れます。 アプリケーションに必要なモジュールのみを含めることをお勧めします。
pxcStatus result = pSenseManager->Enable3DSeg();
5.アプリケーションに必要なプロファイルを指定します。 より高い解像度とより高いフレームレートで実行すると、負荷が増加します。 プロファイルを転送して、カメラから目的のストリームを取得します。
PXC3DSeg* pSeg = pSenseManager->Query3DSeg(); pSeg->QueryInstance<PXCVideoModule>()->QueryCaptureProfile(profile, &VideoProfile); pSenseManager->EnableStreams(&VideoProfile);
6.カメラコンベアを初期化し、最初のフレームを中間レベルに移動します。 この段階は、すべての中間レベルに必要であり、コンベアの動作に必要です。
result = pSenseManager->Init();
7.カメラからセグメント化された画像を取得します。 出力イメージは、中間レベルからRGBA形式で出力され、セグメント化された部分のみが含まれます。
PXCImage *image=seg->AcquireSegmentedImage(...);
8.セグメント化された画像を独自の背景とブレンドします。
ご注意 GPUではなくCPUで実行される場合、混合はパフォーマンスに大きく影響します。 サンプルアプリケーションはCPUで実行されます。
- 任意の手法を使用して、セグメント化されたRGBAイメージを別のビットマップと混合できます。
- CPUの代わりにGPUを使用する場合、システムメモリへのゼロコピーデータを使用できます。
- ミキシングには、Direct3D *またはOpenGL *を使用できます。
以下は、画像をシステムメモリに転送するためのコードスニペットです。srcDataはpxcBYTE型です。
segmented_image->AcquireAccess(PXCImage::ACCESS_READ, PXCImage::PIXEL_FORMAT_RGB32, &segmented_image_data); srcData = segmented_image_data.planes[0] + 0 * segmented_image_data.pitches[0];
ブレンドとレンダリング
- 記録:カメラからカラーおよび深度データストリームを読み取ります。
- セグメンテーション:背景と前景のピクセルを分割します。
- 色とセグメント化された画像(深度マスク)をテクスチャにコピーします。
- セグメント化された画像(深度マスク)のサイズをカラー画像と同じ解像度に変更します。
- (オプション)テクスチャの背景画像(置換された場合)をダウンロードまたは更新します。
- シェーダーのコンパイル/ロード。
- シェーダーの色、深度、および(オプションの)背景テクスチャを設定します。
- シェーダーの起動と表示。
- (ビデオ会議アプリケーションの場合)結合した画像をNV12またはYUY2の表面にコピーします。
- (ビデオ会議アプリケーションの場合)表面をIntel Media SDK H.264ハードウェアエンコーダーに転送します。
性能
次の要因がアプリケーションの動作に影響します。
- フレームレート
- 混乱
- 許可
次の表は、第5世代Intel Core i5プロセッサーの負荷を示しています。
レンダリングなし | CPUレンダリング | GPUレンダリング | |
---|---|---|---|
720p、30 fps | 29.20% | 43.49% | 31.92% |
360p、30 fps | 15.39% | 25.29% | 16.12% |
720p、15 fps | 17.93% | 28.29% | 18.29% |
独自のコンピューターでレンダリングの効果をテストするには、-noRenderパラメーターを指定して、このパラメーターを指定せずにサンプルアプリケーションを実行します。
BGSテクノロジーの制限
ユーザーのセグメンテーションはまだ進化しており、SDKの新しいバージョンごとに品質が向上しています。
品質を評価する際に覚えておくべきこと。
- 背景画像と同じ色のオブジェクトを身体に置かないでください。 たとえば、背景が黒の黒のTシャツ。
- 過度に明るい頭部照明は、髪の画質に影響を与える可能性があります。
- ベッドまたはソファに横たわっている場合、システムが正常に動作しない場合があります。 ビデオ会議の場合は、座ったほうが良いでしょう。
- 透明で半透明のオブジェクト(ガラスビーカーなど)は正しく表示されません。
- 正確な手の追跡は難しく、品質が不安定になる場合があります。
- 額の前髪は、セグメンテーションの問題を引き起こす可能性があります。
- 頭をあまり速く動かさないでください。 カメラの制限は品質に影響します。
IntelがBGSテクノロジーをレビュー
ソフトウェアの品質を改善するには? あなたの最善の策は、フィードバックを残すことです。 開発者が新しいIntel RealSense SDKで再テストしたい場合、同様の環境でスクリプトを実行することは困難です。
異なる実行間の不一致を減らすには、問題を再現するために使用される入力シーケンスを削除して、品質が向上しているかどうかを確認することをお勧めします。
Intel RealSense SDKには、再生用のシーケンスを組み立てるのに役立つサンプルアプリケーションが付属しています。
- 品質に関するフィードバックを提供するために重要
- パフォーマンス分析用ではありません
デフォルトでインストールされている場合、サンプルアプリケーションはC:\ Program Files(x86)\ Intel \ RSSDK \ bin \ win32 \ FF_3DSeg.cs.exeフォルダーにあります。 アプリケーションを起動し、以下のスクリーンショットに示されている手順に従います。
画面に自分が表示され、背景が削除されます。
シーケンス再生
記録モードを選択すると、セッションのコピーを保存できます。 これで、アプリケーションFF_3DSeg.cs.exeを開き、再生モードを選択して記録を表示できます。
おわりに
Intel RealSenseテクノロジーの中間バックグラウンドセグメンテーションモジュールは、ユーザーに刺激的な新機能を提供します。 新しい使用パターンの中には、背景をビデオまたは他の画像に変更し、セグメント化された画像でセルフィーを作成するものがあります。
参照資料