O que é Visão Computacional, quais os principais tipos de aplicação, o que você precisa aprender e referências para guiar seus estudos

Antes de te contar o caminho (ou um dos caminhos) que você pode seguir, eu gostaria de te explicar o que é Visão Computacional. Se você pesquisar no Google “visão computacional” ou “computer vision”, e for para a Aba “Imagens” você vai encontrar diversas imagens com um olho e um fundo que lembra código/programação. 

Olhando para essa imagem (e para tantas no Google) o que você imagina que seja visão computacional? Se você pensou que é uma área onde as desenvolvedoras conseguem fazer programas que enxergam, então você está indo pelo caminho certo. Mas se você acha que essa imagem significa que estamos sendo vigiadas por computadores, você também acertou (hehe)

Então podemos dizer que sim, visão computacional é uma área da inteligência artificial focada em detectar e extrair informações a partir de imagens e vídeos. Sendo essa capacidade de detectar e extrair informação, comparada com a capacidade humana de enxergar (não só apenas ver). A partir dessas informações extraídas de uma cena (é como chamamos a fonte de informação, a imagem ou um vídeo) conseguimos automatizar atividades repetitivas que realizamos, prevenir acidentes, detectar sentimentos ou até mesmo diferenciar um muffin de um cachorro. 

Mas como os computadores podem enxergar?

imagem composta por um círculo no meio, de cor azul, escrito em laranja "visão computacional", rodeado de outros círculos de cor roxa e de cor rosa, com texto em cor branca, como "processamento de imagens", "inteligência artificial", "processamento de sinais", "matemática", "física", e "reconhecimento de padrões"

Fonte: imagem elaborada pela autora.

Olhando por cima, bem por cima, podemos falar que a visão computacional surgiu a partir da intersecção de algumas áreas de conhecimento. E, sendo mais generalista, consigo afirmar que foram duas principais áreas: a matemática, com a física e processamento de sinais, e a segunda, a computação, com a inteligência artificial, reconhecimento de padrões e processamento de imagens.

Antes que você comece a pensar que visão computacional não é algo para você, que vai ser preciso aprender vários conceitos profundos de matemática e computação (o que é o bendito processamento de sinais, não é mesmo?!). Relaxe!! Olhe novamente para a figura de cima. Nela você vai ver que nenhuma das áreas que mencionei estão completamente dentro da visão computacional. Resumindo… não precisamos nos tornar super especialistas em física, processamento de sinais ou matemática.

O que podemos fazer com a Visão Computacional?

Eu queria poder falar sobre todas as aplicações que a visão computacional tem e pode ter na nossa sociedade, mas eu acabaria passando o dia todo nisso, você ia acabar ficando de saco cheio (hehe). Então, só para te animar um pouco, segue uma breve lista do que podemos fazer.

  1. Classificação de Imagem (ou Image Classification):
imagem com vários números de 1 a 9 de formatos diferentes, que parecem ter sido escritas à mão

Exemplo de dígitos escritos à mão presentes na base MNIST. Fonte: Ten samples for each digit in the MNIST dataset

O problema mais popular de classificação na área de visão computacional é o problema de classificação de dígitos. Nesse problema é esperado receber uma imagem de um dígito escrito a mão e retornar qual o número escrito nessa imagem. Parece simples, né? A gente consegue fazer isso em menos de 1 segundo, mas para o computador é um problema muito desafiador, “não só porque é difícil fazer computadores executarem um cálculo matemático que reproduza a visão humana, mas porque não estamos inteiramente certos de como o processo da visão realmente funciona”, como diz o artigo “O que é Visão Computacional”.

A classificação não fica restrita apenas à números, pois nós humanos fazemos classificação de objetos a todo momento e também queremos que o computador faça para nós. Imagina que legal: você passar uma imagem e o seu programa te disser do que é a imagem? Isso é possível com a visão computacional!

imagem com uma coluna de palavras em inglês (avião, automóvel, pássaro, gato, veado, cachorro, sapo, cavalo, navio, caminhão) ao lado de várias colunas com figuras representando cada uma delas.

Avião, automóvel, pássaro, gato, veado, cachorro, sapo, cavalo, navio, caminhão. Exemplo de imagens presentes na base CIFAR-10. Fonte: Training MXNet – part 2: CIFAR-10.

2. Detecção de Objetos (ou Object Detection):

A detecção de objetos é considerada um avanço da classificação de imagens. Nela consideramos que a imagem possuirá mais de um objeto e gostaríamos de detectar todos os objetos ou um objeto específico na imagem.

