Um cientista explica o Microsoft Kinect

9:02 pm Uncategorized

ATUALIZAÇÃO IMPORTANTE: Fiquei muito surpreso quando o próprio Alex Kipman, Diretor de Incubação pela Microsoft e responsável pelo Kinect, me corrigiu hoje, via Twitter! O Kinect não usa uma time-of-flight camera. A ZCam da 3DV que menciono é que usa, mas o Kinect não foi baseado nela, mas sim numa outra tecnologia chamada Light Coding ™, de outra empresa israelense, a PrimeSense. Quase tudo que eu disse no artigo ainda se aplica, e a explicação sobre como câmeras TOF funcionam está certa, mas a forma como o Kinect obtém a informação 3D é diferente da que descrevi. Prometo explicá-la em detalhes em um outro artigo. Peço desculpas pela enorme confusão, mas ser um cientista também é saber reconhecer os próprios erros, e fico imensamente agradecido ao Alex Kipman por ter me corrigido.

Murilo Queiroz, cientista da computação e mestre em engenharia eletrônica, explica porque o Kinect é a tecnologia mais impressionante do ano, com um nível de detalhe que você não encontra em lugar nenhum!

Em novembro a Microsoft lançará o Kinect, o novo acessório para o videogame Xbox 360. Com o Kinect, o jogador será capaz de controlar os jogos apenas com o próprio corpo, sem precisar de absolutamente mais nada. Do ponto de vista estritamente técnico o Kinect é o acessório mais revolucionário da história dos videogames, e provavelmente um dos produtos tecnológicos mais excitantes do ano.

Microsoft Kinetic

Microsoft Kinect

Entretanto não se vê tanto entusiasmo por aí. Depois do sucesso estrondoso do Wii, jogar com o corpo títulos como boliche ou tênis já não é mais novidade. E, recentemente, a Sony lançou o Move, para o Playstation 3, que tecnicamente é um Wiimote levemente melhorado. Afinal, o que o Kinect tem de tão diferente ?

Procurando por aí não se encontra uma boa explicação. Aliás, eu não achei nenhuma explicação técnica correta de como o Kinect funciona. Pelo contrário: achei reportagens publicadas em veículos conceituados que estão totalmente erradas com relação ao funcionamento do Kinect! Não admira quase todo mundo achar que se trata de mais uma cópia do Wii, como o Playstation Move…

Assim, resolvi explicar, tintim por tintim, o que é o Kinect, porque ele é diferente de qualquer coisa que você já viu antes, e porque eu digo que “usar o Kinect só para videogame é a coisa mais boba que alguém poderia fazer”. Prepare-se porque o artigo é longo, mas vale a pena!

Wii e Move

O Wii e o Move funcionam de forma muito parecida. Você tem um emissor de luz infravermelha (no Wii, preso à TV; no Move, no controle do jogador) e uma câmera de vídeo tradicional. A câmera enxerga a luz infravermelha e com isso detecta onde o jogador está apontando o controle. Isso é feito de forma 2D, ou seja, o resultado final é você ter uma posição na tela, como se fosse um mouse. Usando acelerômetros dentro do controle você consegue perceber a inclinação dele, e assim você consegue – com uma precisão razoável – saber a posição em que o controle está, além de onde ele está apontando.

Essa tecnologia existe há muito anos; a própria Sony lançou algo parecido para o Playstation 2, o EyeToy, que também é o nome da câmera usada pelo Move no Playstation 3. No final dos anos 1980 a Nintendo lançou um acessório que funcionava basicamente da mesma forma e que populou os sonhos de uma geração inteira, a Power Glove, para o Nintendo 8-bits, mas que infelizmente não funcionava muito bem. O Wii é só a segunda tentativa da Nintendo nessa mesma idéia.

Nintendo Power Glove, o ancestral do Wiimote

Nintendo Power Glove, o ancestral do Wiimote

Visão 3D tradicional

A visão 3D tradicional, que também existe há muitos anos e não funciona lá muito bem, imita a forma com que animais enxergam. Cada um dos nossos olhos vê uma imagem ligeiramente diferente (basta fechar alternadamente cada olho para perceber isso; é o que chamamos de paralaxe). O cérebro combina essas duas imagens e nos dá a percepção 3D. Se você entrega uma imagem ligeiramente diferente para cada olho você consegue essa mesma percepção 3D, e é isso que se fazem nos cinemas e TVs 3D, que voltaram à moda recentemente. Chamamos essa técnica de visão estereoscópica (áudio estéreo é o que manda som diferente para cada ouvido; imagem estéreo faz a mesma coisa, mas com os olhos).

No caso de visão, você usa duas câmeras para obter essas imagens diferentes, e um software calcula a posição 3D dos objetos baseada nas diferenças entre essas duas imagens. O problema é que dependendo da posição do objeto você precisa mudar o ângulo entre as duas câmeras, e o seu foco; e mesmo se você mantém isso fixo é bastante difícil obter um modelo 3D realmente bom.

Um pequeno robô com visão estereoscópica

Um pequeno robô com visão estereoscópica

Visão 3D do Kinect

Pássaros voam batendo as asas, mas isso não significa que essa seja a forma mais eficiente de fazer isso. A visão estéreo usa duas câmeras, imitando nossos dois olhos, mas assim como um avião voa mais longe, mais alto e mais rápido que qualquer pássaro é possível fazer visão 3D muito melhor de forma radicalmente diferente do que ocorre na natureza.

E é essa a abordagem do Kinect! O componente central dele é o que chamamos de câmera de tempo de vôo, ou time-of-flight (TOF) camera. Vou explicar com cuidado como ela funciona. Antes disso, e já que o assunto é inspiração na natureza, vamos falar de morcegos e golfinhos. Morcegos e golfinhos inspiraram o radar e o sonar. Funcionam baseado em eco: você emite um som (ou um pulso de rádio) e então mede o tempo que demora até o som bater no objeto e voltar. Como conhecemos a velocidade do som (ou da luz, no caso do radar) podemos calcular a que distância o objeto em que o som ou o pulso bateram está.

Imagine que você está numa sala totalmente escura, com uma câmera digital em um tripé. Quando você dispara o flash, a luz sai da câmera, viaja na velocidade da luz, e é refletida pelos objetos em frente a ela. A matriz de sensores (CCD) da câmera digital, que faz o papel do filme fotográfico de antigamente, detecta a luz que volta. Cada pixel na imagem que você obtém vem de um sensor nessa matriz, que indica quanta luz recebeu.

