private void HandModule_FrameProcessed(object sender, RS.FrameProcessedEventArgs args) { handData.Update(); IHand[] ileftHand = null; IHand[] irightHand = null; if (handData.QueryHandData(AccessOrderType.ACCESS_ORDER_LEFT_HANDS, out ileftHand) == RS.Status.STATUS_NO_ERROR) { leftHand = new Hand(ileftHand[0]); } else { leftHand = null; } if (handData.QueryHandData(AccessOrderType.ACCESS_ORDER_RIGHT_HANDS, out irightHand) == RS.Status.STATUS_NO_ERROR) { rightHand = new Hand(irightHand[0]); } else { rightHand = null; } if (irightHand != null || ileftHand != null) { HandDataChanged.Invoke(rightHand, leftHand); DataStreamUpdate.Invoke(GetAllHandDataAttribute(rightHand, leftHand), GetPreprocessedHand(rightHand, leftHand)); } sm.ReleaseFrame(); }
//Call every frame void Update() { if (depthCameraManager.isStart && depthCameraManager.senseManager.AcquireFrame(true).IsSuccessful()) { handData.Update(); depthCameraManager.senseManager.ReleaseFrame(); } }
// Update Data In Each Frame public void UpdateFrame() { if (depthCameraManager.isStart) { if (depthCameraManager.senseManager.AcquireFrame(true).IsSuccessful()) { handData.Update(); depthCameraManager.senseManager.ReleaseFrame(); } else { throw new System.Exception("Failed Updating Frame!"); } } }
/* Displaying current frames hand joints */ /* * private void DisplayCursorJoints(long timeStamp = 0) * { * mCursorClick[0] = Math.Max(0, mCursorClick[0] - 1); * mCursorClick[1] = Math.Max(0, mCursorClick[1] - 1); * * int numOfHands = cursorData.QueryNumberOfCursors(); * if (numOfHands == 1) * { * mCursorPoints[1].Clear(); * } * * for (int i = 0; i < numOfHands; i++) * { * //Get hand by time of appearance * ICursor cursor; * if (cursorData.QueryCursorData(AccessOrderType.ACCESS_ORDER_BY_TIME, i, out cursor) == Status.STATUS_NO_ERROR) * { * if (cursor != null) * { * // collect cursor points * * Point3DF32 imagePoint = cursor.CursorPointImage; * * mCursorPoints[i].Enqueue(imagePoint); * if (mCursorPoints[i].Count > 50) * mCursorPoints[i].Dequeue(); * * mCursorHandSide[i] = cursor.BodySide; * GestureData gestureData; * if (cursorData.IsGestureFiredByHand(GestureType.CURSOR_CLICK, cursor.UniqueId, out gestureData)) * { * mCursorClick[i] = 7; * } * } * } * } // end iterating over hands * * if (numOfHands > 0) * { * form.DisplayCursor(numOfHands, mCursorPoints, mCursorClick, mCursorHandSide); * } * else * { * mCursorPoints[0].Clear(); * mCursorPoints[1].Clear(); * * mCursorHandSide[0] = BodySideType.BODY_SIDE_UNKNOWN; * mCursorHandSide[1] = BodySideType.BODY_SIDE_UNKNOWN; * } * } */ /* Using SenseManager to handle data */ public void RecogniseHands(Sample sample) { if (sample != null && sample.Depth != null) { int frameNumber = manager.FrameNumber; if (handData != null) { handData.Update(); DisplayPicture(sample.Depth, handData); DisplayGesture(handData, frameNumber); DisplayJoints(handData); //DisplayAlerts(handData, frameNumber); } form.UpdateResultImage(); } }
/* Using SenseManager to handle data */ public void SimplePipeline() { _form.UpdateInfo(String.Empty, System.Drawing.Color.Black); bool liveCamera = false; bool flag = true; SenseManager instance = null; _disconnected = false; instance = _form.session.CreateSenseManager(); if (instance == null) { _form.UpdateStatus("Failed creating SenseManager"); _form.EnableTrackingMode(true); return; } CaptureManager captureManager = instance.CaptureManager; DeviceInfo info = null; if (captureManager != null) { if (_form.GetPlaybackState()) { captureManager.SetFileName(_form.GetFileName(), false); info = _form.GetDeviceFromFileMenu(_form.GetFileName()); } else { if (_form.Devices.Count == 0) { _form.UpdateStatus("No device were found"); return; } _form.Devices.TryGetValue(_form.GetCheckedDevice(), out info); if (_form.GetRecordState()) { captureManager.SetFileName(_form.GetFileName(), true); if (_form.Devices.TryGetValue(_form.GetCheckedDevice(), out info)) { captureManager.FilterByDeviceInfo(_form.GetCheckedDeviceInfo()); } } else { captureManager.FilterByDeviceInfo(_form.GetCheckedDeviceInfo()); liveCamera = true; } if (info == null) { _form.UpdateStatus("Device Failure"); return; } } } /* Set Module */ HandModule handAnalysis; // SenseManager.Handler handler = new SenseManager Handler(); // handler.onModuleProcessedFrame = new SenseManager.Handler.OnModuleProcessedFrameDelegate(OnNewFrame); HandConfiguration handConfiguration = null; HandData handData = null; handAnalysis = HandModule.Activate(instance); if (handAnalysis == null) { _form.UpdateStatus("Failed Loading Module"); _form.EnableTrackingMode(true); return; } handConfiguration = handAnalysis.CreateActiveConfiguration(); if (handConfiguration == null) { _form.UpdateStatus("Failed Create Configuration"); _form.EnableTrackingMode(true); instance.Close(); instance.Dispose(); return; } handData = handAnalysis.CreateOutput(); if (handData == null) { _form.UpdateStatus("Failed Create Output"); _form.EnableTrackingMode(true); handConfiguration.Dispose(); instance.Close(); instance.Dispose(); return; } FPSTimer timer = new FPSTimer(_form); _form.UpdateStatus("Init Started"); if (instance.Init() == Status.STATUS_NO_ERROR) { DeviceInfo dinfo; DeviceModel dModel = DeviceModel.DEVICE_MODEL_F200; Device device = instance.CaptureManager.Device; if (device != null) { device.QueryDeviceInfo(out dinfo); dModel = dinfo.model; _maxRange = device.DepthSensorRange.max; } if (handConfiguration != null) { TrackingModeType trackingMode = TrackingModeType.TRACKING_MODE_FULL_HAND; if (_form.GetFullHandModeState()) { trackingMode = TrackingModeType.TRACKING_MODE_FULL_HAND; } handConfiguration.TrackingMode = trackingMode; handConfiguration.EnableAllAlerts(); handConfiguration.SegmentationImageEnabled = true; bool isEnabled = handConfiguration.SegmentationImageEnabled; handConfiguration.ApplyChanges(); _form.resetGesturesList(); int totalNumOfGestures = handConfiguration.NumberOfGestures; if (totalNumOfGestures > 0) { this._form.UpdateGesturesToList("", 0); for (int i = 0; i < totalNumOfGestures; i++) { string gestureName = string.Empty; if (handConfiguration.QueryGestureNameByIndex(i, out gestureName) == Status.STATUS_NO_ERROR) { this._form.UpdateGesturesToList(gestureName, i + 1); } } _form.UpdateGesturesListSize(); } } _form.UpdateStatus("Streaming"); int frameCounter = 0; int frameNumber = 0; while (!_form.stop) { string gestureName = _form.GetGestureName(); if (handConfiguration != null) { if (string.IsNullOrEmpty(gestureName) == false) { if (handConfiguration.IsGestureEnabled(gestureName) == false) { handConfiguration.DisableAllGestures(); handConfiguration.EnableGesture(gestureName, true); handConfiguration.ApplyChanges(); } } else { handConfiguration.DisableAllGestures(); handConfiguration.ApplyChanges(); } } if (instance.AcquireFrame(true) < Status.STATUS_NO_ERROR) { break; } frameCounter++; if (!DisplayDeviceConnection(!instance.IsConnected())) { Sample sample = instance.Sample; if (sample != null && sample.Depth != null) { frameNumber = liveCamera ? frameCounter : instance.CaptureManager.FrameIndex; if (handData != null) { handData.Update(); DisplayPicture(sample.Depth, handData); DisplayGesture(handData, frameNumber); DisplayJoints(handData); DisplayAlerts(handData, frameNumber); } _form.UpdatePanel(); } timer.Tick(); } instance.ReleaseFrame(); } } else { _form.UpdateStatus("Init Failed"); flag = false; } foreach (Image Image in _mImages) { Image.Dispose(); } // Clean Up if (handData != null) { handData.Dispose(); } if (handConfiguration != null) { handConfiguration.Dispose(); } instance.Close(); instance.Dispose(); if (flag) { _form.UpdateStatus("Stopped"); } }