5 passos da Visão Computacional

Visão Computacional

Permita que o computador enxergue

transformando a imagem em um conjunto de numeros

Com o crescimento do poder da computação nos dias de hoje, e o entendimento cada vez maior das possibilidades do uso da Inteligência Artificial nas empresas, listei os 5 passos para Visão Computacional, que é uma das áreas de maior percepção do uso da IA. Não porque está em evidência, mas porque é próxima ao comportamento humano, assim como a questão de interpretação de linguagem natural. Com isso, as pessoas conseguem ter uma percepção melhor da Inteligência Artificial na resolução de problemas.

As técnicas de Visão Computacional procuram simular a visão natural, seja de um humano ou de um outro animal. O mais comum é simular a visão humana, com aplicações em projetos de reconhecimento de objetos em cena, análise de sentimentos em faces, reconhecimento de faces, entre outros. A análise de vídeo também entra nesta categoria, pois os vídeos são uma sequência de várias fotos passadas uma após a outra em um conjunto muito pequeno de tempo.

Recomendo a leitura do livro A Revolução do Aprendizado Profundo, para ter uma ideia mais ampla do uso das soluções de Deep Learning, além da Visão Computacional.

 

5 passos da Visão Computacional

Amostras de imagens

Como todo sistema de Machine Learning, o seu projeto de Visão Computacional deve saber o que procurar na imagem. Para isso, ele precisa ser ensinado! Existem muitas bases de dados de imagens que são possíveis de se utilizar para ensinar a máquina. Algumas são bastante famosas, como por exemplo a Imagenet. Outras mais específicas para um domínio de assunto, como o SDO – Solar Dynamics Observatory.

É importante definir como você pretende ensinar a máquina, e apresentar os exemplos reais que quer buscar e também os contra-exemplos. Esta necessidade é justamente para ensinar a máquina a encontrar os padrões do que realmente quer encontrar e divergir do que é parecido mas não é o que precisa. Imagine que está ensinando a máquina a reconhecer ovelhas que estão prontas para ter a lã retirada. É importante ter uma grande quantidade (e esse numero diverge bastante na literatura, então é difícil dizer uma quantidade mínima de amostras) de ovelhas, mas também apresentar diversas imagens de nuvens no céu para que sirvam de contra-exemplos.

 

Redimensionar os tamanhos

Para facilitar a aprendizagem de máquina, é interessante que todas as imagens trabalhadas sigam um padrão de tamanho. Isso porque quanto maior for a imagem, mais detalhes e informação ela pode conter. Pense em uma imagem como uma matriz de números, onde cada pixel da imagem é um conjunto combinado de cores. Em uma imagem de 500 pixels de largura por 500 pixels de altura, existe no total 250.000 pixels naquela matriz. É bastante coisa, não é?! Agora imagine que as imagens sejam de tamanhos variados, algumas contendo 2000 x 2000 pixels de tamanho. São 4 milhões de pontos, isso só em uma imagem.

Redimensionar as imagens, para manter um padrão de tamanho aceitável é importante. Assim pode-se diminuir o processamento, mas sem perder a qualidade da imagem.

 

Aplicar os filtros

Lembra da imagem de 500×500 que comentei acima, agora aprofunde esse número para que cada um destes 250 mil pontos sejam representados por uma combinação de três canais de cores. O R representa a cor vermelha (Red), o G representa a cor verde (Green) e o B representa a cor azul (Blue). Imagine o tanto de processamento que é necessário para trabalhar com uma imagem desta, em todos os seus pixels e cores RGB. Com o objetivo de salvar um pouco de processamento mas sem perder qualidade da resposta, alguns filtros podem ser aplicados.

Uma técnica bastante utilizada é de transformar tudo em tons de cinza. Com isso, ao invés de ter a profundidade de 3 camadas de cores do RGB, é só uma camada que varia entre o preto e o branco, com um intervalo de 255 possibilidades sendo o valor 0 o preto absoluto e o valor 255 o branco absoluto. Todo o intervalo é um degradê saindo do preto e chegando ao branco, passando por vários tons de cinza. Se seu problema não precisa de cores, essa técnica pode ajudar.

Outra técnica que pode estender esse processamento, é a binarização para valores de branco e preto. É possível definir um valor de corte, que seria o tom de cinza escolhido. Com isso, qualquer valor de cor do pixel é comparado com esse numero de corte. Se o valor do pixel for inferior ao corte, ele passará a ser preto, se o valor for superior ao de corte, ele passará a ser branco. Isso transforma a imagem exclusivamente em preto e branco.

Filtro de bordas podem ser utilizados para dar realce à áreas de interpolação de objetos, destacando os objetos de acordo com a variação dos pixels à sua volta.

 

Limpar os ruídos

Mesmo após aplicar os filtros para deixar as imagens mais fáceis de se trabalhar, é possível aplicar mais alguns filtros que ajudarão a tirar algumas impurezas da imagem. Estas impurezas são chamadas de ruído e não trazem benefícios reais.

Talvez um dos mais comuns seja o processo de convolução de imagem. Que por padrão faz uma média aritmética dos valores dos pixels à sua volta, e substitui o valor daquele pixel caso ele esteja fora do valor da média com o acréscimo de um desvio padrão.

Para ilustrar, mas sem ficar muito complexo, imagine que foi definido um valor de 9 pixels para acontecer a convolução da imagem. Este processo faz uma segmentação em janela com 3×3 pixels, totalizando os 9 definidos. É analisado o pixel central, comparado com o valor da média aritmética de todos os outros 8 pixels à sua volta, incluindo os diagonais. Então o valor do pixel é comparado com o resultado do calculo acrescido do desvio padrão definido. Se o valor estiver fora daquele intervalo, então o algoritmo fará a substituição do valor do pixel pelo novo valor. E andará a janela de 9 pixels para a próxima combinação de valores. Seguirá fazendo isso até o fim da imagem. Com todas as imagens.

 

Treinar o modelo

Depois de padronizar e limpar todas as imagens, é necessário criar o modelo que fará o reconhecimento do objeto que você deseja. Existem muitas bibliotecas e frameworks disponíveis para você utilizar em seus projetos. Uma das bibliotecas mais famosas é o OpenCV, que é da Intel e tem distribuição gratuita. Um framework bastante utilizado para treinar a máquina a reconhecer objetos em tempo real é o Yolo – You Only Look Once. Mas será que vale fazer meu modelo do zero ou usar um framework já pronto? Na minha visão, a resposta é depende. Isso porque cada caso é um caso, e se você precisa de algo muito rápido para testar, usar as ferramentas prontas que permitem ajuste é uma boa saída. Contudo, se você precisa de algo muito específico, ai provavelmente terá que fazer do zero.

 

Acredito que com essa leitura você terá entendido os 5 passos da Visão Computacional, e poderá adicionar a habilidade humana de enxergar aos seus projetos. Agora é estudar as formas de fazer isso, e colocar a mão na massa!

Sobre Diego Nogare 346 Artigos
Diego Nogare é Gerente Técnico de Engenharia de Machine Learning no Itaú-Unibanco. Também é professor em programas de pós graduação no Mackenzie e na FIAP, em São Paulo. Foi nomeado como Microsoft MVP por 11 anos seguidos, e hoje faz parte do programa Microsoft Regional Director.