43
Gabriel Schade Cardoso senvolvendo com Kinect

Desenvolvendo com Kinect

Embed Size (px)

DESCRIPTION

Minha apresentação sobre o desenvolvimento utilizando o Kinect

Citation preview

Page 1: Desenvolvendo com Kinect

Gabriel Schade CardosoDesenvolvendo com Kinect

Page 2: Desenvolvendo com Kinect

2

Quem é Gabriel Schade Cardoso?

GUI

Dev - 4 anos Futebol freestyler - 6 anos

Dev – 1 ano e 2 meses

.NET

Bacharel e Mestrando

Gamer

Certificações C# e HTML 5 + Javascript

Page 3: Desenvolvendo com Kinect

3

Conceitos

Page 4: Desenvolvendo com Kinect

4

Interfaces

GUICommand Line Interface

Natural User Interface

Graphical User Interface

Page 5: Desenvolvendo com Kinect

5

Interfaces

GUICommand Line Interface

Natural User Interface

Graphical User Interface

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 independente de conhecimento computacional.

Page 6: Desenvolvendo com Kinect

6

Microsoft Kinect

Page 7: Desenvolvendo com Kinect

7

Microsoft Kinect

Microsoft Kinect – o herdeiro

Prime Sense

Page 8: Desenvolvendo com Kinect

8

Como o Kinect vê o mundo

Page 9: Desenvolvendo com Kinect

9

Captura de profundidade

Light Coding;

RGBD;

Reconhecimento do esqueleto.

Page 10: Desenvolvendo com Kinect

10

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.

Page 11: Desenvolvendo com Kinect

11

SDK

Page 12: Desenvolvendo com Kinect

12

Kinect for Windows SDK

KinectSensorCollection;

KinectSensorChooser;

Streams:

Audio

Interaction

Color

Depth

Skeleton

Page 13: Desenvolvendo com Kinect

13

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;

Kinect Sensor Collection

Page 14: Desenvolvendo com Kinect

14

O KinectSensorChooser é uma classe utilizada como seletor do Kinect;

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

Kinect Sensor Chooser

Page 15: Desenvolvendo com Kinect

15

Navegação – (Audio e Interactions)

Page 16: Desenvolvendo com Kinect

16

Reconhecimento de voz; (necessita do SpeechRecognition SDK)

Reconhecer a direção de uma fonte de

áudio;

Reconhecer o volume de uma entrada de áudio;

Kinect Audio Source

Microfones

Page 17: Desenvolvendo com Kinect

17

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;

Audio – Reconhecimento de voz

Page 18: Desenvolvendo com Kinect

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.

Page 19: Desenvolvendo com Kinect

19

Audio- Direção do ÁudioAudioSource 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;

Page 20: Desenvolvendo com Kinect

20

Kinect InteractionsFoi lançado dia 18 de março de 2013;

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

Page 21: Desenvolvendo com Kinect

21

Detecção da Mão

Cursor padrão

Pressionando

Pressionado

Segurando

Page 22: Desenvolvendo com Kinect

22

PHIZ – Physical Interaction Zone

Page 23: Desenvolvendo com Kinect

23

Demo – Navegação e Áudio

Page 24: Desenvolvendo com Kinect

24

Streams

Page 25: Desenvolvendo com Kinect

25

Color Stream

Fluxo de cores do sensor, possui diversos formatos;

RGB 32 bits por pixel640x480 FPS: 301280x960 FPS:12

YUV16 bits por pixel640x480 FPS:15

Bayer32 bits por pixel1280x960 FPS:12640x480 FPS:30

Page 26: Desenvolvendo com Kinect

26

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

IR 16 bits por pixel640x480 FPS: 30

Importante: Só é possível iniciar um ColorStream por

sensor. O que torna impossível ativar os

streams de IR e RGB simultaneamente

no mesmo sensor.

Page 27: Desenvolvendo com Kinect

27

Depth StreamFluxo de profundidade busca a distância em milímetros dos elementos no ambiente;

640x480 320x240 80x60

FPS: 30

Page 28: Desenvolvendo com Kinect

28

Depth StreamConfiguraçã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.

Page 29: Desenvolvendo com Kinect

29

Demo – Color & Depth Streams

Page 30: Desenvolvendo com Kinect

30

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

Page 31: Desenvolvendo com Kinect

31

Skeleton StreamDe pé ou sentado, mas olhe para o sensor!

Page 32: Desenvolvendo com Kinect

32

Skeleton Stream - Joints

Page 33: Desenvolvendo com Kinect

33

Skeleton Stream

Pose / Postura Gestos

Page 34: Desenvolvendo com Kinect

34

Detecção de Poses

Page 35: Desenvolvendo com Kinect

35

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

Qual a grande dificuldade?

Page 36: Desenvolvendo com Kinect

36

Detecção de PosesAlgoritmos 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.

Page 37: Desenvolvendo com Kinect

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;

Page 38: Desenvolvendo com Kinect

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.

Page 39: Desenvolvendo com Kinect

39

Lei dos cossenosExemplo de triangulo formado na visão frontal

Page 40: Desenvolvendo com Kinect

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.

Page 41: Desenvolvendo com Kinect

41

Demo – Final

Page 42: Desenvolvendo com Kinect

42

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;

Page 43: Desenvolvendo com Kinect

43

Muito Obrigado!!

/gabrielschade

/gabrielschade

/gabrielschade

/gabrielschade

/gabrielschade