Agora imagine que há um cronômetro em cada sensor (lembrando que cada sensor corresponde a um pixel), que mede quanto tempo se passou entre o flash ser disparado e o “pixel” acender. Efetivamente cada cronômetro mede o tempo que a luz levou para sair do flash, refletir em algum objeto, e finalmente acertar o sensor. Fazendo a mesma conta usada no radar, você consegue descobrir a distância de cada pixel na imagem. Efetivamente cada sensor / pixel da câmera é um radar independente!

Funcionamento de um radar

Funcionamento de um radar

O problema, claro, é que estamos falando de luz. E, como sabemos, a velocidade da luz é altíssima, 300 mil kilômetros por segundo. Um radar aeronáutico mede quantos microssegundos um pulso de rádio leva para percorrer dezenas de quilômetros. Como seria possível medir com precisão o tempo que a luz leva para percorrer os poucos metros entre a câmera e a pessoa sendo filmada ? Essa conta é fácil de fazer: consideremos que a pessoa está a dois metros da câmera; a luz então tem que percorrer quatro metros no percurso de ida e volta. Na velocidade da luz, isso leva cerca de 13 nanossegundos. Esse é um período de tempo extremamente curto! Mas lembre-se que hoje temos computadores extremamente rápidos…

Os 2 GHz do seu computador significam que ele executa 2 bilhões de instruções em um segundo, ou seja, que uma instrução é executada a cada 60 nanossegundos. Como um cronômetro é muitíssimo mais simples que um processador, com a tecnologia de hoje é possível fazer um que tenha a precisão necessária.

E esse é o segredo do Kinect. O Kinect tem duas câmeras, o que faz muita gente desinformada achar que ele usa visão estereoscópica. Na verdade uma das câmeras é totalmente tradicional, colorida, como uma webcam qualquer. A outra é uma câmera TOF! O processo que descrevi acima, de acionar o flash e medir quanto tempo a luz leva para ir e voltar, é repetido 30 vezes por segundo. Você sequer vê o flash, e o sistema pode funcionar tanto no escuro quanto numa sala iluminada, porque é usada luz infravermelha. O flash pode ser acionado tão rapidamente porque na verdade ele é um pulso de laser infravermelho.

A imagem que essa segunda câmera fornece é em preto-e-branco; quanto menor o tempo medido pelos cronômetro do pixel mais branco ele aparece. Assim o vídeo da câmera TOF é um modelo 3D extremamente detalhado da imagem capturada – muito superior a qualquer coisa que você consegue usando visão estéreo comum. E isso é absolutamente surpreendente.

Modelo 3D gerado por uma câmera TOF

Modelo 3D gerado por uma câmera TOF

De onde veio ?

OK, a câmera de tempo de vôo do Kinect é uma “matriz de radares” e produz resultados espetaculares. Se é assim porque nunca ouvimos falar disso antes ?

Na verdade cientistas e pesquisadores da área de visão computacional conhecem as time of flight cameras desde 1998. O problema é que a tecnologia para construir cronômetros de precisão altíssima e fontes de luz que emitam pulsos extremamente curtos sempre foi caríssima.

A empresa suíça Mesa Imaging produz uma linha de câmeras TOF voltadas para pesquisa científica há vários anos, chamada SwissRanger. O melhor modelo é a SwissRanger SR4000, que custa US$ 9000 (isso mesmo que você leu, nove mil dólares). Ela tem uma resolução de 176×144 e opera entre 30 e 50 frames por segundo.

O câmera TOF do Kinect tem uma resolução de 320×240, muito superior à da SR4000, e entrega 30 frames por segundo, constantes. E custa US$ 150… Como a Microsoft consegue vender um produto superior por um preço sessenta vezes mais barato ? E quem desenvolveu essa tecnologia tão avançada ?

Tudo começou quando uma pequena empresa israelense,a 3DV Systems. Ela desenvolvia câmeras TOF desde 2000, e em 2007 anunciou o lançamento de uma câmera TOF de baixíssimo custo, a ZCam. Ela chegou a demonstrar em público a ZCam sendo usada num jogo de boxe, para controlar um avatar no mundo virtual Second Life, e para controlar o Windows Media Center. E então, do nada, a 3DV Systems sumiu do mapa.

Alguns meses depois a Microsoft anunciou que tinha comprado a 3DV Systems, e que a tecnologia da ZCam seria usada em um novo acessório para videogame, no então chamado “Project Natal” (o nome-código Natal foi dado em homenagem à cidade brasileira pelo coordenador do projeto, o brasileiro Alex Kipman).

Bom, isso explica a origem da tecnologia. E o preço baixíssimo ? É preciso lembrar que a SwissRanger é uma câmera usada praticamente apenas por pesquisadores. Há centenas, talvez milhares de laboratórios de visõa computacional mundo afora que possuem uma câmera TOF. Eu conversei um bom tempo a respeito com o Dr. Mário Campos, professor de robótica e visão computacional da UFMG e de quem fui aluno, e ele comentou que a SwissRanger é realmente impressionante mas o preço, proibitivo.

Mas a Microsoft pretende vender milhões de unidades do Kinect nos primeiros dias do lançamento. A escala de produção é totalmente diferente, e isso justifica a redução drástica nos preços. A Microsoft vai vender por uma merreca uma tecnologia a que apenas pesquisadores de ponta, com muita verba, tinham acesso, e isso fez todo mundo que conheço que se interessa profissionalmente por robótica e visão computacional ficar extremamente excitado.

E a Microsoft fez o quê ?

Não me interpretem mal: a câmera TOF é o componente mais importante e revolucionário do Kinect, e foi basicamente comprada pronta pela Microsoft, mas essa não é a única enorme inovação. A câmera TOF entrega um modelo 3D da cena, composto por voxels (um pixel é um ponto no espaço 2D; um voxel é um pequeno cubo no espaço 3D).

Isso é só metade do problema: para um jogo você precisa interpretar esse modelo de forma eficiente, ou seja, você precisa detectar o quê daquela imagem 3D corresponde a uma ou mais pessoas, e exatamente em que posição elas estão. É como um OCR, que pega uma fotografia de um jornal e detecta cada letra, retornando o texto que está efetivamente escrito lá.

