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/