Kinect Thiago Ribeiro da Motta trmotta@tecgraf.puc-rio.br
Summary O que é o Kinect? Do que ele é feito ? Como funciona? 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) 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 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.
Skeleton Joints – Kinect SDK Sensor Joint 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
Permite o uso de mais de um aplicativo por hardware 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
Skeleton Joints - OpenNi Sensor Joint 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 Com CLNUI motor driver Número de Juntas 20 Suporte a 24 (15 implementadas) Previsão de Juntas Calcula Rotação das Juntas Múltiplos Kinects Gambiarra Instalação 1 instalador 3 instaladores RGB Camera Resolution 1024×768 800x600 Tipo de Licença Não-Comercial Comercial Framework para Hand Tracking Pose de Calibração Sistemas Operacionais Windows 7 Windows XP, Vista, 7 – MAC OSX+ - Linux Ubuntu 10.10+ Uso da CPU Maior Menor
Pros x Cons Suporta Microsoft SDK OpenNi/NITE 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 2010 2008/2010 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-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 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-company-behind-the-tech/ http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/ http://www.primesense.com/ http://www.openni.org/