Kinect does not display a color image

So I added the coding4fun and microsoft sources and even did what is in the kinect sdk to display the kinect image frame on the screen, but for some reason it doesn't show, I am working on sdk, although the
code I wrote

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Microsoft.Research.Kinect.Nui;
using Coding4Fun.Kinect.Wpf;
using System.Net.Mail;
using System.IO;
using System.ComponentModel;

namespace WpfApplication1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    Runtime nui;

    int PersonDetected = 0;
    int totalFrames = 0;
    int lastFrames = 0;
    DateTime lastTime = DateTime.MaxValue;

    Dictionary<JointID, Brush> jointColors = new Dictionary<JointID, Brush>() { 
        {JointID.HipCenter, new SolidColorBrush(Color.FromRgb(169, 176, 155))},
        {JointID.Spine, new SolidColorBrush(Color.FromRgb(169, 176, 155))},
        {JointID.ShoulderCenter, new SolidColorBrush(Color.FromRgb(168, 230, 29))},
        {JointID.Head, new SolidColorBrush(Color.FromRgb(200, 0,   0))},
        {JointID.ShoulderLeft, new SolidColorBrush(Color.FromRgb(79,  84,  33))},
        {JointID.ElbowLeft, new SolidColorBrush(Color.FromRgb(84,  33,  42))},
        {JointID.WristLeft, new SolidColorBrush(Color.FromRgb(255, 126, 0))},
        {JointID.HandLeft, new SolidColorBrush(Color.FromRgb(215,  86, 0))},
        {JointID.ShoulderRight, new SolidColorBrush(Color.FromRgb(33,  79,  84))},
        {JointID.ElbowRight, new SolidColorBrush(Color.FromRgb(33,  33,  84))},
        {JointID.WristRight, new SolidColorBrush(Color.FromRgb(77,  109, 243))},
        {JointID.HandRight, new SolidColorBrush(Color.FromRgb(37,   69, 243))},
        {JointID.HipLeft, new SolidColorBrush(Color.FromRgb(77,  109, 243))},
        {JointID.KneeLeft, new SolidColorBrush(Color.FromRgb(69,  33,  84))},
        {JointID.AnkleLeft, new SolidColorBrush(Color.FromRgb(229, 170, 122))},
        {JointID.FootLeft, new SolidColorBrush(Color.FromRgb(255, 126, 0))},
        {JointID.HipRight, new SolidColorBrush(Color.FromRgb(181, 165, 213))},
        {JointID.KneeRight, new SolidColorBrush(Color.FromRgb(71, 222,  76))},
        {JointID.AnkleRight, new SolidColorBrush(Color.FromRgb(245, 228, 156))},
        {JointID.FootRight, new SolidColorBrush(Color.FromRgb(77,  109, 243))}
    };

   private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        if (Runtime.Kinects.Count == 0)
        {
            MessageBox.Show("No Kinect Detected");
        }

        else
        {
            nui = Runtime.Kinects[0];

            nui.Initialize(RuntimeOptions.UseColor | RuntimeOptions.UseSkeletalTracking);

            lastTime = DateTime.Now;

            nui.VideoFrameReady += new EventHandler<ImageFrameReadyEventArgs>(nui_VideoFrameReady);
            nui.SkeletonFrameReady += new EventHandler<SkeletonFrameReadyEventArgs>(nui_SkeletonFrameReady);
            //nui.DepthFrameReady += new EventHandler<ImageFrameReadyEventArgs>(nui_DepthFrameReady);

            nui.VideoStream.Open(ImageStreamType.Video, 2, ImageResolution.Resolution640x480, ImageType.Color);
            //nui.DepthStream.Open(ImageStreamType.Depth, 2, ImageResolution.Resolution640x480, ImageType.DepthAndPlayerIndex);
        }
    }
    void nui_VideoFrameReady(object sender, ImageFrameReadyEventArgs e)
    {
        //KinectImage.Source = e.ImageFrame.ToBitmapSource();
        PlanarImage Image = e.ImageFrame.Image;
        ++totalFrames;

        {
            string bb1 = Convert.ToString(DateTime.Now);
            string filename = "C:\\Kinected\\Kinect1_Image " + bb1 + ".jpg";

            KinectImage.Source = BitmapSource.Create(
                Image.Width, Image.Height, 96, 96, PixelFormats.Bgr32, null, Image.Bits, Image.Width * Image.BytesPerPixel);

            BitmapSource image = BitmapSource.Create(
                Image.Width, Image.Height, 96, 96, PixelFormats.Bgr32, null, Image.Bits, Image.Width * Image.BytesPerPixel);

            if (PersonDetected == 1)
            {
                image.Save(filename, Coding4Fun.Kinect.Wpf.ImageFormat.Jpeg);
                SendNotificationEmail();
                PersonDetected = 0;
            }
        }
    }

      

