Kinect: muito além do Xbox
    Descobrindo o SDK do Kinect como plataforma de
       desenvolvimento de aplicativos para windows
                              André Paulovich
André Paulovich
paulovich@100loop.com
@andrepaulovich



               www.raptors.com.br   www.100loop.com
NUI – Natural User Interface




NUI é um sistema que facilita a interação
Homem-Maquina criando uma interface
intuitiva e “natural” para o usuário.
Visão Geral
           Emissor do
         InfraVermelho       Câmera RGB         Sensor do
                                              InfraVermelho
                                                                 Tilt Motor




                           Microfones

   Câmera RGB                               Rastreio de Esqueleto (Skeletal Tracking)
   Câmera de Profundidade (Depth)           Microfone
Kinect SDK - Nível de dificuldade


Existe realmente uma quebra de paradigmas envolvida quando começamos a
trabalhar com o SDK, pois temos que lidar com operações bastante específicas
que boa parte dos desenvolvedores não esta acostumada a trabalhar.

Um detalhe importante é que o Kinect não retorna imagens montadas (como
muitos supõem), ele retorna apenas bytes, que devem ser convertidos ou
interpretados pelo aplicativo.
Kinect SDK - Nível de dificuldade




   O que você imagina quando vê os primeiros códigos.
Kinect SDK - Nível de dificuldade

Como é de verdade:

                     A API do NUI detecta tudo automático.

                     A única coisa que você tem que
                     preocupar são com as conversões
                     de valores.
O que iremos usar?



Kinect SDK v1.0
http://kinectforwindows.org




Coding4Fun Toolkit
http://channel9.msdn.com/coding4fun/kinect
Procedimento

Pegar o Kinect ativo no sistema.
KinectSensor

Ativar os recursos do Kinect que você vai usar:
KinectSensor.SkeletonStream.Open()
KinectSensor.DepthStream.Open()

Adicionar evento para tratar os sensores:
KinectSensor.AllFrameReady += ...

E finalmente dar um Start no Kinect.
KinectSensor.Start();
Eventos


Quando cada imagem é detectada ele invoca um evento:

DepthFrameReady;
ColorFrameReady;
SkeletonFrameReady;
AllFrameReady;
AllFrameReady sempre que todos os frames são detectados, sempre no
tempo do mais lento.
Tilt – DEMO


   Pegar o sensor ativo.

   Controlar do motor alterando a propriedade ElevationAngle.
Tilt



É importante ressaltar que o ângulo mostrado, é   relativo a gravidade
e não é fixo a base, isso quer dizer que se o Kinect tiver preso na
parede a posição 1 será diferente do 1 dele em cima da mesa.
Sério, não fique usando muito
o motor, ele não é um robô!
Skeletal Tracking



                    Detecta até 6 pessoas

                    Destes, apenas 2 são inteiramente
                    Compreendidos (20 articulações)

                    Valores das posições de cada articulação
                    está em metros.

                    Os outros 4 são parcialmente
                    compreendidos (somente a localização)
Skeletal Tracking - Demo


Cada esqueleto possui um TrackingID.

Articulações:
Cada articulação conta com X, Y e Z e um estado:

Tracked, Not Tracked, Inferred
Sendo Inferred quando o Kinect não consegue achar a articulação e
presume sua posição baseado nas outras.
Sensor de Profundidade (Depth) - Demo


Captura a distância e o jogador de cada ponto.

Distância entre o ponto e Kinect em milímetros.

De 1 a 6 jogadores.




                                                  “Eu vim em paz”
Trabalhando o Audio - Demo

O Kinect é composto por vários microfones,
aumentando assim a confiabilidade da detecção de voz.

Ativar o AudioStream:
AudioStream.Start()

Criar variável para reconhecimento de voz:
SpeechRecognitionEngine

Adicionar as palavras que vão ser “entendidas”:
var words = new Choices();
words.Add("green");
words.Add("blue");

Adicionar o evento:
sre.SpeechRecognized += this.SreSpeechRecognized;
Posição e confiabilidade do som


O Kinect retorna a confiabilidade de uma sentença:
e.Result.Confidence de 0 a 1.

Posição:

É possível pegar o ângulo da o onde o som vem.
O resultado é gerado automaticamente dentro do AudioSensor.

KinectSensor.AudioSensor.SoundSourceAngle
KinectSensor.AudioSensor.SoundSourceAngleConfidence
Conclusão


Os sensores de movimentos vieram para ficar.

E o Kinect abre uma gama de possibilidades, que os desenvolvedores não tinham
antes. Sua utilização vai muito além dos games.
Perguntas?!
Procurando um desafiante?




               andrepaulovich
Obrigado!

