Beispiel #1
0
        /// <summary>
        /// Event handler for every kinect depth frame,
        /// </summary>
        /// <param name="sender">Event sender</param>
        /// <param name="e">Event arguments</param>
        private void OnSensorDepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
        {
            /// Note: this method is running inside the kinectCallbackThread
            /// And are called every time the kinect API have a new depth frame ready

            // 1. Get depth image frame
            DepthImageFrame newDepthFrame = e.OpenDepthImageFrame();

            if (newDepthFrame != null)
            {
                lock (rawDepthFrameBuffer_lock)
                {
                    // 2. Copy to raw depth frame buffer
                    newDepthFrame.CopyPixelDataTo(rawDepthFrameBuffer);
                }

                if (postProsessingTask.Status != TaskStatus.Running)
                {
                    // 3. Start new post-processing task
                    postProsessingTask = Task.Factory.StartNew(() => PostProcessFrame());
                }
                else
                {
                    // If post-processing is already running increment frames dropped and ignore current frame
                    frameDroped++;
                }
            }

            newDepthFrame.Dispose();
        }
        private void DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
        {
            DepthImageFrame frame = e.OpenDepthImageFrame();

            if (frame != null)
            {
                if (this.first || frame.Width != width || frame.Height != height)
                {
                    this.InitBuffers(frame);
                    this.DisposeTextures();
                    this.first = false;
                }

                this.FInvalidate = true;
                this.frameindex  = frame.FrameNumber;
                lock (m_lock)
                {
                    frame.CopyPixelDataTo(this.rawdepth);
                    for (int i16 = 0; i16 < this.width * this.height; i16++)
                    {
                        int player = rawdepth[i16] & DepthImageFrame.PlayerIndexBitmask;
                        player = player % this.colors.Length;
                        this.playerimage[i16] = this.colors[player];
                    }
                }

                frame.Dispose();
            }
        }
Beispiel #3
0
        private void AllFrameReady(object sender, AllFramesReadyEventArgs e)
        {
            if (!FUpdate)
            {
                return;
            }

            DepthImageFrame df = e.OpenDepthImageFrame();

            if (df != null)
            {
                df.CopyPixelDataTo(this.depthimage);
                this.runtime.Runtime.MapDepthFrameToColorFrame(DepthImageFormat.Resolution640x480Fps30, this.depthimage, ColorImageFormat.RgbResolution640x480Fps30, this.cp);

                lock (m_lock)
                {
                    for (int i = 0; i < this.cp.Length; i++)
                    {
                        this.colorimage[i * 2]     = (float)VMath.Map(cp[i].X, 0, 640, 0, 1, TMapMode.Clamp);
                        this.colorimage[i * 2 + 1] = (float)VMath.Map(cp[i].Y, 0, 480, 0, 1, TMapMode.Clamp);
                    }
                }

                this.FInvalidate = true;
                this.FUpdate     = false;
                this.frameindex  = df.FrameNumber;

                df.Dispose();
            }
        }
        private void DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
        {
            DepthImageFrame frame = e.OpenDepthImageFrame();

            if (frame != null)
            {
                this.FInvalidate = true;
                this.frameindex  = frame.FrameNumber;

                bool[] fnd = new bool[9];

                lock (m_lock)
                {
                    frame.CopyPixelDataTo(this.rawdepth);
                    for (int i16 = 0; i16 < 640 * 480; i16++)
                    {
                        int player = rawdepth[i16] & DepthImageFrame.PlayerIndexBitmask;

                        this.playerimage[i16] = this.colors[player];
                        fnd[player]           = true;
                    }
                }

                this.found = fnd;

                frame.Dispose();
            }
        }
        private void CalibrateFrameByFrame(object sender, DepthImageFrameReadyEventArgs e)
        {
            DepthImageFrame depthFrame = e.OpenDepthImageFrame();

            if (depthFrame == null)
            {
                return;
            }
            depthFrame.CopyDepthImagePixelDataTo(this.depthPixels);
            depthFrame.Dispose();
            for (int i = 0; i < this.depthPixels.Length; ++i)
            {
                if (!depthPixelsReference[i].Contains(depthPixels[i].Depth))
                {
                    depthPixelsReference[i].Add(depthPixels[i].Depth);
                }
            }
            currentCalibrateImageNb++;
            if (currentCalibrateImageNb >= CALIBRATE_LEVEL && !isCalibrate)
            {
                isCalibrate = true;
                kinectSensor.DepthFrameReady += this.SensorDepthFrameReady;
                kinectSensor.DepthFrameReady -= this.CalibrateFrameByFrame;
            }
        }
        void mykinect_AllFramesReady(object sender, AllFramesReadyEventArgs e)
        {
            #region 基本彩色影像與深度影像處理
            depthframe = e.OpenDepthImageFrame();
            colorframe = e.OpenColorImageFrame();

            if (depthframe == null || colorframe == null)
            {
                return;
            }

            depthpixelData = new short[depthframe.PixelDataLength];
            depthframe.CopyPixelDataTo(depthpixelData);
            _DepthImageBitmap.WritePixels(_DepthImageBitmapRect, depthpixelData, _DepthImageStride, 0);
            depthPixel = new DepthImagePixel[depthframe.PixelDataLength];
            depthframe.CopyDepthImagePixelDataTo(depthPixel);

            colorpixelData = new byte[colorframe.PixelDataLength];
            colorframe.CopyPixelDataTo(colorpixelData);
            #endregion

            if (depthpixelData != null)
            {
                PlayerFilter();
                Alarm();
            }

            _ColorImageBitmap.WritePixels(_ColorImageBitmapRect, colorpixelData, _ColorImageStride, 0);
            depthframe.Dispose();
            colorframe.Dispose();
        }
        void mykinect_AllFramesReady(object sender, AllFramesReadyEventArgs e)
        {
            depthframe = e.OpenDepthImageFrame();
            colorframe = e.OpenColorImageFrame();

            if (depthframe == null || colorframe == null)
            {
                return;
            }

            depthpixelData = new short[depthframe.PixelDataLength];
            depthframe.CopyPixelDataTo(depthpixelData);
            _DepthImageBitmap.WritePixels(_DepthImageBitmapRect, depthpixelData, _DepthImageStride, 0);
            depthPixel = new DepthImagePixel[depthframe.PixelDataLength];
            depthframe.CopyDepthImagePixelDataTo(depthPixel);

            colorpixelData = new byte[colorframe.PixelDataLength];
            colorframe.CopyPixelDataTo(colorpixelData);

            if (depthpixelData != null)
            {
                UserBorderCaculation();
            }

            _ColorImageBitmap.WritePixels(_ColorImageBitmapRect, colorpixelData, _ColorImageStride, 0);

            depthframe.Dispose();
            colorframe.Dispose();
        }
