/// <summary> /// 指定された点により近いユーザーをアクティブにする /// </summary> /// <param name="skeletons"></param> public static void SetActivePlayerAtCenter(SkeletonStream stream, SkeletonFrame frame, SkeletonPoint centerPosition) { Skeleton player = null; double distance = 100; var skeletons = frame.ToSkeletonData(); foreach (var skeleton in skeletons) { if (skeleton.TrackingState != SkeletonTrackingState.NotTracked) { double new_ = Distance_XY(centerPosition, skeleton.Position); if ((new_ < distance)) { player = skeleton; distance = new_; } } } if (player != null) { stream.ChooseSkeletons(player.TrackingId); } else { stream.ChooseSkeletons(); } }
/// <summary> /// Read skeletal frame if needed /// </summary> /// <param name="rawFrames">Raw frames</param> /// <param name="skeletonStream">Skeleton stream</param> private void DoReadSkeletalFrame(RawKinectFrames rawFrames, SkeletonStream skeletonStream) { SkeletonFrame skeletonFrame = skeletonStream.OpenNextFrame(AVeryLargeNumberOfMilliseconds); if (skeletonFrame != null) { rawFrames.RawSkeletonFrameData = new SkeletonDataFrame(skeletonFrame); } }
// kinect センサーの初期化 private void InitKinectSensor(KinectSensor kinect) { //カラーストリームの有効化 ColorImageStream clrStream = kinect.ColorStream; clrStream.Enable(rgbFormat); // 深度ストリームの有効化 DepthImageStream depStream = kinect.DepthStream; // depStream.Enable(depthFormat); // /*TEST_DEPTHFRAME*/ //骨格ストリームの有効化 SkeletonStream skelStream = kinect.SkeletonStream; skelStream.Enable(); // バッファの初期化 pixelBuffer = new byte[clrStream.FramePixelDataLength]; if (TEST_DEPTHFLAG) { depthBuffer = new short[depStream.FramePixelDataLength]; clrPntBuffer = new ColorImagePoint[depStream.FramePixelDataLength]; depMaskBuffer = new byte[clrStream.FramePixelDataLength]; } skeletonBuffer = new Skeleton[skelStream.FrameSkeletonArrayLength]; bmpBuffer = new RenderTargetBitmap(clrStream.FrameWidth, clrStream.FrameHeight, 96, 96, PixelFormats.Default); rgbimage.Source = bmpBuffer; // 音声認識エンジンの初期化 speechEngine = InitSpeechEngine(); // イベントハンドラの登録 kinect.AllFramesReady += AllFramesReady; kinect.AudioSource.SoundSourceAngleChanged += SoundSourceChanged; speechEngine.SpeechRecognized += SpeechRecognized; // 近接モードに変更 kinect.DepthStream.Range = DepthRange.Near; // 着席モードに変更 kinect.SkeletonStream.TrackingMode = SkeletonTrackingMode.Seated; // Kinect センサーからのストリーム取得を開始 System.IO.Stream stream = kinect.AudioSource.Start(); var speechAudioFormat = new SpeechAudioFormatInfo(EncodingFormat.Pcm, 16000, 16, 1, 32000, 2, null); speechEngine.SetInputToAudioStream(stream, speechAudioFormat); speechEngine.RecognizeAsync(RecognizeMode.Multiple); }
private void SkeletonInitialization() { // set up skeleton and depth stream this.sensor.DepthStream.Enable(); this.sensor.DepthFrameReady += sensor_DepthFrameReady; //sensor.ColorStream.Enable(); this.sensor.SkeletonStream.Enable(); this.ss = sensor.SkeletonStream; ss.EnableTrackingInNearRange = true; this.sensor.SkeletonFrameReady += sensor_SkeletonFrameReady; // set up interaciton stream this.intAdapter = new interactionAdapter(); inStream = new InteractionStream(sensor, this.intAdapter); inStream.InteractionFrameReady += inStream_InteractionFrameReady; }
public static void EnableWithDefaultSmoothing(this SkeletonStream stream) { if (stream == null) { throw new ArgumentNullException("stream"); } stream.Enable(new TransformSmoothParameters { Correction = 0.5f, JitterRadius = 0.05f, MaxDeviationRadius = 0.04f, Prediction = 0.0f, Smoothing = 0.5f, }); }
//private byte[] depthImagePixelData; private void InitializeKinectSensor(KinectSensor kinectSensor) { if (kinectSensor != null) { DepthImageStream depthStream = kinectSensor.DepthStream; depthStream.Enable(); this.depthImageBitMap = new WriteableBitmap(depthStream.FrameWidth, depthStream.FrameHeight, 96, 96, PixelFormats.Gray16, null); this._depthImageBitMap = new WriteableBitmap(depthStream.FrameWidth, depthStream.FrameHeight, 96, 96, PixelFormats.Gray16, null); this.depthImageBitmapRect = new Int32Rect(0, 0, depthStream.FrameWidth, depthStream.FrameHeight); this.depthImageStride = depthStream.FrameWidth * depthStream.FrameBytesPerPixel; SkeletonStream skeletonStream = kinectSensor.SkeletonStream; skeletonStream.Enable(); RawDepthImage.Source = this.depthImageBitMap; EnhDepthImage.Source = this._depthImageBitMap; kinectSensor.DepthFrameReady += kinectSensor_DepthFrameReady; //kinectSensor.DepthFrameReady += new EventHandler<DepthImageFrameReadyEventArgs>(kinectSensor_DepthFrameReady); kinectSensor.Start(); } }
private void InitializeKinectSensor(KinectSensor sensor) { if (kinect != null) { DepthImageStream depthStream = kinect.DepthStream; depthStream.Enable(); this.depthImageBitmap = new WriteableBitmap(depthStream.FrameWidth, depthStream.FrameHeight, 96, 96, PixelFormats.Bgr32, null); this.depthImageBitmapRect = new Int32Rect(0, 0, depthStream.FrameWidth, depthStream.FrameHeight); this.depthImageStride = depthStream.FrameWidth * 4; DepthLevelsImage.Source = this.depthImageBitmap; SkeletonStream skeletonStream = kinect.SkeletonStream; skeletonStream.Enable(); sensor.DepthFrameReady += kinect_DepthFrameReady; sensor.Start(); } }
/// <summary> /// 指定された点により近いユーザーをアクティブにする /// </summary> /// <param name="skeletons"></param> public static void SetActivePlayerAtCenter( SkeletonStream stream, SkeletonFrame frame, SkeletonPoint centerPosition ) { Skeleton player = null; double distance = 100; var skeletons = frame.ToSkeletonData(); foreach ( var skeleton in skeletons ) { if ( skeleton.TrackingState != SkeletonTrackingState.NotTracked ) { double new_ = Distance_XY( centerPosition, skeleton.Position ); if ( (new_ < distance) ) { player = skeleton; distance = new_; } } } if ( player != null ) { stream.ChooseSkeletons( player.TrackingId ); } else { stream.ChooseSkeletons(); } }
private void Window_Loaded(object sender, RoutedEventArgs e) { try { //Kinectセンサーの取得(エラー処理など省略版) kinect = KinectSensor.KinectSensors[0]; //カラー・骨格ストリームの有効化 ColorImageStream clrStream = kinect.ColorStream; clrStream.Enable(rgbFormat); SkeletonStream skelStream = kinect.SkeletonStream; skelStream.Enable(); DepthImageStream depStream = kinect.DepthStream; depStream.Enable(depthFormat); //バッファの初期化 pixelBuffer = new byte[kinect.ColorStream.FramePixelDataLength]; skeletonBuffer = new Skeleton[skelStream.FrameSkeletonArrayLength]; bmpBuffer = new WriteableBitmap(kinect.ColorStream.FrameWidth, kinect.ColorStream.FrameHeight, 96, 96, PixelFormats.Bgr32, null); depthBuffer = new short[depStream.FramePixelDataLength]; clrPntBuffer = new ColorImagePoint[depStream.FramePixelDataLength]; rgbImage.Source = bmpBuffer; //イベントハンドラの登録 kinect.ColorFrameReady += ColorImageReady; kinect.AllFramesReady += AllFramesReady; //Kinectセンサーからのストリーム取得を開始 kinect.Start(); } catch { Console.WriteLine("kinectがありません。"); } }
private void InitializeKinectSensor(KinectSensor kinectSensor) { if (kinectSensor != null) { ColorImageStream colorStream = kinectSensor.ColorStream; kinectSensor.ColorStream.Enable(ColorImageFormat.RgbResolution1280x960Fps12); this.colorImageBitmap = new WriteableBitmap(colorStream.FrameWidth, colorStream.FrameHeight, 96, 96, PixelFormats.Bgr32, null); this.colorImageBitmapRect = new Int32Rect(0, 0, colorStream.FrameWidth, colorStream.FrameHeight); this.colorImageStride = colorStream.FrameWidth * colorStream.FrameBytesPerPixel; ColorImageElement.Source = this.colorImageBitmap; kinectSensor.ColorFrameReady += kinectSensor_ColorFrameReady; //kinectSensor.ColorFrameReady += new EventHandler<ColorImageFrameReadyEventArgs>(kinectSensor_ColorFrameReady); this.kinectDevice.SkeletonStream.Enable(); this.frameSkeletons = new Skeleton[this.kinectDevice.SkeletonStream.FrameSkeletonArrayLength]; this.kinectDevice.SkeletonFrameReady += KinectDevice_SkeletonFrameReady; DepthImageStream depthStream = this.kinectDevice.DepthStream; depthStream.Enable(); this.depthImageBitMap = new WriteableBitmap(depthStream.FrameWidth, depthStream.FrameHeight, 96, 96, PixelFormats.Gray16, null); this._depthImageBitMap = new WriteableBitmap(depthStream.FrameWidth, depthStream.FrameHeight, 96, 96, PixelFormats.Gray16, null); this.depthImageBitmapRect = new Int32Rect(0, 0, depthStream.FrameWidth, depthStream.FrameHeight); this.depthImageStride = depthStream.FrameWidth * depthStream.FrameBytesPerPixel; SkeletonStream skeletonStream = this.kinectDevice.SkeletonStream; skeletonStream.Enable(); //suggest choice the last //DepthImage.Source = this.depthImageBitMap; //DepthImage.Source = this._depthImageBitMap; this.kinectDevice.DepthFrameReady += kinectSensor_DepthFrameReady; //kinectSensor.DepthFrameReady += new EventHandler<DepthImageFrameReadyEventArgs>(kinectSensor_DepthFrameReady); this.kinectDevice.Start(); } }
public SkeletonStreamAdapter(SkeletonStream skeletonStream) { _skeletonStream = skeletonStream; }
static void SendSkeleton(UdpClient client, SkeletonStream stream, Commands command, IPEndPoint destination) { using (var frame = stream.OpenNextFrame(50)) { if (frame == null) return; var sc = GetSkeletonCommand(command); if (!sc.HasValue) return; client.Send(ToBytes(sc.Value), sizeof(int), destination); Skeleton[] data = new Skeleton[frame.SkeletonArrayLength]; frame.CopySkeletonDataTo(data); using (MemoryStream ms = new MemoryStream()) { BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(ms, data); var toSend = ms.ToArray(); Send(client, toSend, destination); var empty = new byte[Math.Max(SKELETON_BUFFER_LENGTH - toSend.Length, 0)]; if (empty.Length > 0) Send(client, empty, destination); } } }
public BodyFrameStream360(Kinect360 kinect360) { _kinect360 = kinect360; _skeletonStream = _kinect360.KinectSensor.SkeletonStream; }
private void WindowLoaded(object sender, RoutedEventArgs e) { //キネクトを初期化 KinectSensor kinect = KinectSensor.KinectSensors[0]; //骨格ストリームの有効化 SkeletonStream skelStream = kinect.SkeletonStream; skelStream.Enable(); //バッファの初期化 skeletonbuffer = new Skeleton[skelStream.FrameSkeletonArrayLength]; right_wrist = new Joint[skelStream.FrameSkeletonArrayLength]; left_wrist = new Joint[skelStream.FrameSkeletonArrayLength]; right_wrist_x_pos = new double[skelStream.FrameSkeletonArrayLength][]; for (int i = 0; i < skelStream.FrameSkeletonArrayLength; ++i) { right_wrist_x_pos[i] = new double[frame_num]; } left_wrist_x_pos = new double[skelStream.FrameSkeletonArrayLength][]; for (int i = 0; i < skelStream.FrameSkeletonArrayLength; ++i) { left_wrist_x_pos[i] = new double[frame_num]; } right_shoulder = new Joint[skelStream.FrameSkeletonArrayLength]; left_shoulder = new Joint[skelStream.FrameSkeletonArrayLength]; right_shoulder_x_pos = new double[skelStream.FrameSkeletonArrayLength][]; for (int i = 0; i < skelStream.FrameSkeletonArrayLength; ++i) { right_shoulder_x_pos[i] = new double[frame_num]; } left_shoulder_x_pos = new double[skelStream.FrameSkeletonArrayLength][]; for (int i = 0; i < skelStream.FrameSkeletonArrayLength; ++i) { left_shoulder_x_pos[i] = new double[frame_num]; } relative_right = new double[skelStream.FrameSkeletonArrayLength][]; for (int i = 0; i < skelStream.FrameSkeletonArrayLength; ++i) { relative_right[i] = new double[frame_num]; } relative_left = new double[skelStream.FrameSkeletonArrayLength][]; for (int i = 0; i < skelStream.FrameSkeletonArrayLength; ++i) { relative_left[i] = new double[frame_num]; } //イベントハンドラを設定 kinect.SkeletonFrameReady += handsign_check; //キネクトを起動 kinect.Start(); }