28 de julho de 2013

Aventuras com o Kinect - Parte 2 - O Hardware e exemplos da SDK oficial

O Hardware do Kinect foi desenvolvido por uma empresa israelense chamada PrimeSense, eles usam distorções num padrão de luz pré-determinados para obter a informação de profundidade de um ambiente, uma tecnologia conhecida como "Luz Estruturada", enquanto a nova versão do Kinect usará uma chamada "Time of Flight". A explicação detalhada de como ambas as tecnologias funcionam pode ser achada aqui.

Um exemplo de luz estruturada, com as distorções é possível calcular a profundidade (fonte)
Com isso, o Kinect se baseia em duas câmeras, uma "webcam" normal (RGB) e outra infravermelha para detectar a luz emitida por um laser (são pontinhos, diferentemente dos linhas da imagem acima). A resolução da câmera RGB é de 640x480 quando capturando a 30 quadros por segundo e 1280x1024 a 15 quadros por segundo, uma resolução razoável. A nova versão promete 1080p. Já a resolução da câmera de profundidade varia entre 320x240 ou 640x480.

Visão Infravermelha do Kinect, é através de distorção dos pontos que é calculado a sua distância do Kinect
O Kinect também conta com um motor que permite regular seu ângulo de inclinação, possibilitando o posicionamento automático, seu software pode detectar se ele está em baixo ou em cima da TV. Ele conta com 4 microfones, que permitem determinar a posição do usuário em relação ao Kinect, além de um ótimo som, devido ao cancelamento de ruído.

Existem outros concorrentes, a própria PrimeSense com o Carmine e a Asus (que utilizada um chip da PrimeSense) com o Xtion, na prática eles são parecidos com o Kinect. O Kinect tem drivers melhores, é mais popular, logo melhor suporte, porém tem uma câmera RGB de pior qualidade e é maior, aqui você pode ler mais sobre essas diferenças.

Agora vamos dar uma olhada em sua SDK e nos exemplos fornecidos.

Primeiramente o som, é um array de quatro microfones, que permitem cancelamento de ruído, portanto um ótimo som, necessário para o reconhecimento de fala. Esse sistema permite a localização, em relação ao sensor, da posição da voz, como é visto nesse exemplo Audio Basics, que está em C++, C# e VB. O exemplo está nessas 3 linguagens, portanto você pode acessar os recursos de som, por meio da SDK em qualquer uma dessas linguagens.

Com o Kinect é possível determinar a localização de alguém apenas pelo som
A SDK também possibilita rastreamento do esqueleto, como pode ser visto na foto. Permite configurar, pegar apenas braços e cabeça, a qualidade da captura, isso está disponível num demo chamado "Kinect Explorer - D2D C++ Sample".

Um outro exemplo, o "Kinect Explorer - D2D", permite alterar

Uma coisa que me chamou atenção foi a possibilidade de criar modelos 3D de objetos apenas com o Kinect e um pouco de disposição para "fotografar" o objeto de vários ângulos, coisa que pode ser melhorada com o uso de mais de um sensor. É claro que seria necessário um programa poderoso para tal, como o KScan3D.

No entanto já está disponível um exemplo para tal, apesar de limitado até que funcionou bem. Chama-se "Kinect Fusion Explorer-WPF", infelizmente é um pouco pesado, ficando bem lento na minha Radeon HD 5670, infelizmente é necessário suporte ao DirectX 11, portanto apenas Radeons a partir da série 5000, Geforces da 400 e da Intel a partir de 3ª geração devem ser capazes de abrir a demonstração.

Interface do Kinect Fusion Explorer-WPF
Eu tentei digitalizar a Capa da minha HP 50g (com ela dentro para em pé), não ficou grande coisa, mas serve como um exemplo. O programa salva no formato STL, portanto pode ser visualizado em outros, como o opensource MeshLab.
Arquivo STL aberto no MeshLab
Tenho gostado bastante de brincar com o Kinect, é um Gadget interessante que abre várias possibilidades para o computador. Tenho algo em mente que gostaria de desenvolver, mas infelizmente é algo que levaria bastante tempo, portanto não sei se conseguirei para a parte 3 dessa série.

Nenhum comentário: