Mês: setembro 2014

Você conhece o jogo Go?

Go é um jogo de tabuleiro que surgiu na China há mais de 2500 anos e é considerado uma das quatro artes do estudioso chinês, sendo as outras três a música, a caligrafia e a pintura.  Nesse jogo, dois jogadores alternadamente colocam as peças (chamadas pedras)  nas intersecções do tabuleiro. Ganha o jogador que cercar o maior território com suas pedras.

Um dos elementos notáveis do Go é a sua simplicidade. Essencialmente, possui apenas duas regras! Apesar de sua aparente simplicidade, é um jogo que exige muita estratégia. Considerando o tamanho do tabuleiro (19 x 19), o número de jogos possíveis é da ordem de 10^761!!! Bem maior que no xadrez, onde o número de jogos possíveis é da ordem de 10^120.

GoPost2Em 1997, um computador da IBM chamado Deep Blue ganhou do então campeão mundial de xadrez, Garry Kasparov. Dessa forma, muitos acreditam que cientistas da computação serão capazes de criar uma inteligência artificial capaz de ganhar em qualquer jogo. Go, com sua vasta gama de movimentos possíveis a cada turno, continua sendo uma barreira para pesquisadores em inteligência artificial.

Atualmente, existem diversos programas que jogam Go. Mas um em especial entrou pra história: o programa Fuego, criado na Universidade de Alberta, no Canadá, com contribuições de pesquisadores da IBM e outros lugares. Em 22 de agosto de 2009 um computador executando esse programa ganhou, pela primeira vez, de um dos melhores jogadores de Go do mundo. Ainda que tenha sido em um tabuleiro menor do que o oficial, foi um momento histórico. E o mais notável desse programa é que ele não ganhou por possuir mais conhecimento da estratégia do Go, e também não analisava todas as jogadas possíveis a cada turno. Suas decisões eram tomadas com base em escolhas aleatórias e estatística!

Para saber mais sobre como o Fuego foi capaz de ganhar aquele jogo, acesse o artigo completo no site do IEEE Spectrum: http://spectrum.ieee.org/robotics/artificial-intelligence/ais-have-mastered-chess-will-go-be-next

Para saber mais sobre o fantástico jogo Go, confira o link: http://en.wikipedia.org/wiki/Go_(game)#Computers_and_Go

Anúncios

Um bate-papo sobre visão computacional

Como detalhamos em artigo anterior, visão computacional é o conjunto de técnicas que permitem a um computador interpretar uma cena visual. A pergunta é: como um computador consegue enxergar algo?

Quando tiramos uma foto com uma Tekpix (é uma brincadeira, não compre essa câmera), um sensor é responsável em codificar raios luminosos em uma imagem digital, no formato de uma matriz. É como se o computador olhasse para cada pedaço da cena e calculasse, por exemplo, o quão forte as cores vermelha, verde e azul estão em determinado ponto (famoso RGB). Esses números formarão um grande “quadro”, no qual cada unidade é chamada de pixel (picture element), representando o que a câmera enxergou no momento em que a foto foi tirada.

dsa

Representação de imagem em grayscale (escala de cinza). Cada pixel possui a intensidade da cor associada (0 representa preto enquanto 255, branco).

A visão computacional, portanto, lida com algoritmos que, a partir das informações de cor e intensidade dos pixels, consiga extrair informações valiosas da cena em questão. Claramente, essa é uma tarefa extremamente complexa e abrangente, tendo assuntos em comum com várias outras áreas do conhecimento, tal como inteligência artificial, aprendizado estatístico de máquinas (machine learning), processamento de sinais, robótica, estatística, física, matemática, entre outros.

Pode-se definir quatro grandes sub-áreas da visão computacional:

  • Restauração de imagens: visa a remoção de ruídos de uma imagem, como ruídos de sensor, borrões, movimentações etc. É essa área a responsável por salvar a sua foto quando você mexe a câmera na hora H, ou até mesmo restaurar fotos que estejam danificadas.
Foto restaurada utilizando a técnica de inpainting

Foto restaurada utilizando a técnica de inpainting

  • Reconstrução de cenas: busca, a partir de um conjunto de imagens, reconstruir um modelo 3D da cena podendo, inclusive, incorporar informações de cor de textura.
Modelo 3D do Coliseu construído a partir de fotos da internet

Modelo 3D do Coliseu construído a partir de fotos da internet

  • Análise de movimento: possui diversas tarefas, como determinar o tipo de movimentação que ocorreu entre duas ou mais imagens (translação e rotação), rastrear o movimento de objetos (tracking) e calcular o fluxo ótico, isto é, como cada ponto moveu-se entre duas imagens.
Cabeça, mãos e pés sendo rastreados a cada imagem

Cabeça, mãos e pés sendo rastreados a cada imagem

  • Reconhecimento: a sub-área clássica da visão computacional, responsável identificar objetos ou atividades em uma cena, por exemplo, contar a quantidade de pessoas presentes na imagem ou detectar um possível assalto.
Reconhecimento de objetos (pessoa e bicicleta) e de cena (pessoa montada na bicicleta)

Reconhecimento de objetos (pessoa e bicicleta) e de cena (pessoa montada na bicicleta)

Visão computacional é tão complexa que, mesmo após décadas de intensa pesquisa na área, não há algoritmo que consiga interpretar imagens de maneira natural, tal qual pessoas são capazes.

Por essa razão, são muito animadores os resultados dessa pesquisa realizada pela Google. Utilizando técnicas avançadas de sistemas distribuídos e redes neurais, a equipe da Google desenvolveu um algoritmo significativamente superior aos mais atuais e venceu a ILSVRC desse ano, uma competição voltada para visão computacional. O algoritmo conseguiu, inclusive, identificar objetos pequenos e difíceis de reconhecer.

Resultados do algoritmo desenvolvido pela Google

Resultados do algoritmo desenvolvido pela Google

Na UnBall, utilizamos algoritmos de visão computacional para identificar bola, campo e robôs, além de realizar o rastreamento de tais objetos e reconhecer o estado atual do jogo.

Gostou de aprender um pouco mais sobre visão computacional? Fique ligado nos próximos posts da equipe UnBall.