/// <summary> 手の検出の初期化 </summary> private void InitializeHandTracking() { // 手の検出器を取得する handAnalyzer = senseManager.QueryHand(); if (handAnalyzer == null) { throw new Exception("手の検出器の取得に失敗しました"); } // 手のデータを作成する handData = handAnalyzer.CreateOutput(); if (handData == null) { throw new Exception("手の検出器の作成に失敗しました"); } // RealSense カメラであれば、プロパティを設定する var device = senseManager.QueryCaptureManager().QueryDevice(); PXCMCapture.DeviceInfo dinfo; device.QueryDeviceInfo(out dinfo); if (dinfo.model == PXCMCapture.DeviceModel.DEVICE_MODEL_IVCAM) { device.SetDepthConfidenceThreshold(1); //device.SetMirrorMode( PXCMCapture.Device.MirrorMode.MIRROR_MODE_DISABLED ); device.SetIVCAMFilterOption(6); } // 手の検出の設定 config = handAnalyzer.CreateActiveConfiguration(); //config.EnableSegmentationImage(true); config.EnableJointSpeed(PXCMHandData.JointType.JOINT_MIDDLE_TIP, PXCMHandData.JointSpeedType.JOINT_SPEED_AVERAGE, 100); //config.EnableGesture("v_sign"); config.EnableGesture("thumb_up"); config.EnableGesture("thumb_down"); //config.EnableGesture("tap"); //config.EnableGesture("fist"); config.SubscribeGesture(OnFiredGesture); config.ApplyChanges(); config.Update(); gestureTimer.Start(); }
/* Constructor */ public HandsData(int MaxHands, int MaxJoints) { NumOfHands = MaxHands; NumOfJoints = MaxJoints; JointData = new PXCMHandData.JointData[NumOfHands][]; // Joint coordinates Coordinates = new Main.HandCoord[NumOfHands]; /* Declaration of the array for the hand data*/ for (int i = 0; i < NumOfHands; i++) { JointData[i] = new PXCMHandData.JointData[NumOfJoints]; Coordinates[i] = new Main.HandCoord(6, NumOfJoints); for (int j = 0; j < NumOfJoints; j++) { JointData[i][j] = new PXCMHandData.JointData(); } } /* Initialization of SenseManager */ SenseManager = PXCMSenseManager.CreateInstance(); if (SenseManager == null) { Debug.LogError("Initialization of the SenseManager has failed"); } /* Enable hand tracking and get an instance of an hand module */ Status = SenseManager.EnableHand(); HandModule = SenseManager.QueryHand(); if (Status != pxcmStatus.PXCM_STATUS_NO_ERROR) { Debug.LogError("SenseManager --> EnableHand " + Status); } /* Create the connection to the Intel RealSense camera */ Status = SenseManager.Init(); if (Status != pxcmStatus.PXCM_STATUS_NO_ERROR) { Debug.LogError("Initialization of SenseManager: " + Status); } /* Settings for the hand module */ PXCMHandConfiguration HandConfig = HandModule.CreateActiveConfiguration(); if (HandConfig != null) { HandConfig.EnableAllGestures(); HandConfig.EnableAlert(PXCMHandData.AlertType.ALERT_HAND_NOT_DETECTED); PXCMHandData.JointType st = PXCMHandData.JointType.JOINT_WRIST; for (int i = 0; i < NumOfJoints; i++) { HandConfig.EnableJointSpeed(st, PXCMHandData.JointSpeedType.JOINT_SPEED_AVERAGE, 1000 / 10); st++; } //HandConfig.EnableJointSpeed(PXCMHandData.JointType.JOINT_WRIST, PXCMHandData.JointSpeedType.JOINT_SPEED_ABSOLUTE,1000/20); HandConfig.ApplyChanges(); HandConfig.Dispose(); } }