Kinect: Muito além do XBOX - SEMCOMP 2012

  • 1.
    Kinect: muito alémdo Xbox Descobrindo o SDK do Kinect como plataforma de desenvolvimento de aplicativos para windows André Paulovich
  • 2.
  • 3.
    NUI – NaturalUser Interface NUI é um sistema que facilita a interação Homem-Maquina criando uma interface intuitiva e “natural” para o usuário.
  • 4.
    Visão Geral Emissor do InfraVermelho Câmera RGB Sensor do InfraVermelho Tilt Motor Microfones  Câmera RGB  Rastreio de Esqueleto (Skeletal Tracking)  Câmera de Profundidade (Depth)  Microfone
  • 5.
    Kinect SDK -Nível de dificuldade Existe realmente uma quebra de paradigmas envolvida quando começamos a trabalhar com o SDK, pois temos que lidar com operações bastante específicas que boa parte dos desenvolvedores não esta acostumada a trabalhar. Um detalhe importante é que o Kinect não retorna imagens montadas (como muitos supõem), ele retorna apenas bytes, que devem ser convertidos ou interpretados pelo aplicativo.
  • 6.
    Kinect SDK -Nível de dificuldade O que você imagina quando vê os primeiros códigos.
  • 7.
    Kinect SDK -Nível de dificuldade Como é de verdade: A API do NUI detecta tudo automático. A única coisa que você tem que preocupar são com as conversões de valores.
  • 8.
    O que iremosusar? Kinect SDK v1.0 http://kinectforwindows.org Coding4Fun Toolkit http://channel9.msdn.com/coding4fun/kinect
  • 9.
    Procedimento Pegar o Kinectativo no sistema. KinectSensor Ativar os recursos do Kinect que você vai usar: KinectSensor.SkeletonStream.Open() KinectSensor.DepthStream.Open() Adicionar evento para tratar os sensores: KinectSensor.AllFrameReady += ... E finalmente dar um Start no Kinect. KinectSensor.Start();
  • 10.
    Eventos Quando cada imagemé detectada ele invoca um evento: DepthFrameReady; ColorFrameReady; SkeletonFrameReady; AllFrameReady; AllFrameReady sempre que todos os frames são detectados, sempre no tempo do mais lento.
  • 11.
    Tilt – DEMO Pegar o sensor ativo. Controlar do motor alterando a propriedade ElevationAngle.
  • 12.
    Tilt É importante ressaltarque o ângulo mostrado, é relativo a gravidade e não é fixo a base, isso quer dizer que se o Kinect tiver preso na parede a posição 1 será diferente do 1 dele em cima da mesa.
  • 13.
    Sério, não fiqueusando muito o motor, ele não é um robô!
  • 14.
    Skeletal Tracking Detecta até 6 pessoas Destes, apenas 2 são inteiramente Compreendidos (20 articulações) Valores das posições de cada articulação está em metros. Os outros 4 são parcialmente compreendidos (somente a localização)
  • 15.
    Skeletal Tracking -Demo Cada esqueleto possui um TrackingID. Articulações: Cada articulação conta com X, Y e Z e um estado: Tracked, Not Tracked, Inferred Sendo Inferred quando o Kinect não consegue achar a articulação e presume sua posição baseado nas outras.
  • 16.
    Sensor de Profundidade(Depth) - Demo Captura a distância e o jogador de cada ponto. Distância entre o ponto e Kinect em milímetros. De 1 a 6 jogadores. “Eu vim em paz”
  • 17.
    Trabalhando o Audio- Demo O Kinect é composto por vários microfones, aumentando assim a confiabilidade da detecção de voz. Ativar o AudioStream: AudioStream.Start() Criar variável para reconhecimento de voz: SpeechRecognitionEngine Adicionar as palavras que vão ser “entendidas”: var words = new Choices(); words.Add("green"); words.Add("blue"); Adicionar o evento: sre.SpeechRecognized += this.SreSpeechRecognized;
  • 18.
    Posição e confiabilidadedo som O Kinect retorna a confiabilidade de uma sentença: e.Result.Confidence de 0 a 1. Posição: É possível pegar o ângulo da o onde o som vem. O resultado é gerado automaticamente dentro do AudioSensor. KinectSensor.AudioSensor.SoundSourceAngle KinectSensor.AudioSensor.SoundSourceAngleConfidence
  • 19.
    Conclusão Os sensores demovimentos vieram para ficar. E o Kinect abre uma gama de possibilidades, que os desenvolvedores não tinham antes. Sua utilização vai muito além dos games.
  • 20.
  • 21.
  • 22.

Notas do Editor

  • #3 Esta é outra opção para um slide de Visão Geral.