Um cientista explica o Microsoft Kinect, Parte II

A recepção ao meu primeiro artigo explicando a tecnologia por trás do Kinect, o novo acessório da Microsoft sendo lançado essa semana, foi surpreendente, em vários aspectos. O primeiro foi a enorme quantidade de visitantes, comentários e elogios, o que obviamente me deixou muito feliz…

O segundo aspecto, entretanto, foi mais interessante e inesperado: o diretor de incubação da Microsoft Alex Kipman, responsável pelo desenvolvimento do Kinect (e brasileiro!), leu o artigo! E, para minha surpresa, explicou que eu estava enganado com relação à tecnologia usada para obter os resultados surpreendentes que descrevi no artigo anterior, e me apontou no caminho certo.

A minha primeira reação foi a de ficar com vergonha: afinal de contas dei uma explicação que fazia muito sentido mas que não estava totalmente correta, e para uma audiência enorme. Vergonha ou não, só existe uma alternativa correta nesse caso, que é assumir o engano e corrigir a informação, o que é o que faço hoje. Alguns amigos me consolaram dizendo que qualquer cientista erra, e esse é o único jeito de continuar aprendendo, e concordo com eles! Além do mais, é inegável que ser corrigido pelo próprio Alex Kipman é no mínimo algo bem empolgante!

O que continua valendo?

Expliquei no artigo anterior que a antiga Power Glove, o Wii e o Move retornam informações limitadas, e semelhantes. Todos retornam informação a respeito de um ou dois pontos no espaço; o que muda são os graus de liberdade (DOF, de degrees of freedom) retornados para o ponto. O ideal é que você tenha seis graus de liberdade, ou seja, que o sistema saiba não só a posição espacial do controle (as coordenadas x,y,z do controle) mas também os três ângulos (roll, pitch e yaw) que determinam para onde ele está inclinado. O Move e o Wiimotion Plus retornam isso, o que é bem bacana; a Power Glove, nos 1980s, já retornava x,y,z, yaw e roll, ou seja, 5DOF.

Seis graus de liberdade no Wiimote

Seis graus de liberdade no Wiimote

O problema desses sistemas é que eles se restringem à posição (mesmo que com 6DOF) apenas do controle propriamente dito. O Kinect, por sua vez, entrega informação 3D da cena inteira (ou seja, entrega um mapa de profundidade, como apontou o nic nos comentários do primeiro artigo). A partir desse mapa ele detecta a posição do corpo inteiro da pessoa que está em frente à câmera. Essa é a grande inovação, e a explicação continua valendo! O que muda é como esse mapa é construído, e quem desenvolveu o sensor.

Um conto de duas empresas israelenses

No artigo anterior eu disse que a tecnologia usada no Kinect veio da empresa israelense 3DV, que produzia a ZCam, uma câmera TOF (time-of-flight) que entrega um mapa de profundidade como o que era necessário. A 3DV foi comprada pela Microsoft há algum tempo. Pouco depois foi anunciado o Project Natal, que virou o Kinect, e mais tarde comunicaram que a tecnologia dele era de uma empresa israelense que fazia câmeras 3D

Meu engano foi assumir que a empresa israelense era a 3DV! Na verdade a Microsoft comprou a 3DV, mas com interesse no seu portfólio de patentes. conforme explicado no venturebeat.com. Como eu assumi que a tecnologia usada era a da 3DV, eu expliquei como funcionava a câmera dela, a ZCam, que é uma câmera TOF…

Mas o sensor do Kinect foi desenvolvido pela Microsoft, internamente, numa parceria com uma outra empresa israelense que produzia câmeras que retornam mapas de profundidade, a PrimeSense (foi aqui o Alex Kipman me corrigiu). Essa informação muda completamente a minha hipótese, porque a PrimeSense usa um outro método para detectar a profundidade na cena, baseado em luz estruturada (structured light)! E o Kinect não é idêntico aos produtos da própria PrimeSense, pois o sensor em si foi projetado especificamente para as necessidades da Microsoft.

O sensor de profundidade da PrimeSense

Explicada a confusão, posso explicar como funciona o sensor da PrimeSense. Como disse, o sensor do Kinect não é exatamente o mesmo sensor da PrimeSense, então pode ser que algum detalhe seja diferente do que vai ser descrito aqui, mas o princípio é simples de entender a partir de um pequeno exemplo.

Vamos começar por um projetor comum, como os que são usados em cinema e home theaters, ou mesmo um retroprojetor dos antigos, que usam transparências. Esse projetor é usado para projetar um quadriculado uniforme. Se você coloca o projetor perto da parede, o quadriculado aparece pequeno, com cada quadradinho ocupando pouco espaço. Similarmente, se você projeta numa parede bem distante, os quadrados aparecem enormes.

Se você entra na frente do projetor, o quadriculado é projetado em seu corpo. A parte do quadriculado que acerta você aparece de um tamanho, e a parte que acerta a parede lá no fundo aparece de outro… Ou seja, se você mede, na imagem da câmera, o tamanho de cada quadradinho do quadriculado você sabe, baseado no tamanho dele, a que distância ele está! O quadriculado é luz estruturada, ou seja, luz com uma estrutura bem definida que permite que você descubra informações sobre a cena baseado na forma como essa luz é refletida.

Note que você pode detectar a profundidade não só com o tamanho do quadradinho (esse é só um exemplo didático), mas também observando, por exemplo, como linhas que deveriam ser retas são distorcidas ao serem projetas em superfícies curvas.

Luz estruturada projetada em superfície irregular

Luz estruturada projetada em superfície irregular

Um ponto difícil é que você precisa de uma óptica bem precisa: quanto mais resolução tem o quadriculado, mais exata a sua medida. Para enxergar o quadriculado você precisa de uma câmera de alta resolução, e para medir em tempo real o tamanho de todos os quadradinhos você precisa de hardware e software dedicados, numa arquitetura paralela.

No Kinect o quadriculado é projetado com luz infravermelha, invisível, logo você não percebe. Qualquer câmera digital comum detecta infravermelho: se você filmar com seu celular um controle remoto comum de TV funcionando você consegue enxergar o LED infravermelho dele piscando toda vez que você aperta uma tecla. Isso é uma vantagem enorme, porque isso implica que com uma câmera de infravermelho comum você consegue enxergar o quadriculado! Não é preciso o hardware dedicado caro da 3DV, que descrevi no artigo anterior, em que cada “pixel” tem o equivalente a um cronômetro para medir o tempo de vôo. Provavelmente o custo foi a principal razão por terem escolhido a PrimeSense ao invés da 3DV, aliás.

Mas isso não significa que o Kinect seja simplesmente uma câmera infravermelho comum, porque o processamento em tempo real necessário para extrair o mapa de profundidade a partir da imagem do quadriculado é bem sofisticado. Ele usa um sensor (CCD) comum, mas tem bastante coisa por trás.

Ilustração do design de referência da PrimeSense

Ilustração do design de referência da PrimeSense

Alguns aspectos ainda não estão claros para mim: o padrão exato usado, por exemplo (não precisa ser necessariamente um quadriculado; linhas paralelas podem ser usadas, ou mesmo padrões bem sofisticados que codificam mais informação), a resolução desse padrão (e consequentemente a resolução do mapa de profundidade) e outros detalhes do algoritmo usado. Mas isso não afeta o entendimento de como o processo funciona.

Galantucci, L. M. , Percoco, G. and Dal Maso, U. 'Coded targets and hybrid grids for photogrammetric 3D digitisation of human faces', Virtual and Physical Prototyping, 3:3, 167 - 176

Galantucci, L. M. , Percoco, G. and Dal Maso, U. 'Coded targets and hybrid grids for photogrammetric 3D digitisation of human faces', Virtual and Physical Prototyping, 3:3, 167 - 176

Quem estiver interessado em maiores detalhes pode ler as patentes da Prime Sense, como por exemplo:

Conclusão

O fato do sensor do Kinetic usar luz estruturada desenvolvida em conjunto com a PrimeSense, ou uma câmera TOF da 3DV não muda o meu entusiasmo. O interessante, como já expliquei, é ter um mapa de profundidade em tempo real, de baixíssimo custo. O aprendizado de máquina usado para extrair informações de postura corporal a partir do mapa continua o mesmo, e as muitas aplicações que uma tecnologia assim tem também.

A comparação de preço que fiz com a SwissRanger SR4000 da Mesa Imaging agora não é mais tão justa, já que câmeras TOF são mesmo bem mais caras que câmeras baseadas em luz estruturada. Mas comparar, por exemplo, a resolução do mapa de profundidade e a velocidade com que ele é produzido continua válido.

Uma vez mais, gostaria de agradecer a todos os leitores pela atenção, e de me desculpar com eles pelo engano. Um agradecimento especial, é claro, vai para o leitor mais ilustre, o Alex Kipman, e pela atenção e gentileza dele ao me corrigir. Espero que a leitura tenha sido divertida!

Mundos Virtuais, Processamento de Sinais, Reconhecimento de Faces, Robótica, Visão Computacional 9 Comentários

1 Star2 Stars3 Stars4 Stars5 Stars (6 votes, average: 5,00 out of 5)

Vetta Labs no SBGames 2008

O Vetta Labs é um dos patrocinadores do SBGames 2008, que acontece esta semana, de segunda a quarta, no campus da PUC-MG do Coração Eucarístico, em Belo Horizonte.

Em particular, uma frase bacana no release oficial do evento

O SBGames 2008 conta com o patrocínio da Microsoft, Sony, Vetta Labs, Google e Globo.com e com o apoio do BNDES – Banco Nacional de Desenvolvimento Econômico e Social e da Fapemig – Fundação de Amparo à Pesquisa do Estado de Minas Gerais.

Muito legal dividir um parágrafo com esses nomes aí. ;-)