Fazer isso num modelo de voxels é um problema extremamente difícil. Pense na enorme variação entre as pessoas: há altos e baixos, magros e gordos, crianças, adultos, cachorro passando na frente, mesinhas de centro na sala… O problema não é mais confundir o objeto com o fundo (coisa que acontece com câmeras 2D, que detectam pessoas baseadas na diferença de cor). É ver aquela “escultura de cubinhos” e interpretar que é uma pessoa fazendo o V da vitória.

Aprendizado de Máquina

Para isso a Microsoft usou técnicas de aprendizado de máquina (que aliás é uma das minhas áreas de pesquisa). A idéia é relativamente simples: ao invés de escrever um programa que resolve o problema, você escreve um programa que aprende a resolver o problema analisando milhares de exemplos.

Técnicas comuns de captura de movimentos usam uma roupa cheia de marcadores especiais para detectar a posição do corpo do autor, que é o que queremos fazer com o Kinect. Então simultaneamente filmamos o ator usando a técnica antiga e usando o Kinect, e damos os dados de posição corporal obtidos pela primeira técnica e o vídeo do Kinect para o algoritmo de aprendizado.

Andy Serkis interpretando o Gollum, de O Senhor dos Anéis

Andy Serkis interpretando o Gollum, de O Senhor dos Anéis

Com muito, muito esforço científico e muitos exemplos desse tipo o programa é capaz de aprender como detectar a posição do corpo a partir da imagem 3D vinda do Kinect. Além disso, algumas regras ajudam: sabemos que o tamanho das partes do corpo da pessoa não muda, por exemplo, e sabemos que joelhos e cotovelos não abrem mais de 180 graus.

Nesse ponto os pesquisadores da Microsoft usaram outro recurso interessante: compraram uma quantidade gigantesca de dados de captura de movimentos usados em filmes e jogos antigos, e processaram esses dados para inferir regras como as que mencionei acima.

A combinação de exemplos e regras desse tipo, e o uso intensivo de quantidades obscenas de recursos computacionais ao longo de vários meses, permitiu que o software aprendesse a detectar a posição do corpo de pessoas dos mais variados tamanhos, nas mais variadas posições e ações. O legal é que aprender o modelo requer muitíssimo esforço computacional, mas depois de aprendido executá-lo é algo bem leve – uma tarefa simples que pode ser feita por software, pelo próprio console de videogame. Daí não haver a necessidade do tal “processador extra no Kinect” de que alguns andaram reclamando.

Em termos de quantidade de dados e de pesquisadores envolvidos esse foi o maior projeto de aprendizado de máquina da história. E, não há como negar, o mérito disso tudo é da Microsoft.

O que mais ?

Além de uma câmera convencional, uma câmera de tempo de vôo e software sofisticado para detecção de posição do corpo em tempo real, a Microsoft também integrou ao Kinect microfones direcionais e um bom sistema de reconhecimento de voz. Esse sistema foi treinado (usando aprendizado de máquina, como no caso da posição do corpo) com vozes de milhares de pessoas diferentes, permitindo que ele detecte comandos simples de pessoas diferentes sem treinamento prévio para cada uma. Nada muito superior ao que já se encontra disponível em sistemas operacionais como o Windows 7 e o Mac OS X, mas um excelente complemento para o acessório.

A utilidade para jogos do Kinect vai muito além de “imitar o Wii”, como muita gente vive repetindo. A primeira diferença que nem sempre fica óbvia é que você não é obrigado a ficar de pé pulando e se sacudindo em frente à sua TV. O Kinect pode detectar a posição da sua cabeça e corpo enquanto você está sentado no sofá jogando confortavelmente com seu controle convencional.

Mas a idéia não era eliminar o controle ? Não necessariamente! Nenhum fã de first-person shooters (como Halo) ou simuladores de vôo e corrida vai querer jogar dando tiros com o dedo ou fingindo que está com um volante imaginário nas mãos. Esses hardcore gamers vão jogar com controle, com mouse e teclado ou com um bom volante com force-feedback (eu não abro mão do meu Logitech), obviamente. Mas com o Kinect é possível rastrear a sua cabeça e mudar a imagem na tela conforme a posição dela, como se você tivesse efetivamente olhando para cima e para os lados.

Pode parecer esquisito, mas já é uma técnica usada por muitos jogadores sérios no PC, que usam dispositivos como o TrackIR. Poder olhar para cima ou para os lados enquanto se joga é algo que faz tanta diferença que qualquer um que já tenha usado um rastreador de cabeça não consegue deixá-lo de lado, mesmo o tradicional sendo uma arataca dependurada no seu fone de ouvido ou boné. Só o TrackIR custa mais de US$ 120, e com o Kinect esse tipo de experiência estará disponível para qualquer um.

E essa é só mais uma possibilidade ligada a jogos. Eu particularmente, estou mirando muito, muito mais longe: com câmeras TOF de baixíssimo custo vai finalmente ser possível desenvolver de forma rápida e robusta robôs que enxergam direito, por exemplo. Um carro com câmeras TOF nos pára-choques seria capaz de detectar automaticamente e em tempo real outros carros, pedestres, vagas (e inclusive estacionar automaticamente) de forma muitíssimo melhor do que o que existe hoje. Câmeras TOF instaladas estrategicamente permitiriam que você controle qualquer coisa através de gestos. E com alguma engenhosidade é possível digitalizar esculturas e criar modelos 3D automaticamente simplesmente filmando o objeto.

Scanner 3D baseado em câmera TOF

Scanner 3D baseado em câmera TOF

As possibilidades são inúmeras. É uma inovação que traz uma preciosidade tecnológica caríssima e extremamente poderosa para o grande público. Eu mal posso esperar para colocarmos as mãos no Kinect – não só para nos divertirmos como jogadores, mas também para inventar uma miríade de coisas interessantes, como cientistas e hackers.

ATUALIZAÇÃO: Conforme apontou o leitor @Ramon, cometi um erro de ortografia: o nome do acessório da Microsoft é “Kinect”, não “Kinetic”, como escrevi. O adjetivo em inglês “kinetic”, que equivale ao nosso “cinético”, vem do grego kinétikós e significa ’móvel, que produz movimento’. Já o nome do acessório é um trocadilho com kinetic e connect, e não consta do dicionário.