Skeleton example code

 using System;
 using System.Net.Mail;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Windows;
 using System.Windows.Controls;
 using System.Windows.Data;
 using System.Windows.Documents;
 using System.Windows.Input;
 using System.Windows.Media;
 using System.Windows.Media.Imaging;
 using System.Windows.Navigation;
 using System.Windows.Shapes;
 using Microsoft.Research.Kinect.Nui;
 using Coding4Fun.Kinect.WinForm;
 using Coding4Fun.Kinect.Wpf;
 using System.IO;
 using System.ComponentModel;


 namespace SkeletalViewer
{
 /// <summary>
 /// Interaction logic for MainWindow.xaml
 /// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    Runtime nui;
   // public int ElevationAngle { get; set; }
     //   public static readonly int ElevationMaximum;
       // public static readonly int ElevationMinimum;
        //public static readonly int ElevationMedian;
        //int ElevationMedian = ElevationAngle == 0;
    int totalFrames = 0;
    int totalFrames2 = 0;
    int lastFrames = 0;
    int PersonDetected = 0;
    DateTime lastTime = DateTime.MaxValue;

    // We want to control how depth data gets converted into false-color data
    // for more intuitive visualization, so we keep 32-bit color frame buffer versions of
    // these, to be updited whenever we receive and process a 16-bit frame.
    const int RED_IDX = 2;
    const int GREEN_IDX = 1;
    const int BLUE_IDX = 0;
    byte[] depthFrame32 = new byte[320 * 240 * 4];



    Dictionary<JointID,Brush> jointColors = new Dictionary<JointID,Brush>() { 
        {JointID.HipCenter, new SolidColorBrush(Color.FromRgb(169, 176, 155))},
        {JointID.Spine, new SolidColorBrush(Color.FromRgb(169, 176, 155))},
        {JointID.ShoulderCenter, new SolidColorBrush(Color.FromRgb(168, 230, 29))},
        {JointID.Head, new SolidColorBrush(Color.FromRgb(200, 0,   0))},
        {JointID.ShoulderLeft, new SolidColorBrush(Color.FromRgb(79,  84,  33))},
        {JointID.ElbowLeft, new SolidColorBrush(Color.FromRgb(84,  33,  42))},
        {JointID.WristLeft, new SolidColorBrush(Color.FromRgb(255, 126, 0))},
        {JointID.HandLeft, new SolidColorBrush(Color.FromRgb(215,  86, 0))},
        {JointID.ShoulderRight, new SolidColorBrush(Color.FromRgb(33,  79,  84))},
        {JointID.ElbowRight, new SolidColorBrush(Color.FromRgb(33,  33,  84))},
        {JointID.WristRight, new SolidColorBrush(Color.FromRgb(77,  109, 243))},
        {JointID.HandRight, new SolidColorBrush(Color.FromRgb(37,   69, 243))},
        {JointID.HipLeft, new SolidColorBrush(Color.FromRgb(77,  109, 243))},
        {JointID.KneeLeft, new SolidColorBrush(Color.FromRgb(69,  33,  84))},
        {JointID.AnkleLeft, new SolidColorBrush(Color.FromRgb(229, 170, 122))},
        {JointID.FootLeft, new SolidColorBrush(Color.FromRgb(255, 126, 0))},
        {JointID.HipRight, new SolidColorBrush(Color.FromRgb(181, 165, 213))},
        {JointID.KneeRight, new SolidColorBrush(Color.FromRgb(71, 222,  76))},
        {JointID.AnkleRight, new SolidColorBrush(Color.FromRgb(245, 228, 156))},
        {JointID.FootRight, new SolidColorBrush(Color.FromRgb(77,  109, 243))}
    };



