Apresentacao Kinect - PUC-Rio

Download Report

Transcript Apresentacao Kinect - PUC-Rio

Kinect
Thiago Ribeiro da Motta
[email protected]
Summary
 O que é o Kinect?
 Características Operacionais
 Do que ele é feito ?
 Como funciona?
 The Brain
 Kinect SDKs
O que é o Kinect?
 Kinetic + Connect
 Inicialmente desenvolvido para o XBOX 360
 Sistema criado para interação com o usuário sem a necessidade de
controle por intermédio da Natural Interaction (NI).
 Conceito onde a interação homem-dispositivo é baseada
principalmente na visão e audição.
Características Operacionais
•




Cenários estáticos.
Idealmente de 1.2m a 3.5m.
Limites operacionais: 0.8m a 4.0m .
Angulo de visão: 43° vertical e 57° horizontal.
Temperatura de operação: 5°C a 35°C.
 “What is the difference in game experience enabled by PrimeSensor™
technology, compared to Wii?
 The Wii system is a 6 Degrees of Freedom (DoF) system: the Wii remote
supports 2 points with 3 DoF. The PrimeSensor™ has VGA resolution,
meaning 640x480 points, where each pixel is a 3D data point – totaling
over 300,000 DoF.
PrimeSense
Do que ele é feito ?
Do que ele é feito ?
• Ajusta o Kinect em
± 28 graus.
• Não
recomendado o
uso constante.
• SDK da Microsoft
impede mais de
um movimento
por segundo ou
mais de 15 vezes
em 20 segundos.
Motor de Ajuste
Do que ele é feito ?
Array de Microfones
•Array de 4 microfones com
conversor analógico-digital (ADC) de
24 bits.
•Chip de processamento de áudio:
Echo Cancellation e Noise
Supression.
•Por que um array?
•Melhor qualidade de audio
•Melhores algoritmos de Echo
Cancellation e Noise
Supression.
•Melhor reconhecimento de
fala (Speech SDK da Microsoft)
•Beamforming e localização do
som
Formato de Audio:
•16-kHz sample rate
•16-bit mono pulse code
modulation (PCM)
Do que ele é feito ?
Camera RGB
• Resolução de 8-bit VGA
• (640 × 480 pixels) com
um filtro de cor Bayer
• Até 30 quadros por
segundo (FPS)
• Resolução mínima, a
80cm, (87 x 63 cm) de
1.3mm por pixel.
Especificações :
VNA38209015
Do que ele é feito ?
Camera IR
• Resolução QVGA
de 11 bits
(320 × 240
pixels), gerando
2,048 níveis de
sensibilidade.
Especificações:
Microsoft /
X853750001 /
VCA379C7130
Do que ele é feito ?
Projetor de IR
• Laser difuso de
830nm com potência
de 60 mW.
• Chega ao usuário com
780nm e 0.4 µW.
• A perda é dada pela
passagem do laser no
elemento óptico que
cria o padrão de
dispersão.
• Esse elemento cria
padrões semirandômicos no
ambiente.
Especificações :
OG12 / 0956 /
D306 / JG05A
Como funciona ?
•
3D Depth Sensor
•
•
O Light Coding
codifica informações
em padrões de luz ao
sair do projetor.
Após ser projetado
em qualquer
superfície, uma
deformação é gerada.
Essa deformação
fornece as
informações
necessárias para o
cálculo da distância.
Como funciona ?
The Brain
The Brain
 1º - O projetor IR
gera a nuvem de
pontos e o Chip
calcula a distância
entre o projetor e
o que foi
projetado
The Brain
 2º - O usuário é
detectado graças ao
uso do algoritmo de
redes neurais.
 Ao lado são
mostrados os
diferentes níveis de
confiança no
resultado obtido:
Maior intensidade de
luz e quadrados
maiores implicam
maior certeza.
The Brain
 3º - Dezenas de
esqueletos são
calculados para
encontrar aquele
com maior
probabilidade de
acerto.
 Cálculos realizados
com:
 Algoritmo de Redes
Neurais
 Modelos cinemáticos
The Brain
 4º - Um avatar
3D simplificado
é criado.
 5º - Tudo se
repete, 30 vezes
por segundo.
Kinect SDKs
 OpenNi
 Microsoft Kinect SDK
 CL NUI Platform
 OpenKinect (libfreenect )
 KinectCoreVision
Microsoft SDK
 Visual Studio 2010.
 Windows 7.
 C#, C++ e .Net.
 “Some effects might seem counter-intuitive when
you attempt to work with the data streams.”
 “For a general conceptual discussion, see the
‘Beamforming’ topic on Wikipedia.”
Microsoft
Kinect drivers
NUI Library
APIs do
Windows 7
NUI API
 Permite acesso a:
 Sensores
 Cameras
 Skeletal Tracking
 Uso do Kernel para reconhecimento e enumeração de
