420 likes | 567 Views
Kinect. Thiago Ribeiro da Motta trmotta@tecgraf.puc-rio.br. 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
E N D
Kinect ThiagoRibeirodaMotta trmotta@tecgraf.puc-rio.br
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 ? • 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 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) Array de Microfones
Do que ele é feito ? • 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. Camera RGB Especificações : VNA38209015
Do que ele é feito ? • Resolução QVGA de 11 bits (320 × 240 pixels), gerando 2,048 níveis de sensibilidade. Camera IR Especificações: Microsoft / X853750001 / VCA379C7130
Do que ele é feito ? • 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 semi-randômicos no ambiente. Projetor de IR Especificações : OG12 / 0956 / D306 / JG05A
Como funciona ? • 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. 3D Depth Sensor
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.”
APIs do Windows 7 Microsoft Kinect drivers NUI Library
NUI API • Permite acesso a: • Sensores • Cameras • SkeletalTracking • 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.
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 • SceneAnalyzer • 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 • UserGenerator • 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 • AlternativeView • Cropping • Propriedades
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-enabled-virtual-interface-gadget-for-controlling-windows-7/ • Treinamento http://kinecthacks.net/zombie-preparedness-training/ • Teleconferência http://kinecthacks.net/kinect-teleconferencing-with-real-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-the-microsoft-kinect-sdk.html • http://www.brekel.com/?page_id=671 (pros andcons) • http://labs.vectorform.com/2011/06/windows-kinect-sdk-vs-openni-2/ (pros andcons 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-company-behind-the-tech/ • http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/ • http://www.primesense.com/ • http://www.openni.org/