Como é bom usar IA (Inteligência Artificial)

Porque é bom usar IA? Simples, é maravilhoso quando um algoritmo “aprende” sobre algum problema muitas vezes complexo e consegue simplifica-lo garantindo uma resposta quase sempre correta. 😉 E as vezes, o “quase sempre correto” basta. Win win situation né?

No video abaixo vocês podem conferir uma aplicação onde o celular descobre em qual cômodo da casa ele está. Devem existir N jeitos, provavelmente complexos, de se fazer isso. Eu fiz utilizando um classificador Naive Bayes, resgatado das aulas de IA, e obtive resultados úteis sem esquentar a cuca com o problema. 😉 Feitiçaria?! Não, é IA mesmo! #tumDumTss

Antes de mais nada, é preciso entender por que raios eu preciso saber em qual cômodo da casa estou. Para isso, volto a um post e vídeo de alguns anos atrás, com a interface que meu amigo Fabio Freire criou para controlar meu sistema de automação. Link -> http://wp.me/p1pSXR-1j Se você viu o vídeo, percebeu, que eram necessários vários “cliques” para controlar alguma coisa, primeiro você seleciona o cômodo, depois procura o dispositivo para então controla-lo. Steve Jobs olharia esse sistema com desprezo e argumentaria “amigo, até você achar a luz, eu já levantei e desliguei no interruptor”. Realmente, um dos fatores para a automação não ir pra frente é por causa da interface de uso.

Eu venho tentando brincar com essa interface. Brinquei um pouco com o controle por voz (através do sistema do google e celular android -> http://youtu.be/3yVISD_Qj_M ). Já brinquei com o Kinect, interagindo com os dispositivos por gestos (http://wp.me/p1pSXR-2I). E agora, a ideia é simplificar o uso no celular.

Utilizando o giroscópio e bússola dos smartphones, é possível para onde o usuário está apontando. Dentro da minha sala de TV, por exemplo, posso simplificar a sala em norte, sul, leste, oeste e teto (para luz). Vamos dizer que se eu apontar meu celular para o norte, estarei apontando para minha TV e Receiver. Logo, seguindo essa ideia, o usuário não precisa mais navegar até a sala de TV, seleciona-la, para depois selecionar a TV, e ai então enviar um comando. Ele só precisa apontar o celular para a TV, que vai mostrar o dispositivo e os comandos disponíveis. Bem mais simples, intuitivo e rápido. É quase um controle universal que muda o contexto dependendo para onde você aponta.

E é nesse ponto que entra a Inteligência Artificial. Para toda essa ideia mirabolante dar certo, eu preciso saber em qual cômodo da casa a pessoa (com seu celular) está. Primeiro, pensei em soldar um emissor de sinal bluetooth e distribuir pela casa, e o celular só precisava dar um bind para saber em qual cômodo estava. Uma solução cara, não é 100% efetiva (pq o alcance do bluetooth podia gerar áreas não cobertas) e demandaria que o celular deixasse o bluetooth sempre ligado. Vi alguns papers sobre triangularizaçào de sinal wifi mas fiquei com preguiça de entender como isso funcionava (parecia meio complicado, uns cálculos matemáticos loucos. Não valia o custo beneficio para uma feature de hobby).

Dai lembrei de um trabalho que fiz na faculdade, que era treinar um classificador para determinar qual era a categoria de um carro baseado em suas características usando o WEKA (http://pt.wikipedia.org/wiki/Weka). Pensei que talvez usando a força dos sinais das redes wifi de cada cômodo, um classificador pudesse me responder onde eu estava. Não deve ser nada inédito, nem efetivo em todos os casos, mas valia a tentativa, já que o Weka implementa vários classificadores e seria bem simples testar a ideia.

Codifiquei então um programa pra Android no qual eu informava em que cômodo eu estava e ele ficava gravando as redes e potencia de redes a cada 5 segundos em um arquivo. Sai que nem um ghostbuster, com o celular na mão, passeando pelos cômodos e “capturando” o sinal. Com o arquivo em mãos, fiz um programinha que transformava os dados em .arff (bem simples), que é o formato que o Weka lê. Com isso, já dava para testar vários algoritmos de classificação. Lembrava de alguns, o NBTree se não me engano foi o que usamos no trabalho dos carros, o MultiLayerPerception pelo que lembro é de redes neurais. No fim, usei o Naive Bayes que mostrou ter um bom resultado pra mim, cerca de 90% de acerto. Parecia que ia dar certo.

Por fim, usei o WEKA programaticamente para pegar as informações que o celular mandava direto no servidor e devolver a classificação. Segui o exemplo daqui: http://weka.wikispaces.com/Programmatic+Use No celular, coloquei algumas heurísticas para potencializar o resultado, como por exemplo, perguntar ao servidor 10 vezes e só aceitar o resultado se for o mesmo em 7 das chamadas (70% de acerto de classificação). Além disso, para lidar com mudanças na malha de redes wifi da vizinhança, caso o celular faça 50 chamadas com o mesmo resultado, ele pergunta se quer que envie essas 50 chamadas para o servidor para treinar melhor o classificador. No vídeo do inicio do post dá pra ver que aparentemente deu certo e abaixo é possível ver o funcionamento em mais detalhadamente:

O que eu acho mais legal nisso tudo é como uma ferramenta de uma área bem especifica da computação me ajudou a resolver um problema potencialmente complexo, sem que eu me perdesse muito na teoria por trás da classificação (reinventando a roda) muito menos em um algoritmo infalível que faria cálculos complexos para me retornar com certeza onde eu estava, sendo que para mim, uma aproximação já era o suficiente. Óbvio que me falta base teórica para afirmar se realmente usar um classificador é uma solução plausível para o problema, ou qual o melhor classificador para usar nesse problema, mas enfim, se funcionar somente em casa eu já estou bem feliz.

Se você se interessou pelo WEKA, é fácil começar a explorar as possibilidades do software para mineração de dados. O próprio site tem vários dados de exemplo (http://www.cs.waikato.ac.nz/ml/weka/datasets.html no primeiro jar tem os dados de carros que usei na faculdade) e a interface do programa é até certo ponto intuitiva, mas existe na net vários vídeos tutorias explicando a teoria e o funcionamento (por exemplo: http://www.youtube.com/watch?v=UzT4W1tOKD4). E existem exemplos bem funcionais do uso de classificadores na web, como esse tutorial para classificar automaticamente tweets utilizando a coleção de algoritmos mineradores da apache, o mahout (http://chimpler.wordpress.com/2013/03/13/using-the-mahout-naive-bayes-classifier-to-automatically-classify-twitter-messages/)

Espero que a descrição dos passos possa ser útil para alguém que queira usar a mesma ideia para resolver problemas semelhantes. Espero logo logo postar o resultado quando integrar com meu sistema de automação.

Anúncios

1 comentário

Arquivado em Uncategorized

Uma resposta para “Como é bom usar IA (Inteligência Artificial)

  1. Kely - Esposa Carlos Pomai

    Fábio, você já pensou em automatizar um chuveiro? Ou melhor, em colocar um sensor de presença no chuveiro com o intuito de poupar o consumo de água?

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

w

Conectando a %s