    private void Window_Loaded(object sender, EventArgs e)
    {
        nui = new Runtime();

        try
        {
            nui.Initialize(RuntimeOptions.UseDepthAndPlayerIndex | RuntimeOptions.UseSkeletalTracking | RuntimeOptions.UseColor);
        }
        catch (InvalidOperationException)
        {
            System.Windows.MessageBox.Show("Runtime initialization failed. Please make sure Kinect device is plugged in.");
            return;
        }


        try
        {
            nui.VideoStream.Open(ImageStreamType.Video, 2, ImageResolution.Resolution640x480, ImageType.Color);
            nui.DepthStream.Open(ImageStreamType.Depth, 2, ImageResolution.Resolution320x240, ImageType.DepthAndPlayerIndex);
        }
        catch (InvalidOperationException)
        {
            System.Windows.MessageBox.Show("Failed to open stream. Please make sure to specify a supported image type and resolution.");
            return;
        }

        if (Runtime.Kinects.Count < 2)
        {

            lastTime = DateTime.Now;

            nui.DepthFrameReady += new EventHandler<ImageFrameReadyEventArgs>(nui_DepthFrameReady);
            nui.SkeletonFrameReady += new EventHandler<SkeletonFrameReadyEventArgs>(nui_SkeletonFrameReady);
            nui.VideoFrameReady += new EventHandler<ImageFrameReadyEventArgs>(nui_ColorFrameReady2);
        }

        if (Runtime.Kinects.Count == 2)
        {
            lastTime = DateTime.Now;

            nui.DepthFrameReady += new EventHandler<ImageFrameReadyEventArgs>(nui_DepthFrameReady);
            nui.SkeletonFrameReady += new EventHandler<SkeletonFrameReadyEventArgs>(nui_SkeletonFrameReady);
            nui.VideoFrameReady += new EventHandler<ImageFrameReadyEventArgs>(nui_ColorFrameReady2);
            nui.VideoFrameReady += new EventHandler<ImageFrameReadyEventArgs>(nui_ColorFrameReady3);
        }
    }

    // Converts a 16-bit grayscale depth frame which includes player indexes into a 32-bit frame
    // that displays different players in different colors
    byte[] convertDepthFrame(byte[] depthFrame16)
    {
        for (int i16 = 0, i32 = 0; i16 < depthFrame16.Length && i32 < depthFrame32.Length; i16 += 2, i32 += 4)
        {
           // 
           // System.Windows.MessageBox.Show(depthFrame16);
            int player = depthFrame16[i16] & 0x07;
            int realDepth = (depthFrame16[i16+1] << 5) | (depthFrame16[i16] >> 3);
            // transform 13-bit depth information into an 8-bit intensity appropriate
            // for display (we disregard information in most significant bit)
            byte intensity = (byte)(255 - (255 * realDepth / 0x0fff));

            depthFrame32[i32 + RED_IDX] = 0;
            depthFrame32[i32 + GREEN_IDX] = 0;
            depthFrame32[i32 + BLUE_IDX] = 0;

            // choose different display colors based on player
            switch (player)
            {
                case 0:
                    depthFrame32[i32 + RED_IDX] = (byte)(intensity / 2);
                    depthFrame32[i32 + GREEN_IDX] = (byte)(intensity / 2);
                    depthFrame32[i32 + BLUE_IDX] = (byte)(intensity / 2);
                    break;
                case 1:
                    depthFrame32[i32 + RED_IDX] = intensity;
                    break;
                case 2:
                    depthFrame32[i32 + GREEN_IDX] = intensity;
                    break;
                case 3:
                    depthFrame32[i32 + RED_IDX] = (byte)(intensity / 4);
                    depthFrame32[i32 + GREEN_IDX] = (byte)(intensity);
                    depthFrame32[i32 + BLUE_IDX] = (byte)(intensity);
                    break;
                case 4:
                    depthFrame32[i32 + RED_IDX] = (byte)(intensity);
                    depthFrame32[i32 + GREEN_IDX] = (byte)(intensity);
                    depthFrame32[i32 + BLUE_IDX] = (byte)(intensity / 4);
                    break;
                case 5:
                    depthFrame32[i32 + RED_IDX] = (byte)(intensity);
                    depthFrame32[i32 + GREEN_IDX] = (byte)(intensity / 4);
                    depthFrame32[i32 + BLUE_IDX] = (byte)(intensity);
                    break;
                case 6:
                    depthFrame32[i32 + RED_IDX] = (byte)(intensity / 2);
                    depthFrame32[i32 + GREEN_IDX] = (byte)(intensity / 2);
                    depthFrame32[i32 + BLUE_IDX] = (byte)(intensity);
                    break;
                case 7:
                    depthFrame32[i32 + RED_IDX] = (byte)(255 - intensity);
                    depthFrame32[i32 + GREEN_IDX] = (byte)(255 - intensity);
                    depthFrame32[i32 + BLUE_IDX] = (byte)(255 - intensity);
                    break;
            }
           // file_dist.Close();
        }

       // Console.WriteLine(depthFrame32);

        return depthFrame32;
    }