Beispiel #8
0
        //[MethodImpl(MethodImplOptions.Synchronized)]
        private void OnDepthFrameReady(object sender, DepthImageFrameReadyEventArgs eventArgs)
        {
            DepthImageFrame frame = eventArgs.OpenDepthImageFrame();

            if (frame != null)
            {
                try
                {
                    if (depthPixelData.Length != frame.PixelDataLength)
                    {
                        depthPixelData = new short[frame.PixelDataLength];
                    }
                    frame.CopyPixelDataTo(depthPixelData);
                    foreach (DepthFrameListener listener in depthFrameListeners)
                    {
                        listener.onDepthFrameReady(depthPixelData);
                    }
                }
                finally
                {
                    if (frame != null)
                    {
                        frame.Dispose();
                    }
                }
            }
        }
Beispiel #9
0
        private void DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
        {
            DepthImageFrame frame = e.OpenDepthImageFrame();

            if (frame != null)
            {
                if (this.first || frame.Format != this.format || this.width != frame.Width || this.height != frame.Height)
                {
                    this.InitBuffers(frame);
                    this.DisposeTextures();
                    this.first = false;
                }

                this.FInvalidate = true;
                this.frameindex  = frame.FrameNumber;
                lock (m_lock)
                {
                    frame.CopyDepthImagePixelDataTo(this.depthpixels);
                    for (int i16 = 0; i16 < this.width * this.height; i16++)
                    {
                        this.rawdepth[i16] = this.depthpixels[i16].Depth;
                    }
                }

                frame.Dispose();
            }
        }
