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?
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.
- Classificação de Imagem (ou Image Classification):
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!
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.
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.
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.
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:
- 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.
- 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.
- 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.
- 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.
- 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:
- 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).
- 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.
- 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:
- Bóson Treinamentos: conteúdo em Português de lógica de programação e Python.
- Sentdex: Cursos de Python, Machine Learning, Deep Learning, Visão Computacional, Análise de Dados e outras coisas. (em inglês)
- DeepLizard: Cursos de Machine Learning e Deep Learning, Keras, PyTorc. (em inglês)
- Redes Convolutivas para Reconhecimento de Imagem – Universidade de Stanford (em inglês)
- Curso de Deep Learning: Esse curso é bem aprofundado, ele foi ministrado para uma turma de mestrado. Recomendo assisti-lo por último, caso você tenha interesse em se aprofundar na área.
Material em texto:
- Livro Álgebra Linear, Alfredo Steinbruch
- Livro Processamento Digital de Imagens, Gonzalez e Woods
- Livro Programming Computer Vision with Python (em inglês)
- Laboratórito de Processamento Digital de Sinais e Imagens do CBPF
- Documentação do OpenCV (em inglês)
- Curso de Visão Computação pelo professor James Hay (em inglês)
- KDnuggets (em inglês)
- Matemática, Deep Learning, Inteligência Artificial, Machine Learning e outras coisas.
- Blogs posts e Tutoriais
- PyImageSearch (em inglês)
- Conteúdos de OpenCV, Dlib, Visão Computacional, Processamento de Imagem, Deep Learning, Machine Learning.
- Blogs posts, tutoriais, cursos pagos, newsletter
- Machine Learning Mastery (em inglês)
- Conteúdos de Machine Learning, Deep Learning, Inteligência Artificial, Visão Computacional.
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!
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
Ola, parabéns pela reportagem! Gostaria de saber quais são os polos academicos da visao computacional no BR, ou seja, aonde estão os melhores mestrados e doutorados.
Seu artigo me levou a um pensamento que tive na adolescência. Eu pensava em desenvolver um recurso para ajudar na detecção de autores de assassinatos, por acreditar que as imagens ficam guardadas (congeladas) em algum ponto da região ocular ou periféricos ou em alguma região do cérebro. Posso estar exagerando, mas a Visão Computacional pode dar a resposta para levar à criação desse recurso.
Parabéns pelo artigo e grata pelas orientações sobre como ingressar nessa área de estudo.