    void nui_ColorFrameReady(object sender, ImageFrameReadyEventArgs e)
    {
        // 32-bit per pixel, RGBA image
        PlanarImage Image = e.ImageFrame.Image;
        ++totalFrames;
        string bb1 = Convert.ToString(totalFrames);
        // string file_name_3 = "C:\\Research\\Kinect\\Proposal\\Depth_Img" + bb1 + ".jpg"; xxx
        string file_name_4 = "C:\\temp\\Video_Img" + bb1 + ".jpg";
        video.Source = BitmapSource.Create(
            Image.Width, Image.Height, 96, 96, PixelFormats.Bgr32, null, Image.Bits, Image.Width * Image.BytesPerPixel);

                BitmapSource image4 = BitmapSource.Create(
                    Image.Width, Image.Height, 96, 96, PixelFormats.Bgr32, null, Image.Bits, Image.Width * Image.BytesPerPixel);
          //      image4.Save(file_name_4, Coding4Fun.Kinect.Wpf.ImageFormat.Jpeg);

    }

    void nui_ColorFrameReady2(object sender, ImageFrameReadyEventArgs e)
    {
        // 32-bit per pixel, RGBA image  xxx
        PlanarImage Image = e.ImageFrame.Image;
        //int deltaFrames = totalFrames - lastFrameWithMotion;
        //if (totalFrames2 <= stopFrameNumber & deltaFrames > 300)
        {
           ++totalFrames2;
            string bb1 = Convert.ToString(totalFrames2);
            // string file_name_3 = "C:\\Research\\Kinect\\Proposal\\Depth_Img" + bb1 + ".jpg"; xxx
            string file_name_4 = "C:\\Kinected\\Kinect1_Img" + bb1 + ".jpg";
            video.Source = BitmapSource.Create(
                Image.Width, Image.Height, 96, 96, PixelFormats.Bgr32, null, Image.Bits, Image.Width * Image.BytesPerPixel);

            BitmapSource image4 = BitmapSource.Create(
                Image.Width, Image.Height, 96, 96, PixelFormats.Bgr32, null, Image.Bits, Image.Width * Image.BytesPerPixel);

            if (PersonDetected == 1)
            {
                if (totalFrames2 % 10 == 0)
                {
                    image4.Save(file_name_4, Coding4Fun.Kinect.Wpf.ImageFormat.Jpeg);
                    SendNotificationEmail();
                    PersonDetected = 0;
                    // lastFrameWithMotion = totalFrames;
                    // topFrameNumber += 100;
                }
            }
        }

    }

      

Any ideas as to why it is not displaying the image in my application?

+3


source to share


1 answer


Do what benjgorman said, if you are using xbox kinect it will still work with new sdk. You can get it here . The code is slightly different from older programs, but you get used to it pretty quickly. You can get the tutorials I used here , or use the provided code, make sure you add sources Microsoft.Kinect

and add the project from kinect explorer (you download it via sdk) Microsoft.Samples.Kinect.WpfViewers

and then add that as source. I would recommend looking at the tutorials as they explain the classes and what you need in the SDK
code

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Microsoft.Kinect;
using System.Net.Mail;
using Coding4Fun.Kinect.Wpf;
using Microsoft.Samples.Kinect.WpfViewers;
using System.Diagnostics;

namespace WpfApplication1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }
 private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        kinectSensorChooser1.KinectSensorChanged += new DependencyPropertyChangedEventHandler(kinectSensorChooser1_KinectSensorChanged);
    }

    void kinectSensorChooser1_KinectSensorChanged(object sender, DependencyPropertyChangedEventArgs e)
    {
        KinectSensor oldSensor = (KinectSensor)e.OldValue;
        StopKinect(oldSensor);

        KinectSensor newSensor = (KinectSensor)e.NewValue;

        newSensor.ColorStream.Enable();
        newSensor.DepthStream.Enable();
        newSensor.SkeletonStream.Enable();
        newSensor.AllFramesReady += new EventHandler<AllFramesReadyEventArgs>(newSensor_AllFramesReady);
        try
        {
            newSensor.Start();
        }
        catch (System.IO.IOException)
        {
            kinectSensorChooser1.AppConflictOccurred();
        }
    }

    void StopKinect(KinectSensor sensor)
    {
        if (sensor != null)
        {
            sensor.Stop();
            sensor.AudioSource.Stop();
        }
    }

    private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
        StopKinect(kinectSensorChooser1.Kinect);
    }
    void newSensor_AllFramesReady(object sender, AllFramesReadyEventArgs e)
    {
        using (ColorImageFrame colorFrame = e.OpenColorImageFrame())
        {
            if (colorFrame == null)
            {
                return;
            }

            byte[] pixels = new byte[colorFrame.PixelDataLength];
            colorFrame.CopyPixelDataTo(pixels);

            int stride = colorFrame.Width * 4;
            video.Source = BitmapSource.Create(
                colorFrame.Width, colorFrame.Height, 96, 96, 
                PixelFormats.Bgr32, null, pixels, stride);
         }
       }

      



Hope it helps.

+2


source







All Articles