Desenvolvendo com Kinect
               Gabriel Schade Cardoso
Quem é Gabriel Schade Cardoso?

                                                                  Gamer




                          Certificações C# e
Bacharel e Mestrando      HTML 5 + Javascript



                         GUI


.NET
Dev - 4 anos           Dev – 1 ano e 2 meses    Futebol freestyler - 6 anos


                                                                              2
Conceitos




            3
Interfaces




Command Line Interface         Graphical User Interface   Natural User Interface
                         GUI




                                                                              4
Interfaces


                       As aplicações que oferecem
                       interfaces NUI, como o próprio
                       termo diz, devem ser naturais aos
                       usuários, oferecendo formas de
                       interação com a aplicação que seja
Command Line Interface independente de conhecimento
                          Graphical User Interface Natural User Interface
                      GUI
                       computacional.



                                                                       5
Microsoft Kinect




                   6
Microsoft Kinect – o herdeiro




Prime Sense          Microsoft Kinect




                                        7
Como o Kinect vê o mundo




                           8
Captura de profundidade
Light Coding;

RGBD;

Reconhecimento do esqueleto.




                                9
O Software
Apesar de utilizar o hardware herdado da
 PrimeSense, o Kinect possui um processamento
 próprio para o reconhecimento de “esqueletos”.

A Microsoft treinou uma rede neural com a
 utilização de diferentes mokaps, para que fosse
 possível reconhecer esqueletos de diferentes
 tamanhos.



                                                   10
SDK




      11
Kinect for Windows SDK
 KinectSensorCollection;

 KinectSensorChooser;

 Streams:
   Audio

   Interaction

   Color

   Depth

   Skeleton
                            12
Kinect Sensor Collection

  Na classe KinectSensor existe uma propriedade estática
   chamada KinectSensors que exibe a coleção de sensores
   conectados ao computador;


  A classe KinectSensor define o modelo virtual do sensor
   Kinect;




                                                             13
Kinect Sensor Chooser

 O KinectSensorChooser é uma classe utilizada como
  seletor do Kinect;


 Automatiza a captura de um sensor ativo, cada sensor
  possui um Id para gerenciamento.




                                                         14
Navegação – (Audio e Interactions)




                                     15
Kinect Audio Source

 Reconhecimento de voz; (necessita do
  SpeechRecognition SDK)
 Reconhecer a direção de uma fonte de áudio;
 Reconhecer o volume de uma entrada de áudio;



                     Microfones




                                                 16
Audio – Reconhecimento de voz

1. Inicializar a Engine de reconhecimento de voz
   do SDK com o idioma que será reconhecido;


2. Construir uma gramática com todos os
   comandos que serão reconhecidos;


3. Inicializar o Audio do Kinect e inserir sua Stream
   na engine de reconhecimento;

                                                   17
Audio- Direção do Áudio
Beam Angle:
   Obtém o ângulo {-50,50} da direção que o sensor está definido
    para ouvir;


   Por padrão o sensor se definirá automaticamente para o local de
    onde o som mais alto está vindo, mas é possível que ele seja
    definido manualmente;

   Há um evento para quando esta propriedade é alterada.




                                                                      18
Audio- Direção do Áudio
AudioSource Angle:
   Obtém o ângulo {-50,50} da direção que o som está vindo;


   Ao contrário do Beam Angle esta propriedade zera quando a
    entrada do áudio acaba;




                                                                19
Kinect Interactions
 Foi lançado dia 18 de março de 2013;

 Provê facilitadores para interações do Kinect através de
  controles que reconhecem determinados gestos;




                                                             20
Detecção da Mão




   Cursor padrão                  Pressionado




                   Pressionando                 Segurando

                                                            21
PHIZ – Physical Interaction Zone




                                   22
Demo – Navegação e Áudio




                           23
Streams




          24
Color Stream

 Fluxo de cores do sensor, possui diversos formatos;




  RGB                 YUV                 Bayer
  32 bits por pixel   16 bits por pixel   32 bits por pixel
  640x480 FPS: 30     640x480 FPS:15      1280x960 FPS:12
  1280x960 FPS:12                         640x480 FPS:30


                                                              25
Color Stream – InfraRed
 Fluxo de infravermelho não é um fluxo de dados a parte e
  sim uma configuração do fluxo de cores;




 IR
 16 bits por pixel
 640x480 FPS: 30
                                                         26
Depth Stream
 Fluxo de profundidade busca a distância em milímetros
  dos elementos no ambiente;




  640x480          320x240           80x60


 FPS: 30
                                                          27
Depth Stream
 Configuração para Default mode e Near mode;

 Reconhece até 6 pessoas.

 Player Segmentation Data

    cada pixel de
     profundidade possui
     um valor de 0 a 6.




                                                28