Além de ter um stand no evento onde as pessoas poderão ver os vídeos de demonstração do Petaverse, os participantes do evento poderão também assistir a diversas e ótimas palestras, desde a do Dr. Ben Goertzel, da Novamente LLC (amanhã, terça, 16:10) até palestras sobre Storytelling com Ido Iurgel (Universidade do Minho, Portugal), uso de jogos na educação com John Nordlinger (Microsoft Research), entre diversos outros.

A programação detalhada do evento você consegue aqui.

Ah sim, e sobre o petaverse, temos mais um vídeo de demonstração no youtube (abaixo) e em alta resolução na dreambroker. O Fido fica cada dia mais esperto ;-)

Inovação, Inteligência Artificial, Mundos Virtuais 0 Comentários

1 Star2 Stars3 Stars4 Stars5 Stars (2 votes, average: 5,00 out of 5)

Nossos cãezinhos virtuais na Virtual Worlds Expo 2008

Já que estamos falando de conferências, semana passada rolou a Virtual Worlds Expo em Los Angeles. Mais de 1300 visitantes e expositores, e a Novamente estava lá, com um stand, mostrando os cãezinhos virtuais que estamos desenvolvendo por aqui.

Nós gravamos alguns vídeos de demonstração dos cachorros. Quatro vídeos estão disponíveis para quem quiser ver:

Desculpem as animações e arte ainda meio toscas, mas até agora o foco do trabalho tem sido mesmo na inteligência dos bichinhos. Nos próximos meses vamos trabalhar também na robustez do sistema e da interface, e vamos postando mais vídeos quando tivermos novidades interessantes!

Inovação, Inteligência Artificial, Mundos Virtuais 5 Comentários

1 Star2 Stars3 Stars4 Stars5 Stars (1 votes, average: 5,00 out of 5)

Google e os Mundos Virtuais

Com o lançamento do Lively, o Google se aventura pela mercado de Mundos Virtuais, ou quase isso. Ao contrário do Second Life, o Lively utiliza o conceito de quartos virtuais (virtual rooms), espaços 3D de dimensões reduzidas se comparadas às de uma ilha do SL.

Google Lively

Os usuários Lively podem criar seu próprios quartos contendo, além de mobília e decoração virtuais (com uma biblioteca interessante e que pode receber contribuições de terceiros), fotos e vídeos vindos diretamente do YouTube, óbvio. O interessante do sistema é a capacidade de embutir tais quartos em páginas WEB normais e assim permitir a qualquer um que esteja navegando pela página o acesso a um ambiente 3D, diretamente no browser (IExplorer 7 e Firefox por hora).

Agora é só esperar o Google abrir a API do Lively (como tem feito com suas outras aplicações) para nós aqui do VettaLabs tornarmos a “brincadeira” ainda mais divertida com nossos cachorros virtuais inteligentes ;-).

Mundos Virtuais, Web 2.0 1 Comentário

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)

Brincando com cachorros virtuais

Bichos de estimação virtuais estão se tornando populares, seja em comunidades na internet, seja como jogos para consoles, como o Nintendogs. Em jogos ou mundos virtuais como esses, os usuários podem comprar bichinhos e “treiná-los” para aprender um conjunto de truques pré-estabelecido. Os cachorrinhos virtuais são divertidos, mas bastante limitados. Eles não aprendem de verdade, uma vez que os truques são animações pré-programadas que são simplesmente “ligadas” pelo jogo. A personalidade dos bichos também não é individualizada, ao contrário de animais de estimação de verdade.

O Vetta Labs está colaborando com a Novamente LLC, uma empresa americana de IA, para desenvolver bichinhos virtuais muito mais inteligentes e interessantes. A New Scientist acaba de publicar uma matéria que discute o Petaverse, nome provisório do projeto. O Petaverse usa tecnologia de Inteligência Artificial Genérica para permitir que os animais virtuais realmente aprendam com seus donos.

Os cachorros podem ser ensinados a buscar e trazer brinquedos, jogar futebol, dançar, guardar a casa virtual do dono e uma infinidade de outros truques. Eles aprendem imitando o dono (um avatar controlado pelo usuário dentro do jogo ou mundo virtual), então a imaginação do dono é o limite para o que pode ser ensinado. Você pode conferir um videozinho do protótipo [Download] / [Youtube]

Os cãezinhos também têm personalidade individualizada: você poderia criar um cão medroso ou agressivo, sociável ou na dele, e assim por diante. E a personalidade determina se o cão vai latir ou fugir na presença de estranhos, quão obediente ele vai ser e assim por diante.

screenshot2.png

O Petaverse ainda está em desenvolvimento e será lançado em alguns mundos virtuais em 2008. Estamos trabalhando com o Second Life e o Multiverse como plataformas iniciais e procurando fundos para desenvolver nosso próprio mundo.

E, por falar nisso, estamos procurando programadores para nos ajudar a desenvolver uma demo de mundo virtual em Flash voltado para crianças, assim como um widget Facebook. Interessada(o)? Entre em contato ;-)

Inteligência Artificial, Mundos Virtuais 9 Comentários

1 Star2 Stars3 Stars4 Stars5 Stars (3 votes, average: 5,00 out of 5)