Beispiel #10
0
        void mykinect_AllFramesReady(object sender, AllFramesReadyEventArgs e)
        {
            depthframe = e.OpenDepthImageFrame();
            colorframe = e.OpenColorImageFrame();

            if (depthframe != null && colorframe != null)
            {
                depthpixelData = new short[depthframe.PixelDataLength];
                depthframe.CopyPixelDataTo(depthpixelData);
                _DepthImageBitmap.WritePixels(_DepthImageBitmapRect, depthpixelData, _DepthImageStride, 0);

                colorpixelData = new byte[colorframe.PixelDataLength];
                colorframe.CopyPixelDataTo(colorpixelData);

                if (depthpixelData != null)
                {
                    RangeFilter();
                }

                _ColorImageBitmap.WritePixels(_ColorImageBitmapRect, colorpixelData, _ColorImageStride, 0);

                depthframe.Dispose();
                colorframe.Dispose();
            }
        }
        private void SensorDepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
        {
            if (this.isTreating == true)
            {
                return;
            }
            this.isTreating = true;
            DepthImageFrame depthFrame = e.OpenDepthImageFrame();

            if (depthFrame != null)
            {
                depthFrame.CopyDepthImagePixelDataTo(this.depthPixels);
                depthFrame.Dispose();

                int colorPixelIndex = 0;
                int lenght          = this.depthPixels.Length;
                for (int i = 0; i < lenght; ++i)
                {
                    short depth = this.depthPixels[i].Depth;

                    byte intensity;
                    if (depth < MIN_DEPTH || depth > MAX_DEPTH || !IsUserPixel(i, depth))
                    {
                        intensity = (byte)255;
                    }
                    else
                    {
                        intensity = (byte)0;
                    }

                    // Write out blue byte
                    this.colorPixels[colorPixelIndex++] = intensity;

                    // Write out green byte
                    this.colorPixels[colorPixelIndex++] = intensity;

                    // Write out red byte
                    this.colorPixels[colorPixelIndex++] = intensity;

                    //colorPixelIndex++; si on a pas de transparence (bgr32)
                    if (intensity == 0)
                    {
                        this.colorPixels[colorPixelIndex++] = 255;
                    }
                    else
                    {
                        this.colorPixels[colorPixelIndex++] = 0;
                    }
                }
                // Ecriture de l'image
                this.colorBitmap.WritePixels(
                    new Int32Rect(0, 0, this.colorBitmap.PixelWidth, this.colorBitmap.PixelHeight),
                    this.colorPixels,
                    this.colorBitmap.PixelWidth * sizeof(int),
                    0);
                OnImageReady();
            }
            this.isTreating = false;
        }
Beispiel #12
0
        /// <summary>
        /// Handles the Kinect AllFramesReady event
        /// </summary>
        private void Sensor_AllFramesReady(object sender, AllFramesReadyEventArgs e)
        {
            ColorImageFrame colorFrame = null;
            DepthImageFrame depthFrame = null;

            Skeleton[] skeletonData;

            try
            {
                colorFrame = e.OpenColorImageFrame();
                depthFrame = e.OpenDepthImageFrame();

                using (var skeletonFrame = e.OpenSkeletonFrame())
                {
                    if (colorFrame == null || depthFrame == null || skeletonFrame == null)
                    {
                        return;
                    }

                    skeletonData = new Skeleton[skeletonFrame.SkeletonArrayLength];
                    skeletonFrame.CopySkeletonDataTo(skeletonData);
                }

                // Find a skeleton to track.
                // First see if our old one is good.
                // When a skeleton is in PositionOnly tracking state, don't pick a new one
                // as it may become fully tracked again.
                Skeleton skeletonOfInterest = skeletonData.FirstOrDefault(s => s.TrackingId == this.trackedSkeletonId && s.TrackingState != SkeletonTrackingState.NotTracked);

                if (skeletonOfInterest == null)
                {
                    // Old one wasn't around.  Find any skeleton that is being tracked and use it.
                    skeletonOfInterest = skeletonData.FirstOrDefault(s => s.TrackingState == SkeletonTrackingState.Tracked);

                    if (skeletonOfInterest != null)
                    {
                        this.trackedSkeletonId = skeletonOfInterest.TrackingId;
                    }
                }

                if (this.FrameDataUpdated != null)
                {
                    this.FrameDataUpdated(this, new FrameData(colorFrame, depthFrame, skeletonOfInterest));
                }
            }
            finally
            {
                if (colorFrame != null)
                {
                    colorFrame.Dispose();
                }

                if (depthFrame != null)
                {
                    depthFrame.Dispose();
                }
            }
        }
Beispiel #13
0
        private void Sensor_DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
        {
            DepthImageFrame frame = e.OpenDepthImageFrame();


            if (frame != null)
            {
                CurrentFrame++;

                DepthImagePixel[] pixelArray = new DepthImagePixel[sensor.DepthStream.FramePixelDataLength];

                //Copy depth data to Array
                frame.CopyDepthImagePixelDataTo(pixelArray);


                if (isSet == false && focusPoint.X != -1)
                {
                    focusPoint.Depth  = pixelArray[pointToIndex(frame.Width, focusPoint)].Depth;
                    lbl_Point.Text    = "(" + focusPoint.X + "," + focusPoint.Y + ")";
                    lbl_Distance.Text = (float)focusPoint.Depth / 1000 + " m";

                    //Debug.WriteLine("Set New Focus Point On {" + focusPoint.X + "," + focusPoint.Y + "} Distance : " + (float)focusPoint.Depth / 1000 + " Meters");
                    isSet    = true;
                    focusSet = true;
                }
                else if (focusSet == true)
                {
                    lbl_Distance.Text = (float)focusPoint.Depth / 1000 + " m";
                }

                //Dont collide with graphics driver
                if (isWorking == false)
                {
                    isWorking = true;

                    t = new Thread(() =>
                    {
                        depthSet(ref pixelArray, frame.Width, frame.Height);
                    });

                    t.Start();

                    //Modify Text
                    lbl_status.Text = "Depth Average : " + average(ref pixelArray);
                }

                frame.Dispose();
            }
            else
            {
                //If frame is null do nothing...

                //Modify Text
                lbl_status.Text = "DATA : Not Received";
            }
        }