Demo – Color & Depth Streams




                               29
Skeleton Stream
 Apesar de reconhecer 6 usuários o Kinect rastreia as
  articulações de no máximo 2 usuários.




                                                         30
Skeleton Stream
 De pé ou sentado, mas olhe para o sensor!




                                              31
Skeleton Stream - Joints




                           32
Skeleton Stream




   Pose / Postura   Gestos




                             33
Detecção de Poses




                    34
Detecção de Poses
 Não há nenhuma forma simples nativa para se fazer a
  detecção de poses ou gestos genéricos.

 Qual a grande dificuldade?




                                                        35
Detecção de Poses
 Algoritmos que utilizo em minha própria engine para
  reconhecimento:

1. Cálculo do ângulo entre 3 articulações nos planos
   frontal, lateral e superior através Lei dos Cossenos;

2. Cálculo do ângulo através do Produto Escalar entre
   vetores 3D.




                                                           36
Lei dos cossenos
 Utiliza-se três articulações e suas posições espaciais
 (X, Y e Z) para definir triângulos sobre os planos
 XY, XZ e YZ, estes planos são definidos através de uma
 projeção ortográfica paralela;




                                                          37
Projeção Ortográfica Paralela
  Corta-se um dos eixos (X, Y ou Z) e projeta-se os pontos sobre o
   plano dos outros 2 eixos restantes.




                                                                      38
Lei dos cossenos
 Exemplo de triangulo formado na visão frontal




                                                 39
Produto Escalar
 • Utiliza-se três articulações e suas posições espaciais (X, Y e Z) para
   definir os vetores 3D utilizados para calcular o ângulo.




                                                                            40
Demo – Final




               41
Dicas

  Utilizar o Kinect Studio para Debug;

  Utilizar as DLLs KinectToolkit e KinectToolkitControls;

  Utilizar a DLL KinectToolbox;

  Utilizar as minhas DLLs (por que não? :D);

  Procurar também sobre o Kinect Fusion e Face Tracking;




                                                             42
Muito Obrigado!!
/gabrielschade

/gabrielschade

/gabrielschade

/gabrielschade
/gabrielschade
                    43

