Interatividade nas futuras aplicações e o Leap Motion

O teclado e o mouse são duas das maneiras mais antigas de se comunicar com um computador pessoal, junto com controles estilo vídeo game. Será que essas são as melhores maneiras para entrada e saída, além de manusear informações em um computador?

leap-motion

Nos últimos tempos, novas ferramentas surgiram que permitem trabalhar com o computador de outra maneira, muito além do número finito de entradas de um teclado ou dos atalhos de movimentos em uma tela touchscreen 2d. Uma delas é o Leap Motion, pequeno o suficiente para ser embutido em notebooks, que já está disponível.

Utilizando um leitor de infravermelho, o Leap cria na memória um mapa 3d do espaço próximo ao seu redor, sendo capaz de detectar mãos e dedos. Note que ele funciona de maneira diferente do Kinect, que consegue analisar a posição de corpos, mas em geral não de maneira tão fina quanto o Leap faz com os dedos.

Sua API é extremamente simples de usar, e criamos uma implementação de um dos jogos de mão mais popular do Brasil: o (como escreve) Jankenpo. A regra é simples, a cada rodada cada um dos dois jogadores escolhe uma de três opções: 2 dedos abertos para tesoura, mão fechada para pedra e mão aberta para papel. Papel ganha de pedra (embrulha), pedra ganha da tesoura (quebra) e tesoura ganha do papel (corta).

Para implementar o Jankenpo basta instanciar um controller do leap em nosso código:

Controller controller = new Controller();

E uma das maneiras de trabalhar com ele é registrar um listener, que será notificado de cada mudança de informação do sensor do Leap:

controller.addListener(new JankenpoListener());

O JoKenPoListener herda de com.leapmotion.leap.Listener e sobrescreve um único método:

public void onFrame(Controller controller) {
}

Pronto! Agora basta descobrirmos quantos dedos estão visíveis na mão do usuário. Para isso, acessamos a lista de mãos visíveis:

Frame frame = controller.frame();
HandList maos = frame.hands();

Repare que podemos ter 0, 1, 2 ou mais mãos visíveis a qualquer instante. Se nenhuma mão estiver visível, ou se o usuário mostrar mais de uma mão, vamos considerar que ele não escolheu nada, e retornar:

if(maos.count() != 1) return;

Depois vamos acessar esta mão:

Hand primeiraMao = frame.hands().get(0);

E agora perguntar quantos dedos estão a mostra:

FingerList dedos = primeiraMao.fingers();
int dedosAMostra = dedos.count();

Com o número de dedos a mostra, sabemos dizer se o usuário está fazendo uma tesoura, papel ou pedra:

if(dedosAMostra==0) selecao = "PEDRA";
else if(dedosAMostra==2) selecao = "TESOURA";
else if(dedosAMostra==5) selecao = "PAPEL";

Temos que cuidar dos outros casos, onde uma mão pode ter 1, 3, 4 ou mais de 6 dedos visíveis. No meu caso, vou lidar com 0 ou 1 dedos como sendo pedra, 2 tesoura e 3 ou mais papel:

if(dedosAMostra < 2) selecao = "PEDRA";
else if(dedosAMostra == 2) selecao = "TESOURA";
else selecao = "PAPEL";

Pronto! Basta ligar o LEAP e ver o resultado! Você pode ver uma aplicação swing com o código acima rodando no vídeo a seguir, e o código fonte se encontra aqui.

Mas a API vai muito além de contar quantos dedos estão visíveis, ela pode nos dizer a posição de cada dedo no espaço 3d, e para que ponto estamos apontando, permitindo interagir com objetos. Ela indica o raio da palma da mão, para saber a abertura da mesma, além de também nos notificar de movimentos específicos, como quando o usuário faz um círculo com um dedo.

Agora que você já viu como é fácil trabalhar com o LEAP, dê uma olhada em como é viajar pela terra com o Google Earth usando o aparelho – Minority Report?

A biblioteca do LEAP para Java é um único jar que deve ser incluído que faz a comunicação com os arquivos .dylib em um sistema operacional OSX (a api java para windows e linux é a mesma, mas as bibliotecas de baixo nível que acessamos indiretamente podem variar). E você, o que gostaria de implementar com o LEAP?

Tags:

12 Comentários

  1. James Daniel 06/09/2013 at 08:02 #

    Excelente post! Mas não encontrei o link para o código fonte 🙁

  2. Guilherme Silveira 06/09/2013 at 09:56 #

    Tudo bem James?

    É um código rascunho, que suporta um player ou 2 players, bem simples e feio, mas funcional: https://github.com/guilhermesilveira/jankenpo-leapmotion/blob/master/src/main/java/br/com/caelum/jokenpo/JoKenPoMulti.java

    O projeto:
    https://github.com/guilhermesilveira/jankenpo-leapmotion

    Abraço!

  3. Pedro 07/09/2013 at 21:26 #

    Cara, simplesmente incrível isso!

  4. bruno valente 08/09/2013 at 19:01 #

    Guilherme, vc já está com o Motionm?
    eu tô querendo fazer um grupo brasileiro de desenvolvedores.
    Eu vi no Fórum deles e estou tentando reunir o pessoal
    Eu sou do Rio.
    VC e de onde?
    Abraços
    Bruno Valente

  5. Guilherme Silveira 10/09/2013 at 14:47 #

    Obrigado Pedro! Legal Bruno, a Caelum está em SP, Rio e BSB mas estou em SP.

    Abraço!

  6. Andre Vasconcelos 11/09/2013 at 17:37 #

    Muito interessante. Pena que ainda não tenho um Leap Motion para testar.

  7. Arthur 12/09/2013 at 15:47 #

    Vou providenciar o meu, o mais rápido possível, para começar os trabalhos ..

  8. Henrique S. 24/09/2013 at 11:31 #

    Meu caro… sensacional!!! Dei uma olhada no site está $79,99, muito interessante! Parabéns pelo artigo!

  9. Gabriel Moreira 07/11/2013 at 09:33 #

    Olá pessoal,

    Tenho explorado e desenvolvido há um ano apps utilizando sensores como Leap Motion, Kinect e Creative Senz3D / Intel Perceptual SDK.
    Depois de alguns meses de trabalho, consegui aprovar o game GeoCrazy na AirSpace (market place da Leap): geocrazy.net

    Estou iniciando a comunidade NUI Brazil, para trocarmos informações, notícias e código sobre Natural User Interfaces em nossa língua.
    Todos estão mais do que convidados!

    Seguem os links do blog e do grupo no Face.
    Nos ajude a desenvolver a comunidade brasileira de NUI!

    http://nuibrazil.com
    http://www.facebook.com/groups/nuibrazil/

  10. Willian Martins Vival 18/11/2013 at 23:38 #

    Que interesante mesmo, ja tem apis todas.. so faltou pra mim o aparelho:? quantos custa… eu acabei de ver isto
    data 18/11/2013

  11. Guilherme Silveira 19/11/2013 at 09:25 #

    Tudo bem William?

    O aparelho chama leap motion e o preço está no site deles. Quando comprei foi setenta e nove dólares

    Abraço

  12. Jefferson 18/11/2015 at 08:37 #

    Bom dia. Você desenvolveu mais alguma aplicação usando o leap motion?

Deixe uma resposta