Beispiel #14
0
        private void OnAllFramesReady(object sender, AllFramesReadyEventArgs allFramesReadyEventArgs)
        {
            ColorImageFrame colorImageFrame = null;
            DepthImageFrame depthImageFrame = null;
            SkeletonFrame   skeletonFrame   = null;

            bool openColorFrame    = (IsTrackingFace || IsWritingColorStream);
            bool openDepthFrame    = (IsTrackingFace || IsWritingDepthStream);
            bool openSkeletonFrame = (IsTrackingFace || IsTrackingSkeletons);

            try
            {
                if (openColorFrame)
                {
                    colorImageFrame = allFramesReadyEventArgs.OpenColorImageFrame();
                }
                if (openDepthFrame)
                {
                    depthImageFrame = allFramesReadyEventArgs.OpenDepthImageFrame();
                }
                if (openSkeletonFrame)
                {
                    skeletonFrame = allFramesReadyEventArgs.OpenSkeletonFrame();
                }

                ProcessFrame(colorImageFrame);
                ProcessFrame(depthImageFrame);
                ProcessFrame(skeletonFrame);

                int skeletonFrameNumber = (skeletonFrame != null ? skeletonFrame.FrameNumber : -1);
                ProcessData(skeletonFrameNumber);
            }
            finally
            {
                if (colorImageFrame != null)
                {
                    colorImageFrame.Dispose();
                }

                if (depthImageFrame != null)
                {
                    depthImageFrame.Dispose();
                }

                if (skeletonFrame != null)
                {
                    skeletonFrame.Dispose();
                }
            }
        }
Beispiel #15
0
 void kinectSensor_DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
 {
     if (lastDepthFrame != null)
     {
         lastDepthFrame.Dispose();
         lastDepthFrame = null;
     }
     lastDepthFrame = e.OpenDepthImageFrame();
     if (lastDepthFrame != null)
     {
         depthPixelDate = new short[lastDepthFrame.PixelDataLength];
         lastDepthFrame.CopyPixelDataTo(depthPixelDate);
         depthImageBitMap.WritePixels(depthImageBitmapRect, depthPixelDate, depthImageStride, 0);
     }
 }
Beispiel #16
0
        private void DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
        {
            DepthImageFrame frame = e.OpenDepthImageFrame();

            if (frame != null)
            {
                this.FInvalidate = true;
                if (frame.FrameNumber != this.frameindex)
                {
                    this.RebuildBuffer(frame.Format, false);

                    this.frameindex = frame.FrameNumber;
                    frame.CopyDepthImagePixelDataTo(this.depthpixels);
                    int cnt = 0;
                    int img = 0;
                    //DepthImagePixel dp;
                    //dp.
                    this.runtime.Runtime.CoordinateMapper.MapDepthFrameToSkeletonFrame(frame.Format, this.depthpixels, this.skelpoints);
                    for (int h = 0; h < this.height; h++)
                    {
                        for (int w = 0; w < this.width; w++)
                        {
                            //this.runtime.Runtime.CoordinateMapper.
                            //SkeletonPoint sp = frame.MapToSkeletonPoint(w, h);
                            SkeletonPoint sp = this.skelpoints[img];
                            this.world0[cnt]     = sp.X;
                            this.world0[cnt + 1] = sp.Y;
                            this.world0[cnt + 2] = sp.Z;
                            this.world0[cnt + 3] = 1.0f;
                            cnt += 4;
                            img++;
                        }
                    }

                    frame.Dispose();

                    lock (m_lock)
                    {
                        float[] tmp = this.world0;
                        this.world0 = this.world1;
                        this.world1 = tmp;
                    }
                }
            }
        }
Beispiel #17
0
        private void KinectDevice_DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
        {
            if (depthFrame != null)
            {
                depthFrame.Dispose();
                depthFrame = null;
            }

            depthFrame = e.OpenDepthImageFrame();

            {
                if (depthFrame != null)
                {
                    depthPixelData = new short[depthFrame.PixelDataLength];
                    depthFrame.CopyPixelDataTo(depthPixelData);
                }
            }
        }