Desenvolvendo com Kinect

  • 1.
    Desenvolvendo com Kinect Gabriel Schade Cardoso
  • 2.
    Quem é GabrielSchade Cardoso? Gamer Certificações C# e Bacharel e Mestrando HTML 5 + Javascript GUI .NET Dev - 4 anos Dev – 1 ano e 2 meses Futebol freestyler - 6 anos 2
  • 3.
  • 4.
    Interfaces Command Line Interface Graphical User Interface Natural User Interface GUI 4
  • 5.
    Interfaces As aplicações que oferecem interfaces NUI, como o próprio termo diz, devem ser naturais aos usuários, oferecendo formas de interação com a aplicação que seja Command Line Interface independente de conhecimento Graphical User Interface Natural User Interface GUI computacional. 5
  • 6.
  • 7.
    Microsoft Kinect –o herdeiro Prime Sense Microsoft Kinect 7
  • 8.
    Como o Kinectvê o mundo 8
  • 9.
    Captura de profundidade LightCoding; RGBD; Reconhecimento do esqueleto. 9
  • 10.
    O Software Apesar deutilizar o hardware herdado da PrimeSense, o Kinect possui um processamento próprio para o reconhecimento de “esqueletos”. A Microsoft treinou uma rede neural com a utilização de diferentes mokaps, para que fosse possível reconhecer esqueletos de diferentes tamanhos. 10
  • 11.
    SDK 11
  • 12.
    Kinect for WindowsSDK  KinectSensorCollection;  KinectSensorChooser;  Streams:  Audio  Interaction  Color  Depth  Skeleton 12
  • 13.
    Kinect Sensor Collection  Na classe KinectSensor existe uma propriedade estática chamada KinectSensors que exibe a coleção de sensores conectados ao computador;  A classe KinectSensor define o modelo virtual do sensor Kinect; 13
  • 14.
    Kinect Sensor Chooser O KinectSensorChooser é uma classe utilizada como seletor do Kinect;  Automatiza a captura de um sensor ativo, cada sensor possui um Id para gerenciamento. 14
  • 15.
    Navegação – (Audioe Interactions) 15
  • 16.
    Kinect Audio Source Reconhecimento de voz; (necessita do SpeechRecognition SDK) Reconhecer a direção de uma fonte de áudio; Reconhecer o volume de uma entrada de áudio; Microfones 16
  • 17.
    Audio – Reconhecimentode voz 1. Inicializar a Engine de reconhecimento de voz do SDK com o idioma que será reconhecido; 2. Construir uma gramática com todos os comandos que serão reconhecidos; 3. Inicializar o Audio do Kinect e inserir sua Stream na engine de reconhecimento; 17
  • 18.
    Audio- Direção doÁudio Beam Angle:  Obtém o ângulo {-50,50} da direção que o sensor está definido para ouvir;  Por padrão o sensor se definirá automaticamente para o local de onde o som mais alto está vindo, mas é possível que ele seja definido manualmente;  Há um evento para quando esta propriedade é alterada. 18
  • 19.
    Audio- Direção doÁudio AudioSource Angle:  Obtém o ângulo {-50,50} da direção que o som está vindo;  Ao contrário do Beam Angle esta propriedade zera quando a entrada do áudio acaba; 19
  • 20.
    Kinect Interactions  Foilançado dia 18 de março de 2013;  Provê facilitadores para interações do Kinect através de controles que reconhecem determinados gestos; 20
  • 21.
    Detecção da Mão Cursor padrão Pressionado Pressionando Segurando 21
  • 22.
    PHIZ – PhysicalInteraction Zone 22
  • 23.
  • 24.
  • 25.
    Color Stream  Fluxode cores do sensor, possui diversos formatos; RGB YUV Bayer 32 bits por pixel 16 bits por pixel 32 bits por pixel 640x480 FPS: 30 640x480 FPS:15 1280x960 FPS:12 1280x960 FPS:12 640x480 FPS:30 25
  • 26.
    Color Stream –InfraRed  Fluxo de infravermelho não é um fluxo de dados a parte e sim uma configuração do fluxo de cores; IR 16 bits por pixel 640x480 FPS: 30 26
  • 27.
    Depth Stream  Fluxode profundidade busca a distância em milímetros dos elementos no ambiente; 640x480 320x240 80x60 FPS: 30 27
  • 28.
    Depth Stream  Configuraçãopara Default mode e Near mode;  Reconhece até 6 pessoas.  Player Segmentation Data  cada pixel de profundidade possui um valor de 0 a 6. 28
  • 29.
    Demo – Color& Depth Streams 29
  • 30.
    Skeleton Stream  Apesarde reconhecer 6 usuários o Kinect rastreia as articulações de no máximo 2 usuários. 30
  • 31.
    Skeleton Stream  Depé ou sentado, mas olhe para o sensor! 31
  • 32.
  • 33.
    Skeleton Stream Pose / Postura Gestos 33
  • 34.
  • 35.
    Detecção de Poses Não há nenhuma forma simples nativa para se fazer a detecção de poses ou gestos genéricos.  Qual a grande dificuldade? 35
  • 36.
    Detecção de Poses Algoritmos que utilizo em minha própria engine para reconhecimento: 1. Cálculo do ângulo entre 3 articulações nos planos frontal, lateral e superior através Lei dos Cossenos; 2. Cálculo do ângulo através do Produto Escalar entre vetores 3D. 36
  • 37.
    Lei dos cossenos Utiliza-se três articulações e suas posições espaciais (X, Y e Z) para definir triângulos sobre os planos XY, XZ e YZ, estes planos são definidos através de uma projeção ortográfica paralela; 37
  • 38.
    Projeção Ortográfica Paralela  Corta-se um dos eixos (X, Y ou Z) e projeta-se os pontos sobre o plano dos outros 2 eixos restantes. 38
  • 39.
    Lei dos cossenos Exemplo de triangulo formado na visão frontal 39
  • 40.
    Produto Escalar •Utiliza-se três articulações e suas posições espaciais (X, Y e Z) para definir os vetores 3D utilizados para calcular o ângulo. 40
  • 41.
  • 42.
    Dicas  Utilizaro Kinect Studio para Debug;  Utilizar as DLLs KinectToolkit e KinectToolkitControls;  Utilizar a DLL KinectToolbox;  Utilizar as minhas DLLs (por que não? :D);  Procurar também sobre o Kinect Fusion e Face Tracking; 42
  • 43.

Notas do Editor

  • #5 Falar que elas podem coexistir na mesma aplicação.
  • #6 Falar que elas podem coexistir na mesma aplicação.Falar sobre o Kinect e a NUI
  • #9 Falar do nearmode somente no Kinect for Windows
  • #10 Light Coding – Prime Sense capturar a profundidade dos elementosRGBD – Pseudo 3DReconhecimento de esqueleto feito através do software da microsoft
  • #17 Falar sobre o cancelamento do eco
  • #23 Forma comum < (errada)Forma do interactions > (correta)
  • #33 Falar sobre os eixos X, Y e ZFalar sobre os bones
  • #34 Explicar a diferença
  • #36 Comentar sobre validações contra o próprio esqueleto