Na imagem abaixo podemos ver vários resultados de detecção de objetos, tanto em espaços fechados e controlados (foto de comida), quanto em ambientes abertos com variação de luz (foto da praia). Também notamos que é possível detectar mais de um objeto na imagem, estando esses objetos contidos ou não, próximos ou não.

imagem composta por várias figuras com detecção de objetos: pessoas sentadas na grama, avião em movimento no chão, pessoas numa rua, fachada de um prédio com relógio, pessoa saltando com esqui, relógio de um prédio, cama de um quarto, pizzas em uma mesa, girafas na natureza, prato com comida, pessoa surfando na praia, ônibus na rua, ursos de pelúcia, quadros na casa, pias em banheiro público.

Exemplo de resultados de detecção de objetos utilizando o modelo R-CNN na base MS COCO. Fonte: 9 Applications of Deep Learning for Computer Vision.

3. Segmentação de Objetos (ou Object Segmentation):

A segmentação de objetos propõe ser mais robusta do que a classificação e a detecção. Na segmentação é esperado que os objetos da imagem sejam detectados com mais precisão, no caso, deixamos de utilizar caixas retangulares ao redor do objeto e passamos a considerar a borda deles. 

Imagem composta por figuras de pessoas e objetos identificados por cores diferentes.

Exemplo de resultados de segmentação de objetos utilizando a base COCO e utilizando o modelo Mask R-CNN. Fonte: 9 Applications of Deep Learning for Computer Vision

4. Transferência de Estilo (ou Image Style Transfer):

Você já deve ter visto transferência de estilo na internet, mas caso você ainda não tenha visto nada dessa técnica, ela consiste de aprender o estilo presente em um fotografia e transferir para uma outra. O exemplo mais conhecido é o da figura abaixo, nela transferimos a ambientação de uma pintura para uma qualquer.

imagens de várias pinturas famosas, como Noite Estrelada de Van Gogh, e O Grito de Edvard Munch, e figuras feitas à derivação dos quadros, com padrões de cores e direções.

Exemplo de resultados mostrados no trabalho “A Neural Algorithm of Artistic Style”. Fonte: 9 Applications of Deep Learning for Computer Vision

Mas lembre-se: a transferência de estilo não está apenas restrita para casos de pinturas famosas. Ela pode ser utilizada também para iluminação e coloração.

A partir dessas e de outras aplicações da área de visão computacional, vemos setores como de medicina (para exames de imagem), monitoramento e segurança, robótica, mobilidade e carros autônomos, entre outros desenvolvendo produtos e soluções com essa tecnologia!

O que preciso saber para seguir nessa área?

Como falei, a gente não precisa ter uma base tão profunda de matemática, física e afins, somos da área de computação e não matemáticas (hehe). Mas, mesmo não nos aprofundando nessas áreas, ainda temos muito o que estudar. E, como tudo que é novo em nossas vidas, levaremos um tempo até dominamos e nos sentimos confortáveis. 

Para te guiar  nessa jornada proponho um caminho que você pode seguir. Lembrando que é baseado na minha vivência e no que venho acompanhando na área.

Conceitos que precisa estudar:

  1. Você vai precisar desenvolver uma base de álgebra linear, cálculo, probabilidade e estatística. Pois, esses conceitos são a base para entender mais facilmente a área de redes neurais  que virá a seguir. 
  2. Entender a área de processamento digital de imagem, que diferente da visão computacional, o foco principal é na imagem e na álgebra linear (para saber mais veja o livro Processamento Digital de Imagens, Gonzalez e Woods). Os fundamentos dessa área te permitirão entender o que é uma imagem, características que compõe ela e operações que podemos realizar. 
  3. Entender conceitos da área de inteligência artificial. Ter uma base forte de IA, te possibilitará entender mais na frente o que é aprendizado profundo (Deep Learning) e como ele funciona.
  4. Aprender os conceitos de visão computacional, com isso, você aprenderá mais sobre o funcionamento de câmeras, iluminação, algoritmos de otimização e outros conceitos. Você notará que alguns fundamentos estão muito relacionados com o processamento digital de imagem
  5. Momento de se aprofundar mais na área, aprenda o famoso deep learning! As melhores soluções alcançadas na área de visão computacional foram atingidas com redes de aprendizado profundo (o tal do Deep Learning), que levaram a área para outro patamar – agora o tempo de aprendizado leva no máximo algumas semanas e não mais meses! Então, se você quiser atingir resultados bons você precisará de um modelo robusto.