Beispiel #18
0
        void kinectSensor_DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
        {
            using (DepthImageFrame depthFrame = e.OpenDepthImageFrame())
            {
                if (lastDepthFrame != null)
                {
                    lastDepthFrame.Dispose();
                    lastDepthFrame = null;
                }
                lastDepthFrame = e.OpenDepthImageFrame();
                if (lastDepthFrame != null)
                {
                    depthPixelData = new short[lastDepthFrame.PixelDataLength];
                    lastDepthFrame.CopyPixelDataTo(depthPixelData);
                    depthImageBitmap.WritePixels(depthImageBitmapRect, depthPixelData, depthImageStride, 0);

                    CreateLighterShadesOfGray(depthFrame, depthPixelData);
                }
            }
        }
        private void DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
        {
            DepthImageFrame frame = e.OpenDepthImageFrame();

            if (frame != null)
            {
                this.FInvalidate = true;
                this.frameindex  = frame.FrameNumber;
                lock (m_lock)
                {
                    frame.CopyDepthImagePixelDataTo(this.depthpixels);

                    for (int i16 = 0; i16 < 640 * 480; i16++)
                    {
                        this.rawdepth[i16] = this.depthpixels[i16].Depth;
                    }
                }

                frame.Dispose();
            }
        }
Beispiel #20
0
        void kinectSensor_DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
        {
            if (depthFrame != null)
            {
                depthFrame.Dispose();
                depthFrame = null;
            }

            depthFrame = e.OpenDepthImageFrame();

            {
                if (depthFrame != null)
                {
                    depthPixelData = new short[depthFrame.PixelDataLength];
                    depthFrame.CopyPixelDataTo(depthPixelData);
                    this.depthImageBitMap.WritePixels(this.depthImageBitmapRect, depthPixelData, this.depthImageStride, 0);

                    CreatePlayerDepthImage(this.depthFrame, depthPixelData);
                }
            }
        }
Beispiel #21
0
        void kinectSensor_DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
        {
            if (lastDepthFrame != null)
            {
                lastDepthFrame.Dispose();
                lastDepthFrame = null;
            }
            lastDepthFrame = e.OpenDepthImageFrame();
            if (lastDepthFrame != null)
            {
                depthPixelDate = new short[lastDepthFrame.PixelDataLength];
                lastDepthFrame.CopyPixelDataTo(depthPixelDate);
                depthImageBitMap.WritePixels(depthImageBitmapRect, depthPixelDate, depthImageStride, 0);


                //   CreateLighterShadesOfGray(this.lastDepthFrame, depthPixelDate);
                //    CreateBetterShadesOfGray(this.lastDepthFrame, depthPixelDate);
                CreateColorDepthImage(this.lastDepthFrame, depthPixelDate);
                //   DepthImage.MouseLeftButtonUp += new EventHandler<MouseButtonEventArgs>(DepthImage_MouseLeftButtonUp);
            }
        }
Beispiel #22
0
        private void AllFrameReady(object sender, AllFramesReadyEventArgs e)
        {
            DepthImageFrame frame = e.OpenDepthImageFrame();

            if (frame != null)
            {
                if (frame.FrameNumber != this.frameindex)
                {
                    this.FInvalidate = true;
                    this.RebuildBuffer(frame.Format, false);

                    this.frameindex = frame.FrameNumber;
                    frame.CopyDepthImagePixelDataTo(this.depthpixels);

                    lock (m_lock)
                    {
                        this.runtime.Runtime.CoordinateMapper.MapDepthFrameToColorFrame(frame.Format, this.depthpixels, ColorImageFormat.RgbResolution640x480Fps30, this.colpoints);
                    }
                    frame.Dispose();
                }
            }
        }
Beispiel #23
0
        private void DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
        {
            DepthImageFrame frame = e.OpenDepthImageFrame();

            if (frame != null)
            {
                if (frame.FrameNumber != this.frameindex)
                {
                    this.FInvalidate = true;
                    this.RebuildBuffer(frame.Format, false);

                    this.frameindex = frame.FrameNumber;
                    frame.CopyDepthImagePixelDataTo(this.depthpixels);

                    lock (m_lock)
                    {
                        this.runtime.Runtime.CoordinateMapper.MapDepthFrameToSkeletonFrame(frame.Format, this.depthpixels, this.skelpoints);
                    }
                    frame.Dispose();
                }
            }
        }