múltiplos Kinects.
 Permite o reconhecimento e administração de múltiplos
Kinects, porém só um aplicativo pode usar cada Sensor.

Reconhecimento de esqueletos e varredura de profundidade com
indexação de usuários só funcionará para o Kinect com índice zero.
 O uso de elementos do Kinect deve ser explicitada na
inicialização do programa.
 Os elementos:




Cor
Profundidade
Profundidade com indexação de usuários
Esqueleto
 Após a inicialização é possível dizer quais parâmetros
queremos sobre a informação recebida:
 Resolução
 Qualidade de Imagem
 Número de buffers

Se todos os buffers forem preenchidos, os frames mais antigos serão
descartados.
 Obs: Máximo de buffers = 4. Geralmente se usam 2.
 Resolução da imagem de profundidade:
 640x480
 320x240
 80x60
 Qualidade de imagem:
 Qualidade Normal – 30 FPS
 Maior Qualidade – 15 FPS
 Formatos:
 RGB  32-bit, X8R8G8B8, sRGB
 YUV  16-bit, UYVY
 Só funciona em 640x480 e a 15FPS
Capturando informações sobre a
Imagem/Esqueletos
 Polling Model – Retorna quando um tempo
predeterminado é atingido ou quando um novo frame
está pronto.
 Event Model – Funciona com EventHandles sendo
ativados assim que um frame está pronto, recebendo
então informações sobre o esqueleto. Fornece maior
flexibilidade e precisão no uso do esqueleto.
Conteúdos do Esqueleto
 Posição(Vector4) que indica o centro de massa
 ID única
 Timestamp da imagem de profundidade correspondente
 Estado atual
 Tracking ativo – Contém informação sobre o esqueleto

Até dois usuários ativos por vez.
 Tracking passivo – Só indica posição
 Máximo de seis usuários contando os ativos.
 Contém informação limitada sobre o usuário.
Sensor
Joint
Sensor
Joint
0
Hip
Center
10
Wrist
Right
1
Spine
11
Hand
Right
2
Shoulder
Center
12
Hip Left
3
Head
13
Knee Left
4
Shoulder
Left
14
Ankle Left
5
Elbow
Left
15
Foot Left
6
Wrist Left
16
Hip Right
7
Hand Left
17
Knee
Right
8
Shoulder
Right
18
Ankle
Right
9
Elbow
Right
19
Foot Right
Skeleton Joints
– Kinect SDK
Sistemas de Coordenadas
 É possível espelhar as coordenadas.
 Espaço da Imagem de Profundidade:
 Cada pixel representa a distância em
milímetros do objeto mais próximo.
 Espaço do Esqueleto:
 (x,y,z) em metros.
 Compensando desníveis:
 Usa um acelerômetro interno calibrado pra ser alinhado
com o sensor de imagem.

Normal à gravidade = Vetor pra cima.
 Determinando o chão:
 Ax + By + Cz + D = 0.
 A,B,C = vFloorClipPlane.coordenada.
 D = Altura do chão à camera.
 Recalculado a cada frame.
 Caso o chão não esteja visível, retorna zero.
Array de Microfones
 Tipos de captura suportados:
 Raw Capture
 KinectAudioDMO




DMO
 Objeto COM para trocar informação com o SO
Novo modo de Microfone (suporte ao array do Kinect)
Beamforming e localização do som (ISoundSourceLocalizer)
 Suporte a até 11 beams desde que tenham variação incremental
de 10° (-50° a 50°)
 Otimizado para selecionar a melhor fonte de som.
Possui um Wrapper para facilitar o uso
 Multithread apartment (MTA)
OpenNi / NITE
 Visual Studio 2008/2010.
 Windows XP, Vista e 7 (x86).
 Linux Ubuntu 10.10+ (x86).
 Mac OSX.
 C#, C++, .Net.
 Suporte ao Kinect, WAVI Xtion (Asus) e PrimeSensor
(Prime Sense).
Software com suporte a gestos e
Natural Interaction construído
sobre o OpenNi e Nite.
Interface de comunicação entre o
sensor e o Middleware que
analisa os dados do sensor.
Hardware que captura dados da
cena.
NITE Software Overview
 OpenNi Modules
 Gesture Generator
 Hand Generator
 NITE
 Scene Analyzer




Diferença entre Foreground e Background
Coordenadas do chão.
Distinção de usuários na cena.
User Generator com Esqueleto
 Controles
 Funcionam como Listeners.
 Recebem e tratam dados.
 Repassam a informação tratada para eventos registrados.
 Production Nodes
 Production Chains
Capacidades Suportadas
 Vista alternativa
 Otimização do mapa de
profundidade para uma
área específica.
 Detecção da Pose Ψ
 Detecção do Esqueleto
 Diminuir a Resolução
 Aumento de performance
 Sincronização de Frames de diferentes
