none
Desenvolvimento de eventos utilizando Kinect for windows RRS feed

  • Discussão Geral

  • Olá amigos,

    Estou desenvolvendo duas aplicações que vão compartilhar SkeletonFrameReady event.

    Porem não estou conseguindo criar o código que vai receber o evento.

    O primeiro programa é o principal que faz a conexão com o kinect o segundo é para conectar ao eventos. e não funciona!

    namespace User_tracking
    {
        class Program
        {
            static void Main(string[] args)
            {
                Kinect k = new Kinect();
                k.StartKinectST();
                while (true)
                {
                }
    
            }
    
    
    
        }
        class Kinect
        {
            private KinectSensor kinect = null;
            private Skeleton[] skeletonData;
            private int count = 0;
            public void StartKinectST()
            {
                kinect = KinectSensor.KinectSensors.FirstOrDefault(s => s.Status == KinectStatus.Connected); // Get first Kinect Sensor
                if (kinect != null)
                {
                    
                    Console.WriteLine(kinect.DeviceConnectionId);
                    kinect.SkeletonStream.Enable(); // Enable skeletal tracking
    
                    skeletonData = new Skeleton[kinect.SkeletonStream.FrameSkeletonArrayLength]; // Allocate ST data
    
                    kinect.SkeletonFrameReady += new EventHandler<SkeletonFrameReadyEventArgs>(Kinect_SkeletonFrameReady);
                    //kinect.SkeletonFrameReady += this.kinect_SkeletonFrameReady;
    
    
                    Debug.WriteLine("skeleton enable");
                }
                
                try
                {
                    kinect.Start();
                }
                catch (IOException)
                {
                    kinect = null;
                }
                if (null == kinect)
                {
                    Console.WriteLine("Kinect failed to start...");
                }
                else
                {
                    Console.WriteLine("Kinect started...");
    
                }
                Console.WriteLine(kinect.IsRunning);
            }
            
            public void Kinect_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
            {
                //Debug.WriteLine("In kinect skeleton event handler");
    
    
                using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame()) // Open the Skeleton frame
                {
                    if (skeletonFrame != null && this.skeletonData != null) // check that a frame is available
                    {
                        skeletonFrame.CopySkeletonDataTo(this.skeletonData); // get the skeletal information in this frame
                    }
                }
                // Debug.WriteLine(this.skeletonData.Length);
    
                foreach (Skeleton skel in this.skeletonData)
                {
                    if (skel.TrackingState == SkeletonTrackingState.Tracked)
                    {
                        count++;
                 
                       if (count > 50)
                        {
                            Console.WriteLine("id: " + skel.TrackingId + "shoulder L      X:" + skel.Joints[JointType.ShoulderLeft].Position.X + "
     Y: " + skel.Joints[JointType.ShoulderLeft].Position.Y + " Z: " + skel.Joints[JointType.ShoulderLeft].Position.Z);
                            Console.WriteLine("id: " + skel.TrackingId + "shoulder C      X:" + skel.Joints[JointType.ShoulderCenter].Position.X + "
     Y: " + skel.Joints[JointType.ShoulderCenter].Position.Y + " Z: " + skel.Joints[JointType.ShoulderCenter].Position.Z);
                            Console.WriteLine("id: " + skel.TrackingId + "shoulder R      X:" + skel.Joints[JointType.ShoulderRight].Position.X + "
     Y: " + skel.Joints[JointType.ShoulderRight].Position.Y + " Z: " + skel.Joints[JointType.ShoulderRight].Position.Z);
                            //Console.WriteLine("id: " + skel.TrackingId + " X: " + skel.Position.X + " Y: " + skel.Position.Y + " Z: " +
     skel.Position.Z);
                            count = 0;
                        }
                    }
    
                }
            }
        }
    }
    

    Outro programa esta apenas referenciando a função para o evento da classe.

    class Kinect
        {
            private KinectSensor kinect = null;
            private Skeleton[] skeletonData;
            private int count = 0;
            public void StartKinectST()
            {
                kinect = KinectSensor.KinectSensors.FirstOrDefault(s => s.Status == KinectStatus.Connected); // Get first Kinect Sensor
                
                if (kinect != null)
                {
                    
                    Console.WriteLine(kinect.IsRunning);
                    kinect.SkeletonFrameReady += this.Kinect_SkeletonFrameReady;
                }
                else
                {
                    Console.WriteLine("Not Conected\n");
                }
            }
    
            public void Kinect_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
            {
                Console.WriteLine("teste\n");
            }
        }
    }
    


    • Editado Marcos SJ segunda-feira, 4 de abril de 2016 14:58 Edição
    • Tipo Alterado Marcos SJ terça-feira, 5 de abril de 2016 11:50 How to
    segunda-feira, 4 de abril de 2016 00:30

Todas as Respostas

  • Boa tarde Rafael S Mattos,

    Tudo bem?

    Poderia informar o erro que o código está gerando?

    Atenciosamente


    Marcos SJ

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 4 de abril de 2016 14:59
  • Marcos obrigado pela atenção!

    Erro de sintaxe não tem. O que esta ocorrendo é que preciso que esses dois código trabalhem junto através de eventos. O primeiro código faz a conexão com o kinect e o segundo apenas atribui o eventos dentro da classes e aguarda o disparo do eventos. 

    Assim como postei não esta funcionando. 

    O primeiro código esta conectado com kinect e respondendo ao eventos atribuído dentro dele e o segundo código não consegue atribuir a referencia do evento.

    Sou iniciando meus desenvolvimento com evento pode ser que estou errando em conceito também.

    Rafael Mattos

    segunda-feira, 4 de abril de 2016 20:34
  • Bom dia Rafael S Mattos,

    Tudo bem?

    Entendi. Bem, como o fórum não presta suporte a "How to", eu vou modificar sua thread para discussão geral para que ao menos continue disponível no fórum caso algum usuário esteja disposto a analisar seu código e te auxiliar no desenvolvimento.

    Atenciosamente


    Marcos SJ

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    terça-feira, 5 de abril de 2016 11:52