Beispiel #24
0
        private void DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
        {
            DepthImageFrame frame = e.OpenDepthImageFrame();

            if (frame != null)
            {
                this.FInvalidate = true;
                this.frameindex  = frame.FrameNumber;
                lock (m_lock)
                {
                    frame.CopyPixelDataTo(this.rawdepth);
                    for (int i16 = 0; i16 < 512 * 424; i16++)
                    {
                        int player = rawdepth[i16] & DepthImageFrame.PlayerIndexBitmask;
                        player = player % this.colors.Length;
                        this.playerimage[i16] = this.colors[player];
                    }
                }

                frame.Dispose();
            }
        }
        void mykinect_AllFramesReady(object sender, AllFramesReadyEventArgs e)
        {
            #region 基本影像處理
            depthframe = e.OpenDepthImageFrame();
            colorframe = e.OpenColorImageFrame();

            if (depthframe == null || colorframe == null)
            {
                return;
            }

            depthpixelData = new short[depthframe.PixelDataLength];
            depthframe.CopyPixelDataTo(depthpixelData);
            depthPixel = new DepthImagePixel[depthframe.PixelDataLength];
            depthframe.CopyDepthImagePixelDataTo(depthPixel);
            _DepthImageBitmap.WritePixels(_DepthImageBitmapRect, depthpixelData, _DepthImageStride, 0);
            colorpixelData = new byte[colorframe.PixelDataLength];
            colorframe.CopyPixelDataTo(colorpixelData);
            #endregion

            #region 座標轉換與過濾
            colorpoints = new ColorImagePoint[depthpixelData.Length];
            kinect.CoordinateMapper.MapDepthFrameToColorFrame(
                depthframe.Format,
                depthPixel,
                colorframe.Format,
                colorpoints);

            if (depthpixelData != null)
            {
                RangeFilter();
            }
            #endregion

            _ColorImageBitmap.WritePixels(_ColorImageBitmapRect, colorpixelData, _ColorImageStride, 0);

            depthframe.Dispose();
            colorframe.Dispose();
        }
Beispiel #26
0
        void kinectSensor_DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
        {
            if (depthFrame != null)
            {
                depthFrame.Dispose();
                depthFrame = null;
            }

            depthFrame = e.OpenDepthImageFrame();

            {
                if (depthFrame != null)
                {
                    depthPixelData = new short[depthFrame.PixelDataLength];
                    depthFrame.CopyPixelDataTo(depthPixelData);
                    this.depthImageBitMap.WritePixels(this.depthImageBitmapRect, depthPixelData, this.depthImageStride, 0);

                    //choice one of the last two
                    //CreateLighterShadesOfGray(this.depthFrame, depthPixelData);
                    CreateColorDepthImage(this.depthFrame, depthPixelData);
                }
            }
        }
Beispiel #27
0
        private void AllFrameReady(object sender, AllFramesReadyEventArgs e)
        {
            //ColorImageFrame frame = e.OpenColorImageFrame();
            DepthImageFrame df = e.OpenDepthImageFrame();



            if (df != null)
            {
                this.FInvalidate = true;
                //this.frameindex = frame.FrameNumber;

                lock (m_colorlock)
                {
                    df.CopyPixelDataTo(this.depthimage);
                    //frame.CopyPixelDataTo(this.colorimage);
                    //Marshal.Copy(frame..Image.Bits, 0, this.colorimage, 640 * 480 * 4);
                }

                this.runtime.Runtime.MapDepthFrameToColorFrame(DepthImageFormat.Resolution320x240Fps30, this.depthimage, ColorImageFormat.RgbResolution640x480Fps30, this.cp);

                lock (m_colorlock)
                {
                    for (int i = 0; i < this.cp.Length; i++)
                    {
                        this.colorimage[i * 2]     = (float)VMath.Map(cp[i].X, 0, 640, 0, 1, TMapMode.Clamp);
                        this.colorimage[i * 2 + 1] = (float)VMath.Map(cp[i].Y, 0, 480, 0, 1, TMapMode.Clamp);
                    }
                }


                this.FInvalidate = true;
                this.frameindex  = df.FrameNumber;

                df.Dispose();
            }
        }
Beispiel #28
0
        private void DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
        {
            DepthImageFrame frame = e.OpenDepthImageFrame();

            if (frame != null)
            {
                this.FInvalidate = true;
                if (frame.FrameNumber != this.frameindex)
                {
                    this.frameindex = frame.FrameNumber;

                    int cnt = 0;
                    for (int h = 0; h < 240; h++)
                    {
                        for (int w = 0; w < 320; w++)
                        {
                            SkeletonPoint sp = frame.MapToSkeletonPoint(w, h);
                            this.color0[cnt]     = sp.X;
                            this.color0[cnt + 1] = sp.Y;
                            this.color0[cnt + 2] = sp.Z;
                            this.color0[cnt + 3] = 1.0f;
                            cnt += 4;
                        }
                    }

                    frame.Dispose();

                    lock (m_lock)
                    {
                        float[] tmp = this.color0;
                        this.color0 = this.color1;
                        this.color1 = tmp;
                    }
                }
            }
        }