Sensores
 Espelhamento de Coordenadas
 Uso de Buffers
 WaitAnyUpdateAll
 WaitOneUpdateAll
 WaitNoneUpdateAll
 WaitAndUpdateAll
 Permite o uso de mais de um aplicativo por hardware
 Gravar/tocar/pausar uma execução dos sensores do
Kinect
Geradores de Dados
 Profundidade
 Distância máxima
 Configuração dos valores de ângulo horizontal e vertical
 Posição do Usuário
 Imagem
 Formato do Pixel
 IR
 Scene Analyzer
 Coordenadas do chão
 Mapa onde cada pixel possui uma informação sobre a cena
 Áudio
 Configura o Sample Rate, Número de canais e bits-per-sample
 Gesture
 Adicionar/Remover Gesto
 Gestos ativos
 Registrar/Retirar callback de Gestos
 Registrar/Retirar mudanças de Gesto
Geradores de Dados
 Hand Point
 Começar/Parar captura
 Registrar/Retirar callbacks de Hand Point
 User Generator
 Número de usuários
 Usuário
 Centro de Massa
 Pixels relativos ao usuário
 Registrar/Retirar callbacks do Usuário
 Funcionalidades em comum:
 Frame Sync
 Alternative View
 Cropping
 Propriedades
Sensor
Joint
Sensor
Joint
0
Head
12
Right
Elbow
1
Neck
13
Right Wrist
2
Torso
14
Right Hand
3
Waist
15
Right
Fingertip
4
Left Collar
16
Left Hip
5
Left
Shoulder
17
Left Knee
6
Left Elbow
18
Left Ankle
7
Left Wrist
19
Left Foot
8
Left Hand
20
Right Hip
9
Left
Fingertip
21
Right Knee
10
Right
Collar
22
Right Ankle
11
Right
Shoulder
23
Right Foot
Skeleton Joints
- OpenNi
Pros x Cons
Suporta
Microsoft SDK
OpenNi/NITE
Áudio/Reconhecimento de fala
Regulação do Motor
Número de Juntas
Com CLNUI motor driver
20
Suporte a 24 (15 implementadas)
Previsão de Juntas
Calcula Rotação das Juntas
Múltiplos Kinects
Instalação
RGB Camera Resolution
Tipo de Licença
Gambiarra
1 instalador
3 instaladores
1024×768
800x600
Não-Comercial
Comercial
Windows 7
Windows XP, Vista, 7 – MAC
OSX+ - Linux Ubuntu 10.10+
Maior
Menor
Framework para Hand Tracking
Pose de Calibração
Sistemas Operacionais
Uso da CPU
Pros x Cons
Suporta
Microsoft SDK
OpenNi/NITE
2010
2008/2010
Framework para
Reconhecimento de Gestos
Stream do vídeo IR puro
Falso-positivos
Evento para chegada de novo
frame de vídeo/profundidade
Sincronizaçao entre stream de
imagem e profundidade
Evento para quando Usuário
Entra/Sai da Cena
Visual Studio
Unity 3D
Gravar/Tocar/Pausar Execução
Programas Conhecidos
 Faast
 KinEmote
 RoS http://kinecthacks.net/r2-d2-replica-using-the-kinect-and-ros





for-automation/
Brekel (SLAM)
Kinvi3d http://www.kinvi3d.net/wp/
KinVi http://kinecthacks.net/kinvi-1-0-an-extreme-3d-kinect-enabledvirtual-interface-gadget-for-controlling-windows-7/
Treinamento http://kinecthacks.net/zombie-preparedness-training/
Teleconferência http://kinecthacks.net/kinect-teleconferencing-withreal-time-3d-capture-and-3d-display/
Integração entre o Windows 7 e o Kinect
http://www.youtube.com/watch?v=dihnP7d3brs
Links para Referência
 http://mirror2image.wordpress.com/2010/11/30/how-kinect-works-stereo











triangulation/
http://en.wikipedia.org/wiki/Kinect
http://www.wired.com/magazine/2011/06/mf_kinect/2/
http://www.takesontech.com/microsoft-shows-off-the-kinect-at-e3 (foto do kinect)
http://www.ifixit.com/Teardown/Microsoft-Kinect-Teardown/4066/2 (cada peça
do kinect)
http://blog.makezine.com/archive/2011/06/things-you-cant-do-with-themicrosoft-kinect-sdk.html
http://www.brekel.com/?page_id=671 (pros and cons)
http://labs.vectorform.com/2011/06/windows-kinect-sdk-vs-openni-2/ (pros and
cons 2)
http://www.tecgraf.puc-rio.br/~eribeiro/I3D/ (site do Eduardo)
http://www.codeproject.com/KB/dotnet/KinectGettingStarted.aspx?display=Print
http://www.joystiq.com/2010/06/19/kinect-how-it-works-from-the-companybehind-the-tech/
http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/
http://www.primesense.com/
 http://www.openni.org/