Tecnologias que precisa estudar:

  1. As linguagens mais utilizadas na área são o Python e o C++, ambas possuem uma quantidade relativamente grande de material para estudo. Mas destaco aqui o Python que nos últimos anos vem dominando o espaço e sendo a queridinha de muitos blogs famosos (que recomendo logo mais).
  2. Bibliotecas como PIL (apenas em Python) e as OpenCV, DLib (ambas em Python e C++) serão essenciais para te ajudar no desenvolvimento e nos estudos. Essas são bibliotecas especializadas em visão computacional e processamento de imagem.
  3. Para trabalhar com Deep Learning e aprendizado de máquina (Machine Learning), você precisará de algumas outras bibliotecas mais especializadas, elas te ajudarão na hora de criar e utilizar modelos de aprendizado. Atualmente existem diversas bibliotecas, e, diferente das bibliotecas de visão computacional, essas você não precisa aprender todas, uma ou duas será suficiente para você. Os principais Open Source são: TensorFlow, PyTorch, Keras. Vale lembrar que elas são abertas e gratuitas, e existem vários tutoriais para aprender os primeiros passos com elas!

Por onde aprender?

Estudo na área de visão computacional e processamento de imagem desde 2016, e infelizmente, não encontro muitos conteúdos bons em português. Por isso irei indicar fontes em inglês e que possuem uma linguagem acessível. 

Material em vídeo:

Material em texto:

Como começar a trabalhar com Visão Computacional

Depois de tudo isso sobre o que é Visão Computacional, onde é aplicada e como estudar, acabei não falando sobre o mercado. Porque o salário não deverá ser o principal fator que te levará a estudar essa área, na minha opinião. Passei dois anos pesquisando na área, porque queria oferecer uma solução que automatizasse a contagem de cromossomos em um laboratório em Recife, cidade que eu moro. E eu fiz isso porque me interessava, via uma utilidade e era desafiador. Seguir o caminho do dinheiro, quando não gostamos do que estamos fazendo, torna-se mais custoso para nós. 

Quero que você se lembre disso, pois seguir o caminho da visão computacional será longo e te exigirá dedicação. Como você pode ter notado, será preciso estudar diversos conceitos, alguns mais complexos que outros, isso demanda tempo, mas não é impossível! Além disso, com a ajuda da internet e das fontes que indiquei, você não precisará estar cursando uma graduação de ciência da computação, ou engenharia da computação para aprender os conceitos necessários. 

Enfim, depois de tanta enrolação… e o mercado de trabalho? No Brasil, ainda é escasso as ofertas de emprego na área de visão computacional e inteligência artificial, e principalmente de boas ofertas. Restando assim para nós trabalhos remotos (ou presenciais) em empresas da Europa, EUA e Canadá, onde o mercado é bem variado, oferecendo oportunidades em diversos segmentos.

E o que essas empresas pedem? O mínimo exigido é uma graduação na área de computação ou mestrado na área de machine learning / visão computacional / inteligência artificial. As boas empresas estão buscando pessoas que tenham certeza sobre o que estão desenvolvendo e pesquisando. Deep Learning e Visão Computacional juntos fornecem os melhores resultados, mas em compensação são uma área nova e com muita coisa a se descobrir e aprender, por isso eles pedem tanta qualificação. 

Mas calma, se você não está fazendo graduação, ou está mas não é na área de computação, você tem alguns caminhos para seguir. Primeiro, se você não sabe, mestrado na área de computação é aberto, você pode tentar independente da graduação que você seguiu. Segundo, se você ainda não começou uma graduação, ainda dá tempo, não é o foco desse artigo, mas existem diversas graduações na área de T.I..

Espero ter te deixado interessada em seguir nessa área… e o mais importante, você é capaz, não desista! 

Maria Fernanda Souza Engenheira de Dados na Oncase

Graduanda em Ciência da Computação na UFRPE e mãe de gatinhas. Tem experiência na área de visão computacional e processamento de imagem, trabalhando com pesquisa de 2017 até 2019. Atualmente está na área de dados, trabalhando como engenheira de dados. Também participa ativamente de comunidades Python, como o PUG-PE e o PyLadies Recife, e é uma das organizadoras do WIDS Recife. Site pessoal: mfsouza.com

Redes Sociais: @naanadr (Twitter, Telegram), linkedin.com/in/naanadr/, naanadr.github.io