ATUALIZAÇÃO 2: Ao contrário do que diz o artigo, a Power Glove for desenvolvida  pela Abrams Gentile Entertainment (AGE) e produzida pela Mattel (nos EUA) e pela PAX (no Japão), e não pela Nintendo. Obrigado pelo aviso, Madger!

74 Respostas
  1. muriloq » Blog Archive » Um cientista explica o Microsoft Kinetic :

    Date: outubro 29, 2010 @ 9:20 pm

  2. Carlos Bragatto :

    Date: outubro 29, 2010 @ 9:26 pm

    KUDOS ! Ótimo artigo, o gado está pensando que é simplesmente “a camera EyeToy que existia no PS2 há 5 anos atrás”… Pfft.

  3. Tweets that mention Tecnologia. Inteligente. » Blog Archive » Um cientista explica o Microsoft Kinetic -- Topsy.com :

    Date: outubro 29, 2010 @ 9:55 pm

    [...] This post was mentioned on Twitter by Murilo Queiroz, Murilo Queiroz, Renato Marques, Planeta GNU/Linux, jagripino and others. jagripino said: Um cientista explica o Kinectic da MS e porque ele é mais importante do que aparenta: http://bit.ly/9tLnPg [...]

  4. Giovani Gandelim :

    Date: outubro 30, 2010 @ 2:10 am

    Murilo, parabéns, muito boa a matéria, eu já ia comprar o kinect, mas agora fiquei ansioso hehehe, muito legal, até agora não tibha visto nenhuma matéria esclarecedora sobre o assunto e a sua é ótima.

  5. Gilson Santos Aka BooTMaker :

    Date: outubro 30, 2010 @ 9:54 am

    Artigo fantástico MuriloQ.
    Muitos leigos conseguirão entender de fato a minha visão sobre o Kinect: Que de fato usar isso pra joguinho de videogame é subutilizar uma tecnologia muito mais abrangente.

  6. Luiz Brandao :

    Date: outubro 30, 2010 @ 11:21 am

    Excelente artigo, estou repassando para o meu filho e os amigos que são fanáticos por XBOX como você e eu (que mesmo aos 52 anos ainda curto esses videogames e incentivo os meninos), o genial é ver um engenheiro explicando a tecnologia, os usos e o que mais pode ser o futuro.

    Parabéns!

  7. nic :

    Date: outubro 30, 2010 @ 1:26 pm

    Muito bom o artigo. Não sabia dessa câmera…

    Mas tem certeza que ela entrega uma informação de voxels? Não seria um mapa de profundidade, 2D, com as distâncias de cada pixel, igual os que se produzem em estereoscopia?…

  8. Ramon :

    Date: outubro 30, 2010 @ 2:15 pm

    Ótimo artigo, você só errou o nome do aparelho: é Kinect, e não kinetic…

  9. Marison Parreiras :

    Date: outubro 30, 2010 @ 4:21 pm

    Finalmente um artigo sobre o Kinect completo, tecnicamente correto, com informações para desmistificar os erros de interpretação e ainda sugerindo as aplicações que vão além dos videogames. Fico deprimido com o que leio ou ouço sobre Kinect na maioria das fontes. Gente achando que é uma câmera apenas ou no máximo uma câmera estéreo, desconsiderando a técnica usada de aprendizado de máquina, entre outras baboseiras. Parabéns!

  10. Alisson - Canal 3 :

    Date: outubro 30, 2010 @ 5:19 pm

    Excelente materia Murilo. Da forma clara que vc escreveu, qualquer leigo como eu entende como é espetacular a tecnologia e os recursos empregados no Kinetic.
    Outra coisa foi que a matéria conseguiu tirar a pulga atrás da minha orelha sobre o “processador extra no Kinetic”. Simplesmente incrível a solução encontrada.

  11. Marco Lazzeri :

    Date: outubro 30, 2010 @ 6:42 pm

    Excelente texto, Murilo! Ao mesmo tempo simples e completo, e explica bem a ideia da coisa. Parabéns!

  12. Um cientista explica o Microsoft Kinect | Sedentário & Hiperativo :

    Date: outubro 30, 2010 @ 6:43 pm

    [...] tecnológicos mais excitantes do ano. “Mas ele não é só uma cópia do Wii?“. Não. Confira e entenda no artigo do amigo cientista Murilo Queiroz o que faz do Kinect uma tecnologia com…, abrindo um mundo de novas possibilidades nos games — e bem [...]

  13. gilvas :

    Date: outubro 30, 2010 @ 6:58 pm

    tecnologia impressionante sendo utilizada em máquinas de alienação: uma pena. espero que o barateamento delas nos permita aumentar o acesso.

  14. diego :

    Date: outubro 30, 2010 @ 7:09 pm

    estava em duvida se compraria o kinetics na minha proxima viagem aos eua. Ja sanei a mesma….. vou trazer um na mala facil!

  15. Madger :

    Date: outubro 30, 2010 @ 7:40 pm

    Legal pra caramba o artigo murilo, mas eu encontrei um pequeno errinho que é com relação ao power glove, ele não é da nintendo nem foi distribuido por ela, mas sim pela Mattel.

  16. DynCoch :

    Date: outubro 30, 2010 @ 7:40 pm

    Muito bom artigo!

  17. D :

    Date: outubro 30, 2010 @ 8:09 pm

    Ainda bem que inventaram de usar isso em um videogame !

    Usam a mesma coisa em pesquisas “sérias” e projetos “importantes” a 10 anos, mas, graças aos videogames e sua “futilidade”, o preço do produto caiu mais de dez vezes, permitindo que mesmo cientistas “pobres” em projetos “tolos” possam usá-la.

    Isso não é retrocesso. Isso é um PUTA avanço.

    Além do mais, venhamos e convenhamos, a Microsoft não faz só videogames. Ela certamente vai vender essa mesma tecnologia para outros fins.

    Nenhuma tecnologia lucrativa, no captalismo, é subutilizada….

  18. Um cientista explica o Microsoft Kinect « World Games Go. :

    Date: outubro 30, 2010 @ 8:15 pm

    [...] ele não é só uma cópia do Wii?“. Não. Confira e entenda no artigo do cientista Murilo Queiroz o que faz do Kinect uma tecnologia completam…, abrindo um mundo de novas possibilidades nos games — e bem [...]

  19. Rafael :

    Date: outubro 30, 2010 @ 8:38 pm

    Parabens pelo artigo.

  20. Murilo Queiroz :

    Date: outubro 30, 2010 @ 9:00 pm

    @nic: Sendo rigoroso você tem razão, o que a câmera TOF entrega é um mapa de profundidade, não um mapa de voxels propriamente dito.

    Uma câmera estéreo produz um resultado muito parecido. A diferença está na precisão e resolução que você consegue.

    Uma forma de obter voxels mesmo (com x,y e z bem-definidos) é fazer como na última ilustração do artigo, gravando um vídeo do objeto enquanto ele gira em torno do próprio eixo.

  21. Daniel :

    Date: outubro 30, 2010 @ 10:03 pm

    Excelente artigo, eu não conhecia a tecnologia utilizada no Kinetic. Até fiquei interessado, nem que seja ele sozinho “apenas” para pesquisa (tenho wiimotes sem ter wii também hehe).
    Mas ele também tem reconhecimento facial e de emoções, não? Acredito que OCR também, considerando aquele demo do menino que lê o bilhete que a moça mostra na câmera.
    E aliás, acho que a precisão do cronômetro explica a restrição de distância mínima do Kinect, já que precisa dar tempo da luz ir e voltar em 1 ciclo.

    Apenas uma correção:
    “Os 2 GHz do seu computador significam que ele executa 2 bilhões de instruções em um segundo”
    Isso não é verdade na grande maioria dos processadores, que são superescalares, já faz algum tempo. Por isso existe também a medida em FLOPS (floating-point operations per second).

  22. Everson Vargas da Luz :

    Date: outubro 30, 2010 @ 10:29 pm

    Gostei muito da matéria, e estou realmente feliz que a MS conseguiu fazer um dispositivo tão avançado para usar na sala de casa, levando em conta os ótimo incentivos que ela dá para desenvolvedores tenho certeza que teremos apps muito eficientes a partir desse acessório, e logo teremos uma excelente integração de Windows 7, Windows Phone 7 e Xbox com Kinetic.
    Forte abraço e já assinei a RSS para ficar ligado nas próximas matérias

  23. Richard David :

    Date: outubro 31, 2010 @ 12:08 am

    Parabéns pelo artigo, muito esclarecedor e rico em dados científicos, do jeito que deve ser.
    Abraço

  24. Michel :

    Date: outubro 31, 2010 @ 8:02 am

    Perfeito o seu artigo! Parabéns!

  25. Tweets that mention Tecnologia. Inteligente. » Blog Archive » Um cientista explica o Microsoft Kinetic -- Topsy.com :

    Date: outubro 31, 2010 @ 8:42 am

    [...] This post was mentioned on Twitter by Vinícius K-Max, Nicolau Leal Werneck. Nicolau Leal Werneck said: Tecnologia. Inteligente. » Blog Archive » Um cientista explica o Microsoft Kinetic: http://bit.ly/aSCDsi via @addthis [...]

  26. Murilo Queiroz :

    Date: outubro 31, 2010 @ 9:15 am

    @Daniel: você tem razão, com certeza o número de instruções efetivamente executado é muito diferente do número de ciclos de clock por segundo. Mas para explicar isso eu teria que começar a falar em processadores superescalares, como você menciona, além de um monte de outras coisas (pipeline, branch prediction, hierarquia de cache…). Preferi simplificar e escrever algo que não é estritamente correto mas que ilustra o ponto (circuitos de hoje podem responder em poucos nanossegundos).

    Sobre o OCR, reconhecimento de face e outras coisas: considero esses detalhes a mais, que são interessantes mas que não são tão legais quanto a câmera TOF.

  27. Emmanuel :

    Date: outubro 31, 2010 @ 10:11 am

    Parabéns pelo artigo!
    Excelente, eu mandaria esse material para as revistas de games, li quase todas que tratam do assunto e não vi nenhuma com esse grau de detalhamento.

  28. Microsoft | Kinect :

    Date: outubro 31, 2010 @ 11:36 am

    [...] Confira e entenda no artigo do amigo cientista Murilo Queiroz o que faz do Kinect uma tecnologia com…, abrindo um mundo de novas possibilidades nos games — e bem além. [...]

  29. Marcelo Souza :

    Date: outubro 31, 2010 @ 11:57 am

    O PRoblema do Kinect não é ser revolucionário ou não. Como visto e citado a Zcam existe a 10 ANOS ! Isso não é revolução. Sistemas baseados em IR são usados a muito tempo e sim, em games, porém sem tanto Hype ou sucesso. Pq ? Pq o conceito não é tão legal quanto a tecnologia envolvida. E pra conceito “ruim”, não há solução que dê jeito, só mudando a aplicação. Acho que o Kinect vai ter coisas legais como aquele jogo tipo “Flow” da UbiSoft, e coisas pontualmente legais, mas sinceramente acho que está fadado ao mesmo fracasso do EyeToy. Uma camera de 320×200 de IR, desculpa, não é revolução alguma, pelo contrário, é um Grande Beta testing de algo limitado. 320×200 não tem precisão pra detectar movimentos sutis de partes pequenas como dedos, seus movimentos sempre terão que ser mais forçados pra serem captados. 100% dos videos do Kinect vc repara erros de interpretação, e LAgs…Pq ? Pq é algo que não está pronto pro mercado, e a M$oft insiste em vende-lo como revolução do universo…
    A tecnologia e o conceito tem problemas e limitações mascaradas pela M$oft, como o fato de ficar super bugado com sobreposição de imagens, não aceitar movimentos de giro no proprio eixo direito, não funcionar direito com vc sentado, etc.
    Isso mesmo, vc vai dirigir seu carro de pé, com os braços no Ar, com ZERO FEEDBACK de vibração, recoil de tiros ou mesmo pressão das rodas do seu carro no asfalto, e a M$oft quer fazer vc acreditar que isso é “natural”. Desculpa. Não é.
    FEEDBACK é uma palavra que mata o conceito do kinect de cara. A outra é…Falta de precisão e falta de botões. Sem essas 3 coisas, sinceramente, pra mim ele tem um gargalo de aplicações ENORME. Basta analizar todos os videos mostrados de apresetações (Metade são fakes), e comprovará a “pegadinha” que estou relatando.
    Acho que vai ser legal, acho que vai ter jogos muito legais, mas tomara que não se metam a querer aplicar o Kinect em coisas que não tem nada a ver com ele… Dai ele pode dar certo.
    De qualquer forma, o Artigo está bem explicativo, apesar de eu achar que o Kinect pode usar a tecnologia que for, ele tem um problema CONCEITUAL.

  30. r. de almeida :

    Date: outubro 31, 2010 @ 11:57 am

    ‘Morcegos e golfinhos inspiraram o radar e o sonar’

    isso nao é verdade. essas duas tecnologias apareceram antes da percepçao de que esses animais ja usavam mecanismos proximos

  31. Murilo Queiroz :

    Date: outubro 31, 2010 @ 1:00 pm

    Fui pesquisar pelos primeiros trabalhos explicando ecolocalização e parece que você está certo. Muito obrigado pela correção!

  32. Murilo Queiroz :

    Date: outubro 31, 2010 @ 1:05 pm

    Você leu o artigo direito ?O que estou dizendo que é revolucionário é a time of flight camera, que não tem nada a ver com uma câmera IR comum.

    E para jogos de corrida, como no seu exemplo, a idéia é usar um volante real, com force feedback, e usar o Kinect só para rastreamento de cabeça. O vídeo demonstrando o TrackIR mostra como funciona. Apesar de possível o bacana NÃO é usar um volante imaginário.

    É claro que existe a possibilidade dos jogos simplesmente não serem divertidos, e isso se traduzir num fracasso de vendas. E concordo que a falta de feedback pode ser um problema. Mas me parece que você está exagerando um pouco, a SwissRanger que menciono no artigo tem resolução ainda menor e já foi usada na prática várias vezes.

  33. Wenderson :

    Date: outubro 31, 2010 @ 2:17 pm

    Parabéns Muriloq, belo artigo e excelente detalhamento tecnico mesmo para leigos como eu :-D, mas tive a impressão de que, quando conversamos sobre isso a algum tempo atrás, o nome da câmera (ou da tecnologia) era “TIME OF LIGHT” me parecia até mais lógico que “TIME OF FLIGHT”.

    Grande abraço
    Wenderson

  34. Darcio Prestes :

    Date: outubro 31, 2010 @ 2:45 pm

    Excelente artigo. Fico imaginando que tipo de dispositivos poderão ser construídos com o fácil acesso a esta tecnologia. Ponto para a Microsoft por tornar possível que pesquisa científica de ponta chegue até as massas.

  35. José :

    Date: outubro 31, 2010 @ 4:57 pm

    Esse negócio é um lixo, nunca será realizado. A Microsoft continua sendo a piada de sempre.

  36. rafaeldfmelo :

    Date: outubro 31, 2010 @ 5:17 pm

    a camera do ps3 chama ps3 eye, e não eyetoy.
    é uma camera de resoluçao hd, e o move tem giroscópio sim, mas não tem infravermelho envolvido na detecção do move, é um led que muda de cor na “bolinha do move que faz isso.
    EXCELENTE texto, deliciosamente divertido e informativo, parabens!

  37. Charlles Ferraro :

    Date: outubro 31, 2010 @ 6:58 pm

    Sr. cientista, você não sabe nem a tecnologia que o Kinect possui enquanto hardware (vide sua suposição sobre um hardware inexistente). Como voce antes de USAR o aparelho pode dizer que o mesmo é revolucionário ?
    O uso do aparelho terá varias restrições, diferente do que foi demonstrado na E3. Nada é tão bonito quanto o marketing diz ser.
    Não acho que o Kinect seja a mesma proposta de Sony e Nintendo mas com certeza o produto dessas é muito mais fiel do que a “fantasia” que vende a Microsoft.
    Como “cientista” acho que você deveria ter mais compromisso com a usabilidade real do produto do que com o marketing do mesmo.

  38. rafael :

    Date: outubro 31, 2010 @ 7:54 pm

    Só corrigindo o psmove é um sistema 3D. A câmera detecta tambem movimentos de aproximação e afastamento com bastante precisão. Ela faz isso atravez do cálculo do diametro da esfera colorida. Você pode conferir em jogos como Bublle.

  39. Alisson - Canal 3 :

    Date: outubro 31, 2010 @ 9:55 pm

    Murilo, publicaram sua matéria na gamevicio. http://www.gamevicio.com.br/i/noticias/58/58698-um-cientista-explica-o-microsoft-kinect/index.html
    Pelo menos deram os devidos créditos.

  40. Marcelo Souza :

    Date: novembro 1, 2010 @ 12:16 am

    Desculpa, mas eu sou pior que um fanboy, e sou um hater :)

  41. Rafael :

    Date: novembro 1, 2010 @ 2:57 pm

    Parabéns pelo artigo, muito bem feito.

  42. Como o Microsoft Kinect funciona? | TechNewsBR :

    Date: novembro 1, 2010 @ 3:36 pm

    [...] ao console verificar qual comando executar pelos movimentos do corpo do jogador. Encontrei no site Tecnologia Inteligente um artigo explicando a ciência por trás do Kinect e porque é tão revolucionária. Inclusive eu acho valerá a pena ser embutido em laptops e [...]

  43. CyberGi » Sinais de que a Skynet está chegando… :

    Date: novembro 2, 2010 @ 8:04 am

    [...] Microsoft Kinect – O Kinect sabe e vai entender tudo o que você gesticular e falar na frente dele =O Isso é que é aprendizado de máquina potente! (tem que funcionar em ambientes reais, com variações de iluminação e de tamanho da sala, além de reconhecer os jogadores). [...]

  44. Cientista explica o Microsoft Kinect | GameReporter | Blog de cultura gamer | Games, Jogos, Download e mais... :

    Date: novembro 4, 2010 @ 7:03 am

    [...] Leia o artigo aqui Gooooooostou? Compartilhe este post! [...]

  45. William Lindsay :

    Date: novembro 4, 2010 @ 8:27 am

    O Charlles Ferraro tem razão. Embora o artigo seja gay (alegre) o articulista não age como cientista que diz ser.

  46. Rodolfo José :

    Date: novembro 4, 2010 @ 3:38 pm

    Vou usar uma linguagem bem popular….

    o que me deixa mais puto da vida é neguinho fala mal do que não sabem…. tem gente falando de lag entre outros, poxa o negocio é revoluconario… superfodastico….

    pra essas pessoas, vão pentear macaco.

  47. Leo :

    Date: novembro 4, 2010 @ 6:12 pm

    Incrivel post, muito bem trabalhado. eu ja comprei meu xbox 360 pronto para o kinect e vou comprar tb. estas cameras TOF podem ser a nova mania do futuro ( ou de agora) – nao deixaram nem o 3D enjuar, ja tem uma nova tecnologia!!!

  48. lnpq :

    Date: novembro 7, 2010 @ 1:37 am

    Murilo, parabéns pelo “vanguardismo didático” tupiniquim tecnológico. Acredito que seu texto, mesmo quem em um blog, servirá de referência em língua portuguesa para esse tema tão promissor de interface.

    Li completamente esta parte I. Li também os posts dos leitores. Fico imaginando que o mesmo avanço de aprendizado de máquina usado para o console em relação aos movimentos corporais humanos possa acontecer em relação aos fluxos de escritas (textos). Estou buscando por referências neste tema.

    Grande abraço!

    Luiz Mesquita.

  49. Carlos Gonçalves :

    Date: novembro 7, 2010 @ 8:23 pm

    Fico pasmo ao ver como as pessoas correm a dar dinheiro para empresas como a Microsoft comprando besteiras como essa. Toda nova tecnologia é sempre comercializada de forma prematura, como foi o CD e o DVD. Essa será apenas mais uma. Eu entrei uma vez, quando comprei o primeiro cd player lançado no mercado pela sony, o cdp-101. Foi a última.

  50. EmbromAction » Um cientista explica o Kinect :

    Date: novembro 8, 2010 @ 8:04 am

    [...] lan?amento ? extremamente interessante e foi “debulhada” por um cientista. Confira, clicando neste link, como funciona esse aparato que promete revolucionar o mercado de videogames ao redor do globo e, [...]

  51. Matheus :

    Date: novembro 9, 2010 @ 3:27 pm

    Fico pasmo com as pessoas que não entendem nada, dizerem que o equipamento não presta, que tem lag, que não vai dar certo.
    Ficam tentando ser Mãe Dinah.
    A verdade é que a Microsoft trouxe uma tecnologia revolucionária disponível para as massas.
    O resto é mi mi mi.

  52. Eno Renato :

    Date: março 8, 2012 @ 10:55 am

    Primeiramente parabéns pelo artigo..mas eu gostaria de saber como o Kinect faz para armazenar imagens de movimentos capturados em um BD… por exemplo em uma aplicação como posso salva-los os movimentos capturados…alguém pode me citar outros artigos ou TCCs…livos didáticos qualquer coisa que possa me auxiliar????? estou realizando um projeto e pretendo utilizar o Kinect….abraços a todos e desde já muito obrigado.

  53. Murilo Queiroz :

    Date: março 8, 2012 @ 1:33 pm

    @Eno: Não consegui entender direito suas perguntas. Se o seu objetivo é usar o Kinect em algum projeto (ligando-o ao PC) há basicamente duas soluções:

    - Usar o SDK da Microsoft
    http://www.microsoft.com/en-us/kinectforwindows/develop/

    - Usar o OpenNI, que é um SDK open-source ( http://openni.org/ ).

    Outras soluções se baseiam nesses SDKs para deixar tudo mais fácil:

    FAAST
    http://projects.ict.usc.edu/mxr/faast
    Zigfu
    http://zigfu.com/

    Se quiser saber exatamente como a solução da Microsoft funciona, a melhor referência é o artigo abaixo, mas requer conhecimentos de aprendizado de máquina e visão computacional:
    http://research.microsoft.com/pubs/145347/BodyPartRecognition.pdf

  54. Renato RIbeiro :

    Date: março 29, 2012 @ 12:55 pm

    Boas.
    Desde já quero dar os parabéns por todo o artigo, todo ele é esclarecedor e bastante útil comparado com toda a informação disponível na internet.
    Sou estudante de Eng. Eletrônica em Portugal. E pretendo fazer um projeto com a kinect em que esta através de movimentos nos vai permitir controlar um braço robótico.
    Gostaria, se possível, que me recomenda-se o SDK a utilizar.
    Já verifiquei os acima referidos e numa primeira escolha optaria pelo SDK da Microsoft.

    Agradecia se me pode-se contactar via email para uma troca melhor de ideias..
    Obrigado
    Cumprimentos

  55. Murilo Queiroz :

    Date: março 29, 2012 @ 1:19 pm

    @Renato Ribeiro: muito obrigado pelos elogios.

    Eu acredito que, no seu caso, justamente por querer usar um braço robótico, a melhor opção é o ROS (Robot Operating System), que tem suporte a Kinect (baseado no OpenNI, que pode usar tanto o skeleton tracking da PrimeSense quanto o da Microsoft):
    http://www.ros.org/wiki/kinect

  56. Renato Ribeiro :

    Date: março 29, 2012 @ 5:49 pm

    Compreendo e agradeço a sua sugestão.
    Mas o braço robótico é controlado por um autómato que receberá as coordenadas vindas da kinect.
    Não será mais fácil através do uso do SDK da Microsoft?

  57. Murilo Queiroz :

    Date: março 29, 2012 @ 7:52 pm

    @Renato Ribeiro: se você só precisa da posição e rotação das juntas a forma mais fácil que conheço para obter isso é o FAAST:
    http://projects.ict.usc.edu/mxr/faast/

  58. Renato RIbeiro :

    Date: março 30, 2012 @ 6:01 am

    Mas pelo que percebi este não permite uma “manipulação” de imagem a apresentar, eg ver a imagem da VGA com o esqueleto identificado nela.
    Também pretendo verificar se a mão está aberta ou fechada.

  59. Murilo Queiroz :

    Date: março 30, 2012 @ 11:27 am

    @Renato Ribeiro: se você quer algo fácil não pode exigir nada. :-)

    Sobre verificar se a mão está aberta ou fechada: vai ser difícil. Até existem algumas soluções para isso (muitas usando processamento 2D para identificar a ponta dos dedos, por exemplo) mas todas têm muitas limitações, e os SDKs oficiais não suportam isso.

    Se você quer uma solução simples é melhor pensar em outra forma de controlar a abertura e fechamento da mão.

    No grupo OpenNI-Dev você pode encontrar mais informação sobre isso:

    https://groups.google.com/forum/?fromgroups#!forum/openni-dev

  60. Renato RIbeiro :

    Date: março 30, 2012 @ 11:58 am

    Não desejo nada fácil. Apenas queria saber as limitações dos SDK’s. E como tem mais experiencia, decidi recorrer à sua opinião. Mas mesmo não suportando esse tipo de detecção (mão aberta/fechada) estas não permitem a elaboração de código para que a detecção seja possível?
    Percorri vários exemplos na internet, e existem muitos métodos de obtenção de informação se a mão está aberta/fechada, a que me pareceu mais viável e adequada à minha situação é através do calculo da depth área, após a detecção do joint da mão. E a minha maior duvida é se é possível elaborar código dentro desses SDK’s (como o kinect SDK da microsoft).

  61. Murilo Queiroz :

    Date: março 30, 2012 @ 12:34 pm

    @Renato, acho que a sua dificuldade está em entender a arquitetura de software usada nesses casos, e como/onde os diferentes SDKs e bibliotecas se encaixam.

    Qual SDK usar (o da Microsoft ou da PrimeSense) é irrelevante para sua pergunta. Ambos entregam o mapa de profundidade e fazem rastreamento de esqueleto.

    O OpenNI pode usar tanto um quanto o outro, é uma camada em cima deles (um wrapper).

    O ROS, que recomendei antes para você, é uma camada em cima do OpenNI. Outros frameworks (como o FAAST, que também já recomendei, ou o Zigfu, que é para aplicativos em Unity3d), são também camadas em cima do OpenNI; o OpenNI, portanto, age como middleware.

    Você pode usar o Kinect em qualquer uma dessas camadas. Quanto mais baixo o nível mais trabalho você tem: se você quiser usar o SDK da Microsoft sozinho você não vai ter muitos dos recursos que são implementados pelas camadas de cima; só vai ter o mapa de profundidade e o rastreamento de esqueleto.

    Para processamento 2D (usado para detectar abertura e fechamento da mão) muita gente usa também o OpenCV, que é uma biblioteca de visão computacional, e a imagem RGB fornecida pelo Kinect.

    Dá para fazer o que você quer usando o OpenNI. Você pode configurar o OpenNI para usar tanto o SDK da Microsoft quanto o da PrimeSense, no seu caso é irrelevante. Provavelmente você vai precisar, além do OpenNI, do OpenCV também (pro problema de abrir ou fechar a mão).

    E se você quiser usar outros recursos do ROS também dá, já que ele também é baseado no OpenNI.

  62. Renato RIbeiro :

    Date: março 30, 2012 @ 12:47 pm

    Murilo, tenho de agradecer este esclarecimento e todo este post.

    Você foi direto à minha duvida e esclareceu o que nem eu sabia perguntar..
    Muito obrigado mesmo :)

    cumps

  63. Murilo Queiroz :

    Date: março 30, 2012 @ 2:18 pm

    Fico feliz por ajudar! :-) Depois me conte no que deu o projeto!

  64. Renato RIbeiro :

    Date: abril 2, 2012 @ 5:18 am

    Com certeza eu direi..

  65. Renato RIbeiro :

    Date: abril 2, 2012 @ 10:06 am

    Murilo, sabe como poderei adquirir uma kinect for windows? É q as unicas opções que vejo é Amazon e MicrosoftStore e nenhuma delas exporta para Portugal.

  66. muriloq :

    Date: abril 2, 2012 @ 10:13 am

    Também não está disponível no Brasil, mas talvez ele não seja necessário para você.

    O Kinect for Xbox 360 comprado separadamente vem com uma fonte de alimentação e funciona normalmente no PC (o Kinect que vem no Xbox bundle vem sem essa fonte, que pode ser comprada separadamente).

    O SDK para o Kinect for Windows funciona no Kinect for Xbox 360. Só tem duas diferenças:

    - Licença: você pode usar Kf360 no desenvolvimento, mas ele só funciona se você tem o SDK inteiro instalado; em app standalone só o KfW.

    - “Near mode”: o firmware do KfW suporta detecção a menos de 800 mm, ao contrário do Kf360. Então para usar em apps de pertinho você precisa do KfW.

  67. Renato RIbeiro :

    Date: abril 2, 2012 @ 10:32 am

    Mas não conhece nenhum site que dê para mandar vir? É que o projeto será apresentado numa feira de tecnologias e será mais atrativo o novo kinect.

  68. muriloq :

    Date: abril 2, 2012 @ 10:45 am

    Infelizmente não sei onde você pode conseguir um Kinect for Windows.

  69. Renato RIbeiro :

    Date: abril 2, 2012 @ 11:02 am

    Mas utilizando o sdk oficial do windows não tem problema usar o da xbox ?

  70. muriloq :

    Date: abril 2, 2012 @ 11:11 am

    O Kinect for Xbox funciona normalmente com o SDK oficial, desde que o SDK completo estiver instalado na máquina e o “near mode” não seja usado.

  71. Renato RIbeiro :

    Date: abril 2, 2012 @ 11:14 am

    São essas as únicas diferenças do hardware?

  72. muriloq :

    Date: abril 2, 2012 @ 11:20 am

    Até onde sei o hardware é idêntico, só muda o firmware (para suportar o near mode).

    Que eu saiba a principal diferença é a LICENÇA: o uso comercial do SDK da Microsoft só é permitido com o Kinect for Windows. O uso para pesquisa ou hobby é permitido com ambos.

    Pelo que entendi o SDK da PrimeSense (e o OpenNI) não têm essa restrição.

    De qualquer forma você vai ter que pesquisar a respeito. Essas informações que lhe passei eu tirei das discussões no grupo openni-dev@googlegroups.com , que já lhe recomend

  73. Renato Ribeiro :

    Date: maio 4, 2012 @ 6:15 am

    Boas..
    Projecto está a andar para a frente, queria agradecer desde já por toda a ajuda que me deu a iniciar.

    Já me estou a entender com isto.

    Sabes como posso obter a distancia a cada pixel de uma determinada area??

  74. Pedro :

    Date: agosto 31, 2012 @ 6:09 pm

    O princípio de medição 3D que você descreveu está errado. O Kinect usa a combinação de dois princípios: Depht from focus + stereo vision. Não usa câmera TOF. Segue:
    http://campar.in.tum.de/twiki/pub/Chair/TeachingSs11Kinect/2011-DSensors_LabCourse_Kinect.pdf
    http://www.youtube.com/watch?v=KIXUXn2UrH4

    Até! :D