Beispiel #29
0
        private void AllFramesReady(object sender, AllFramesReadyEventArgs allFramesReadyEventArgs)
        {
            ColorImageFrame colorImageFrame = null;
            DepthImageFrame depthImageFrame = null;
            SkeletonFrame   skeletonFrame   = null;

            try
            {
                colorImageFrame = allFramesReadyEventArgs.OpenColorImageFrame();
                depthImageFrame = allFramesReadyEventArgs.OpenDepthImageFrame();
                skeletonFrame   = allFramesReadyEventArgs.OpenSkeletonFrame();

                if (colorImageFrame == null || depthImageFrame == null || skeletonFrame == null)
                {
                    return;
                }

                // Check for changes in any of the data this function is receiving
                // and reset things appropriately.
                if (this.depthImageFormat != depthImageFrame.Format)
                {
                    this.DestroyFaceTracker();
                    this.depthImage       = null;
                    this.depthImageFormat = depthImageFrame.Format;
                }

                if (this.colorImageFormat != colorImageFrame.Format)
                {
                    this.DestroyFaceTracker();
                    this.colorImage               = null;
                    this.colorImageFormat         = colorImageFrame.Format;
                    this.colorImageWritableBitmap = null;
                    this.ColorImage.Source        = null;
                    this.theMaterial.Brush        = null;
                }

                if (this.skeletonData != null && this.skeletonData.Length != skeletonFrame.SkeletonArrayLength)
                {
                    this.skeletonData = null;
                }

                // Create any buffers to store copies of the data we work with
                if (this.depthImage == null)
                {
                    this.depthImage = new short[depthImageFrame.PixelDataLength];
                }

                if (this.colorImage == null)
                {
                    this.colorImage = new byte[colorImageFrame.PixelDataLength];
                }

                if (this.colorImageWritableBitmap == null)
                {
                    this.colorImageWritableBitmap = new WriteableBitmap(
                        colorImageFrame.Width, colorImageFrame.Height, 96, 96, PixelFormats.Bgr32, null);
                    this.ColorImage.Source = this.colorImageWritableBitmap;
                    this.theMaterial.Brush = new ImageBrush(this.colorImageWritableBitmap)
                    {
                        ViewportUnits = BrushMappingMode.Absolute
                    };
                }

                if (this.skeletonData == null)
                {
                    this.skeletonData = new Skeleton[skeletonFrame.SkeletonArrayLength];
                }

                // Copy data received in this event to our buffers.
                colorImageFrame.CopyPixelDataTo(this.colorImage);
                depthImageFrame.CopyPixelDataTo(this.depthImage);
                skeletonFrame.CopySkeletonDataTo(this.skeletonData);
                this.colorImageWritableBitmap.WritePixels(
                    new Int32Rect(0, 0, colorImageFrame.Width, colorImageFrame.Height),
                    this.colorImage,
                    colorImageFrame.Width * Bgr32BytesPerPixel,
                    0);

                // Find a skeleton to track.
                // First see if our old one is good.
                // When a skeleton is in PositionOnly tracking state, don't pick a new one
                // as it may become fully tracked again.
                Skeleton skeletonOfInterest =
                    this.skeletonData.FirstOrDefault(
                        skeleton =>
                        skeleton.TrackingId == this.trackingId &&
                        skeleton.TrackingState != SkeletonTrackingState.NotTracked);

                if (skeletonOfInterest == null)
                {
                    // Old one wasn't around.  Find any skeleton that is being tracked and use it.
                    skeletonOfInterest =
                        this.skeletonData.FirstOrDefault(
                            skeleton => skeleton.TrackingState == SkeletonTrackingState.Tracked);

                    if (skeletonOfInterest != null)
                    {
                        // This may be a different person so reset the tracker which
                        // could have tuned itself to the previous person.
                        if (this.faceTracker != null)
                        {
                            this.faceTracker.ResetTracking();
                        }

                        this.trackingId = skeletonOfInterest.TrackingId;
                    }
                }

                bool displayFaceMesh = false;

                if (skeletonOfInterest != null && skeletonOfInterest.TrackingState == SkeletonTrackingState.Tracked)
                {
                    if (this.faceTracker == null)
                    {
                        try
                        {
                            this.faceTracker = new FaceTracker(this.Kinect);
                        }
                        catch (InvalidOperationException)
                        {
                            // During some shutdown scenarios the FaceTracker
                            // is unable to be instantiated.  Catch that exception
                            // and don't track a face.
                            Debug.WriteLine("AllFramesReady - creating a new FaceTracker threw an InvalidOperationException");
                            this.faceTracker = null;
                        }
                    }

                    if (this.faceTracker != null)
                    {
                        FaceTrackFrame faceTrackFrame = this.faceTracker.Track(
                            this.colorImageFormat,
                            this.colorImage,
                            this.depthImageFormat,
                            this.depthImage,
                            skeletonOfInterest);

                        if (faceTrackFrame.TrackSuccessful)
                        {
                            this.UpdateMesh(faceTrackFrame);

                            // Only display the face mesh if there was a successful track.
                            displayFaceMesh = true;
                        }
                    }
                }
                else
                {
                    this.trackingId = -1;
                }

                this.viewport3d.Visibility = displayFaceMesh ? Visibility.Visible : Visibility.Hidden;
            }
            finally
            {
                if (colorImageFrame != null)
                {
                    colorImageFrame.Dispose();
                }

                if (depthImageFrame != null)
                {
                    depthImageFrame.Dispose();
                }

                if (skeletonFrame != null)
                {
                    skeletonFrame.Dispose();
                }
            }
        }
