Beispiel #1
0
        /// <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();
            }
        }
Beispiel #2
0
        /// <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);
            }
        }
Beispiel #3
0
        // 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;
        }
Beispiel #5
0
        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,
            });
        }
Beispiel #6
0
        //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がありません。");
            }
        }
Beispiel #10
0
        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();
            }
        }
Beispiel #11
0
 public SkeletonStreamAdapter(SkeletonStream skeletonStream)
 {
     _skeletonStream = skeletonStream;
 }
Beispiel #12
0
        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 SkeletonStreamAdapter(SkeletonStream skeletonStream)
 {
     _skeletonStream = skeletonStream;
 }
Beispiel #14
0
 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();
        }