Intel RealSense SR300カメラとIntel RealSense SDK 2016 R1パッケージの導入後、新しいジェスチャーインタラクションモード- カーソルモードが登場しました。これはSR300カメラを使用する場合にのみ使用できます。 このチュートリアルでは、この新しい機能を有効にするために必要なコードの変更について説明します。
Intel RealSense SDK 2016 R1がリリースされる前は、ポインターの移動を制御し、クリックアクションを検出する必要があるアプリケーションは、ハンドモードを使用し、クリックを決定するためにジェスチャー認識が使用されていました。 このハンドモード機能は、新しいカーソルモードに進化しました。 コードを変更した後、以前の機能を使用するアプリケーションは、カーソルモードでより高い精度とより高度なカーソル制御を利用できます。
カーソルモードは、Intel RealSense SR300カメラを搭載したデバイスでのみ使用できることに注意してください。 SR300カメラを使用するIntel RealSenseアプリケーション開発者は、Windows * 10にアップグレードし、Intel RealSense SDKバージョン2016 R1を使用する必要があります。
ほとんどの場合、Intel RealSense SDK R4(v6.0)を使用してF200カメラ用に作成されたアプリケーションを既に持っています。 移動して新しいカーソルモードを使用する方法
プロセスパイプラインの初期化は、Intel RealSense SDKの以前のバージョンと同じである必要があります。 Sense Managerのインスタンスを作成し、プロセスにエラーがないことを確認する必要があります。
PXCSenseManager *pSenseMgr = new PXCSenseManager::CreateInstance(); if( !pSenseMgr ) { < continue on to creating the modes > }
以前は、F200カメラのHandモードで、少なくともポインターを連想させるものを取得するには、Handモジュールを使用し、さまざまな構成で手を追跡する必要がありました。 コードは次のようになります(次のコードは参照用であり、ここに示されている形式では直接コンパイルされないことに注意してください)。
PXCHandModule *pHandModule; PXCHandData *pHandData; int confidence; . . . < > . . . pxcStatus status; if( !pSenseMgr ) { status = pSenseMgr->EnableHand() if(status == pxcStatus::PXC_STATUS_NO_ERROR) { // Get an instance of PXCHandModule handModule = pSenseMgr->QueryHand(); // Get an instance of PXCHandConfiguration PXCHandConfiguration handConfig = handModule handConfig->EnableGesture("cursor_click"); handConfig->ApplyChanges(); . . . < > . . . } }
バージョン2016 R1以降、Intel RealSense SDKは新しいカーソルモードを実装しました;ポインターアクションはハンドモードから分離されています。 これは、Sense Managerでハンドモードを要求した古いコードを作り直す必要があることを意味します。 新しいコードは次のようになります。
PXCHandCursorModule *pCursorModule; PXCCursorData::BodySideType bodySide; // , Confidence . . . < > . . . pxcStatus status; if( !pSenseMgr ) { // Enable handcursor tracking status = pSenseMgr::EnableHandCursor(); if(status == pxcStatus.PXC_STATUS_NO_ERROR) { // Get an instance of PXCCursorModule pCursorModule = pSenseMgr->QueryHandCursor(); // Get an instance of the cursor configuration PXCCursorConfiguration *pCursorConfig = CursorModule::CreateActiveConfiguration(); // Make configuration changes and apply them pCursorConfig.EnableEngagement(true); pCursorConfig.EnableAllGestures(); pCursorConfig.ApplyChanges(); . . . < > . . . } }
同期および非同期機能の基本的な計算サイクルの例については、メインコンピューティングサイクルの実装「カーソルモジュール[SR300]」セクションのIntel RealSense SDK 2016 R1ドキュメントを参照してください。
非同期(推奨)アプローチは次のようになります。
class MyHandler: public PXCSenseManager::Handler { public: virtual pxcStatus PXCAPI OnModuleProcessedFrame(pxcUID mid, PXCBase *module, PXCCapture::Sample *sample) { // check if the callback is from the hand cursor tracking module if (mid==PXCHandCursorModule::CUID) { PXCHandCursorModule *cursorModule=module->QueryInstance<PXCHandCursorModule>(); PXCCursorData *cursorData = cursorModule->CreateOutput(); // process cursor tracking data } // return NO_ERROR to continue, or any error to abort return PXC_STATUS_NO_ERROR; } }; . . . < SenseManager> . . . // Initialize and stream data MyHandler handler; // Instantiate the handler object // Register the handler object pSenseMgr->Init(&handler); // Initiate SenseManager's processing loop in blocking mode // (function exits only when processing ends) pSenseMgr ->StreamFrames(true); // Release SenseManager resources pSenseMgr ->Release()
そのため、Intel RealSense SDK 2016 R1では、実装とハンドポインターへのアクセスが変更されましたが、すべての変更が均一であるため、コードの再作成が簡単になります。 上記のコード例は、この単純さを示しています。初期化、構成、およびフレームごとの実行中のプログラムの構造は変更せずに、プログラムは新しいカーソルモードの高度な機能を使用します。
新しいカーソルモードは、SR300カメラ(カメラを内蔵または別の周辺機器として接続可能)およびRealSense SDK 2016 R1バージョンを備えたシステムでのみ利用可能であることを思い出してください。 カメラモデルを検出し、F200カメラとSR300カメラの両方をサポートするコードの機能については、他のチュートリアルで説明します。