O Kinect da Microsoft

Por Haroldo Ribeiro Gomes

Nassif,

O Murilo Queiroz escreveu dois ótimos artigos explicando didaticamente o funcionamento do Kinect  e o que diferencia o dispositivo + software das tecnologias adotadas em outros consoles.

Parte 1: http://blog.vettalabs.com/2010/10/29/um-cientista-explica-o-microsoft-kinetic

Um cientista explica o Microsoft Kinect

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. 

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 oPlaystation 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. 

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. 

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 decâ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 

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 laserinfravermelho.

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. 

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 ficarextremamente 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. 

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 pessoanã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 softwareaprendesse 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 oWindows 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 comforce-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. 

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 pelaAbrams Gentile Entertainment (AGE) e produzida pela Mattel (nos EUA) e pela PAX (no Japão), e não pela Nintendo. Obrigado pelo aviso, Madger! 

Parte 2:
http://blog.vettalabs.com/2010/11/02/um-cientista-explica-o-microsoft-kinect-parte-ii

E curioso que é, fez uma brincadeira, adaptando o Kinect para um jogo de Arcade.

http://muriloq.com/blog/2011/01/kinect-mame-gladiator-taito-1986

Luis Nassif

0 Comentário

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Você pode fazer o Jornal GGN ser cada vez melhor.

Apoie e faça parte desta caminhada para que ele se torne um veículo cada vez mais respeitado e forte.

Seja um apoiador