Beispiel #30
0
        private void OnAllFramesReady(object sender, AllFramesReadyEventArgs allFramesReadyEventArgs)
        {
            ColorImageFrame colorImageFrame = null;
            DepthImageFrame depthImageFrame = null;
            SkeletonFrame   skeletonFrame   = null;

            try
            {
                colorImageFrame = allFramesReadyEventArgs.OpenColorImageFrame();
                depthImageFrame = allFramesReadyEventArgs.OpenDepthImageFrame();
                skeletonFrame   = allFramesReadyEventArgs.OpenSkeletonFrame();

                if (colorImageFrame == null || depthImageFrame == null || skeletonFrame == null)
                {
                    return;
                }

                // Check for image format changes.  The FaceTracker doesn't
                // deal with that so we need to reset.
                if (this.depthImageFormat != depthImageFrame.Format)
                {
                    this.ResetFaceTracking();
                    this.depthImage       = null;
                    this.depthImageFormat = depthImageFrame.Format;
                }

                if (this.colorImageFormat != colorImageFrame.Format)
                {
                    this.ResetFaceTracking();
                    this.colorImage       = null;
                    this.colorImageFormat = colorImageFrame.Format;
                }

                // Create any buffers to store copies of the data we work with
                if (this.depthImage == null)
                {
                    this.depthImage = new short[depthImageFrame.PixelDataLength];
                }

                if (this.colorImage == null)
                {
                    this.colorImage = new byte[colorImageFrame.PixelDataLength];
                }

                // Get the skeleton information
                if (this.skeletonData == null || this.skeletonData.Length != skeletonFrame.SkeletonArrayLength)
                {
                    this.skeletonData = new Skeleton[skeletonFrame.SkeletonArrayLength];
                }

                colorImageFrame.CopyPixelDataTo(this.colorImage);
                depthImageFrame.CopyPixelDataTo(this.depthImage);
                skeletonFrame.CopySkeletonDataTo(this.skeletonData);

                // Update the list of trackers and the trackers with the current frame information
                var i = 0;
                foreach (Skeleton skeleton in this.skeletonData)
                {
                    if (skeleton.TrackingState == SkeletonTrackingState.Tracked ||
                        skeleton.TrackingState == SkeletonTrackingState.PositionOnly)
                    {
                        // We want keep a record of any skeleton, tracked or untracked.
                        if (!this.trackedSkeletons.ContainsKey(skeleton.TrackingId))
                        {
                            this.trackedSkeletons.Add(skeleton.TrackingId, new SkeletonFaceTracker());
                        }

                        var position = skeleton.Position;
                        if (position.X != 0 && position.Y != 0 && position.Z != 0)
                        {
                            Console.WriteLine($"Face {i}: X {position.X}, Y {position.Y}, Z {position.Z}");
                            string text = position.X + "@x " + position.Y + "@y " + position.Z + "@z";
                            System.IO.File.WriteAllText(@"C:\Users\Corbin Pixels\Desktop\kinect\FaceTrackingBasics-WPF\coords.txt", text);
                        }
                        // Give each tracker the upated frame.
                        SkeletonFaceTracker skeletonFaceTracker;
                        if (this.trackedSkeletons.TryGetValue(skeleton.TrackingId, out skeletonFaceTracker))
                        {
                            skeletonFaceTracker.OnFrameReady(this.Kinect, colorImageFormat, colorImage, depthImageFormat, depthImage, skeleton);
                            skeletonFaceTracker.LastTrackedFrame = skeletonFrame.FrameNumber;
                        }
                    }
                    i += 1;
                }

                this.RemoveOldTrackers(skeletonFrame.FrameNumber);

                this.InvalidateVisual();
            }
            finally
            {
                if (colorImageFrame != null)
                {
                    colorImageFrame.Dispose();
                }

                if (depthImageFrame != null)
                {
                    depthImageFrame.Dispose();
                }

                if (skeletonFrame != null)
                {
                    skeletonFrame.Dispose();
                }
            }
        }