segunda-feira, 21 de fevereiro de 2011

Desafios de Visão Computacional: Imagens

Atire a primeira pedra quem nunca tirou 500 milhões de foto e correu pra casa pra passar para o computador. E perdeu umas boas horas olhando cada foto a procura de detalhes, caretas, pessoas etc. O ser humano é realmente impressionante em conseguir através da foto reconhecer quem é quem, o que é o que, o que cada coisa representa. (Algumas pessoas ainda têm o dom para isso, certo?)

Só que muitas vezes as pessoas mal sabem que aquela foto linda, no final das contas, é um bando de números que o seu computador interpreta. Pois é. Se pudessemos (e podemos!) ver como o computador "vê" a foto, aquilo deixa de ser bonito. Por exemplo a foto das frutas, abaixo (que eu carinhosamente "roubei" dos exemplos da biblioteca OpenCV, disponível em http://opencv.willowgarage.com/wiki/)




Nós olhamos cores, formas, detalhes. O Computador enxerga números. Simples assim, ou melhor, como assim?
Primeiro, vamos lembrar de um velho (des)conhecido de todos: o Pixel (só por curiosidade, pixel é corruptela de PIcture ELements - ou PIX ELements).

"pixel é o menor pedacinho da imagem"

Pois é. É exatamente isso. Lembra quando você brincava com o Paint Brush, fazia um círculo dava um zoom gigantesco e via aqueles quadradinhos? Pois a idéia é exatamente essa. Essa imagem aí em cima é composta por MUITOS pixels (pixeis em português!!) tão pequenos, que você nem nota. Sua TV de também. As fotos que você tira com o celular também. Quanto menor o pixel, maior a resolução, a grosso modo.

Só que oficialmente, não existe um pixel laranja, como nas frutas ali em cima. Cada pixel tem 3 pontos menores ainda. Um verde, outro vermelho e outro azul. É como misturar tintas. Um pouco de azul + bastante vermelho + quase nada de verde = laranja. Funciona assim pra todas as cores.

Vamos combinar o seguinte:
  • 234R quer dizer "234 partes de 'red', ou vermelho"
  • 1G quer dizer "1 parte de 'green', ou verde"
  • 12B quer dizer "12 partes de 'blue', ou azul".
Por que eu estou dizendo isso? Porque quando o computador olha pra figura assim (e, se o computador olha, nós que trabalhamos com Visão Computacional temos que 'olhar' da mesma forma), ele vê vários numeros assim

200R+12G+100B para o primeiro pixel lá na esquerda em cima, 200R+12G+101B para o próximo pixel e assim vai, fica algo lindo e poético como

200R+12G+100B 200R+12G+101B 200R+12G+100B 200R+12G+99B
200R+15G+90B 100R+100G+87B
201R+100G+60B 200R+12G+99B
220R+75G+80B 160R+101G+86B 221R+44G+170B 200R+12G+99B
150R+65G+88B 178R+123G+57B 243R+15G+166B 200R+12G+99B


Agora você me diz: onde está a laranja aí em cima? (se bem que eu representei 16 pixels entre muitos, a laranja não ia aparecer aí de forma alguma... mas vocês pegaram a idéia, não?!)
É... e pior, esses valores mudam e MUITO com o tipo de luz que se usa na foto. Mudam completamente se a laranja rodar, se aproximar, se deformar...

Por isso, se a sua câmera tiver reconhecimento facial e disparo no sorriso... parabéns, você tem anos de pesquisas dentro da sua câmera!

Taí a coisa mais legal em Visão Computacional. Até a definição mais básica (puxa, uma imagem!!) ainda gera muitos desafios! Pra quem gosta de desafios, é um prato cheio.

Força sempre!

quinta-feira, 17 de fevereiro de 2011

Rubik's cube: algoritmos naturais

Isso não me sai da cabeça, por isso resolvi que essa primeira postagem seria sobre o que eu carinhosamente apelidei de algoritmos naturais.

Eu comprei um Rubik's em uma loja de brinquedos, ontem. Há tempos eu não tentava montar um e até então parecia coisa de outro mundo. Por um lado, eu estava bem excitado com a idéia de abusar da lógica e quebrar a cabeça com o que foi certa vez chamado de o "quebra-cabeças perfeito". Mas por outro, eu fiquei frustrado.

Olhando um pouco pra configuração do "cubo mágico", você claramente vê que ele não passa de uma configuração de algoritmos encadeados. Para mover a peça A da posição (xo,yo,zo) para a posição (x1,y1,z1) existe um algoritmo pontual que não muda a configuração das peças que você já montou. Aí, toda a lógica analítica que se precisa é a de descobrir se a peça X está na posição frontal-superior-direita.

Eu me questiono: será que a vida é um grande emaranhado de algoritmos? Tudo funciona como o Rubik's?

É engraçado pensar nisso enquanto se está desenvolvendo uma aplicação web. Análise de sistemas é exatamente isso: uma série de algoritmos já consagrados, para a maioria das aplicações. Uma frase que eu já ouvi, digamos, uma dezena de vezes enquanto analista de sistemas foi:

"Pra que reinventar a roda?"

Pois é. Aprendi na prática que isso é uma questão de bom-senso. As vezes, reinventar a roda é uma burrice, digamos, quando você tem um problema na mão direita e a solução pronta na mão esquerda. Mesmo aí aprendemos alguma coisa. Aprendemos uma das possíveis soluções para esse problema. Da próxima vez (e quando o tempo nos permitir) podemos pensar um pouco mais e utilizar o conhecimento adquirido para pensar em uma solução melhor, mais adequada.

E tudo o que envolve bom-senso é perigoso. Fiar-se que existe a roda pode nos tolher de uma visão mais ampla. Pode colocar o cabresto e não nos deixar avaliar outras opções. Guiar nossos pensamentos e atitudes para uma abordagem, quando podemos usar outra totalmente diferente.

Quando eu comecei a escrever sobre esse tema, justamente, eu pensava em enveredar para o lado tecnológico. Mas, pensando bem, podemos enveredar para qualquer lado. Sociologicamente também é uma verdade. Psicologicamente também. A identidade da pessoa é formada por um emaranhado de retalhos culturais e sociais. Pessoas influenciáveis são o exemplo vivo disso. (O que vocês acham?!)

Na minha opinião, se for possível em questão de tempo (principalmente tempo, pois tempo ainda é dinheiro), dê-se ao luxo de reinventar a roda toda a vez. Jogue fora o guia de resolução do Rubik's e frustre-se de tanto pensar em soluções para ele. Perca tempo pensando em soluções, por mais tentador que seja olhar a resposta nas últimas páginas. É um exercício de criatividade, de genialidade, por assim dizer. Quem sabe de reinventar a roda não surgem soluções geniais para o problema da fome no mundo? Ou pra uma nova doutrina política menos propensa a corrupção?

Pense nisso.