Visão Computacional com OpenCV
Visão computacional é um campo da inteligência artificial (IA) dedicado a possibilitar que máquinas entendam o mundo visual. Ele envolve tarefas como detecção de objetos, classificação de imagens, reconhecimento facial e análise de vídeos. Existem várias bibliotecas Python apropriadas para tarefas de visão computacional. Entre elas, OpenCV (Open Source Computer Vision) é, sem dúvidas, uma das mais importantes. Já a usamos em posts anteriores várias vezes, mas sem a colocar como foco principal. Neste post, trataremos exclusivamente dela com um enfoque em suas muitas capacidades.
OpenCV e Python
OpenCV não é uma biblioteca exclusiva para Python. Ela suporta várias linguagens de programação, incluindo Python. Seu desenvolvimento se iniciou na Intel em 1999 e ela foi liberada pela primeira vez em 2000. Hoje, ela é extremamente popular e é frequentemente usada em projetos importantes e famosos de visão computacional. Portanto, se você tem interesse em IA e, particularmente, em visão computacional, é importante conhecê-la.
Em termos de aprendizagem, é importante saber que a versão da OpenCV para Python usa NumPy explicitamente em algumas de suas aplicações. Por isso, ter alguma familiaridade com arrays NumPy é recomendado para usar OpenCV.
Para usar a biblioteca, precisa instalá-la, o que deve ser feito preferencialmente em ambiente virtual:
# para instalr com pip
pip install opencv-python
# para instalar com conda
conda install conda-forge::opencv
A biblioteca é importada em códigos Python como cv2:
import cv2
Além da biblioteca, várias funcionalidades de visão computacional com OpenCV precisam de recursos adicionais, como modelos de redes neurais pré-treinados e o módulo para Deep Learning. Geralmente, esses recursos podem ser baixados gratuitamente do site oficial da biblioteca ou de repositórios do GitHub.
OpenCV e suas muitas capacidades
Quando se pensa em visão computacional, OpenCV é uma biblioteca que impressiona em termos de capacidade. Veja uma lista do que ela consegue realizar e pense brevemente em quantas aplicações você poderia fazer com cada uma de suas funcionalidades.
Processamento de Imagens
Manipulação de imagem: OpenCV possui uma ampla gama de funções para tarefas básicas de edição de imagens, como redimensionamento, rotação, corte e conversão de cores.
Redução de Ruído: técnicas para remover ruídos e artefatos indesejados das imagens, melhorando a qualidade da imagem.
Filtragem: aplicação de vários filtros (desfoque, nitidez, detecção de bordas) para aprimorar recursos específicos ou remover detalhes indesejados.
Detecção e Reconhecimento de Objetos
Identificação de objetos: OpenCV pode ser usada para detectar e classificar objetos em imagens ou vídeos.
Rastreamento de objetos (tracking): tracking se refere ao processo de seguir objetos em quadros (frames) consecutivos de um vídeo. Ele é muito utilizado para aplicações de monitoramento de tráfego de veículos.
Reconhecimento Facial
Detecção de rostos: localização de rostos humanos em imagens ou vídeos.
Reconhecimento facial: identificação de indivíduos com base em suas características faciais.
Detecção de pontos faciais (face landmark detection): identificação de características faciais específicas, como olhos e bocas, para análises ou manipulações posteriores.
Análise de Vídeo
Análise de movimento: detecção e rastreamento de objetos em movimento em fluxos de vídeos. Muito útil para sistemas de segurança e vigilância.
Fluxo óptico: estimativa do movimento aparente de padrões em uma sequência de vídeo, possibilitando aplicações como medição de velocidade de objetos ou estabilização de vídeo.
Outras Aplicações Variadas
Combinação de imagens: combinação de várias imagens com regiões sobrepostas para criar visualizações panorâmicas.
Realidade aumentada: sobreposição de objetos virtuais em cenas reais para experiências interativas.
Reconstrução 3D: extração de modelos 3D de imagens 2D ou configurações de câmera estéreo.
Breve Exemplo Prático
OpenCV é uma biblioteca que precisa ser apreciada com profundidade. Mas, sempre é possível fazer uma demonstração rápida em código. Portanto, mostraremos como é fácil abrir imagens com ela e mudar os canais de cores. Veja o código abaixo. Use a imagem que quiser.
import cv2
img = 'sua_imagem_aqui.jpg' # o local da sua imagem no seu computador precisa ser definido aqui (use imagens jpeg, jpg ou png preferencialmente)
img_pb = cv2.imread(img,0) # cv2.imread() carrega a imagem
cv2.imshow('Image em preto e branco',img_pb) # cv2.imshow() mostra a imagem em uma janela
cv2.waitKey(0) # waitKey() determina uma tecla para fechar a janela aberta - a definida como a tecla 0 do teclado nesse exemplo
cv2.destroyAllWindows() # cv2.destroyAllWindows() destrói as janelas que foram criadas
cv2.imwrite('imagemPB.jpg',img_pb) # cv2.imwrite() salva a nova imagem
Nesse código, primeiro carregamos uma imagem com a funcao imread(). O zero — imread(img, 0) — usado com essa função, determina que a imagem será convertida para preto e branco. Se, ao invés de 0, fosse usado 1, ela seria carregada sem alterações. Após carregar a imagem, a função imshow() abre a imagem em uma nova janela. A função inwrite() salva a nova imagem em preto e branco. Super fácil, não é? Veja nossas imagens abaixo.