Tamanho de fonte
Alto contraste
Altura de linha
logo-opencv

O que é OpenCV e para que serve?

Avatar de Rebeca Honorio Rebeca Honorio
17 minutos de leitura 19 dias atrás

O OpenCV é uma das principais tecnologias por trás do avanço da inteligência artificial (IA), transformando o que antes era ficção científica em realidade cotidiana. Um exemplo disso é que, em países superdesenvolvidos, como Japão e China, a identificação automática de rostos já é uma prática comum, parte integrante de sistemas de segurança, transações comerciais e até mesmo entretenimento.

Mas você já se perguntou como isso realmente funciona? Como os computadores conseguem reconhecer alguém famoso em uma multidão ou diferenciar uma planta de um sofá?

Vamos explorar em detalhes, ao decorrer da leitura, como o OpenCV funciona e por que ele é tão essencial na era da IA. Veremos desde as suas funcionalidades mais básicas até as aplicações mais avançadas, como o reconhecimento facial, a classificação de objetos e até mesmo a realidade aumentada.

OpenCV: o que é?

OpenCV (Open Source Computer Vision Library) é uma biblioteca de código aberto amplamente utilizada para visão computacional, processamento de imagens e machine learning. Ela oferece uma variedade de funções que permitem aos desenvolvedores realizar operações complexas de análise de imagens e vídeos em tempo real, como identificar objetos, diferenciar seres humanos de animais e até reconhecer caligrafias.

Essas capacidades tornam o OpenCV essencial em sistemas modernos, permitindo desde o rastreamento de movimento até o processamento de padrões visuais. Além disso, quando combinada com outras bibliotecas, como NumPy no Python, a ferramenta se torna ainda mais poderosa, permitindo a manipulação e análise de estruturas de dados em imagens e vídeos.

Originalmente desenvolvida pela Intel no ano 2000, o OpenCV suporta linguagens como C++, Python, Java e MATLAB e é compatível com sistemas operacionais como Windows, Linux, Android e macOS. Com mais de 25.000 algoritmos disponíveis, essa biblioteca é um pilar para projetos de pesquisa e desenvolvimento de produtos, aplicados em áreas como imagens médicas, veículos não tripulados e fusão de imagens de satélites.

Principais funcionalidades do OpenCV

Os criadores do OpenCV desenvolveram a biblioteca com uma variedade de funcionalidades essenciais para o processamento de imagens e vídeos. O OpenCV foi construído com foco em máxima eficiência e desempenho em tarefas intensivas de visão computacional, especialmente para aplicações de inteligência artificial em tempo real.

Uma das principais funcionalidades do OpenCV é a leitura e exibição de imagens em diversos formatos (como JPG, PNG, BMP, entre outros) e vídeos, possibilitando, por isso, a captura e manipulação tanto em tempo real quanto de arquivos gravados. Além disso, o OpenCV inclui algoritmos para detecção de bordas e contornos, que ajudam a identificar mudanças em vídeos, como quando um objeto se move de posição. A biblioteca oferece mais de 500 funções, abrangendo diversas áreas da visão computacional, como inspeção de produtos de fábrica, imagens médicas, análise de segurança, interface homem-máquina, calibração de câmeras, visão estéreo (Visão 3D) e visão robótica.

Por outro lado, na detecção e reconhecimento de rostos em vídeos ou imagens, o OpenCV permite o reconhecimento de pessoas, sendo útil, por exemplo, em sistemas de segurança. Além disso, é ideal para análise de movimento de objetos e estudo de tráfego. Dessa forma, essas e outras funcionalidades fazem do OpenCV uma ferramenta indispensável para desenvolvedores que trabalham com visão computacional, possibilitando a criação de aplicações em diversas áreas, como segurança, medicina e robótica.

Como instalar e configurar o OpenCV

Se você se interessou pelo OpenCV, pode instalá-lo e configurá-lo para usar em projetos de sua preferência, como na detecção de objetos. Mas, antes de começar, é importante saber como proceder com a instalação. Siga os passos abaixo:

  1. Verifique se o Python está instalado: se ainda não estiver, consulte o tutorial da Asimov sobre como instalar o Python no Windows para iniciantes. Certifique-se de que a versão instalada seja 2.7 ou 3.x. Para verificar a versão instalada, execute o comando abaixo no terminal ou prompt de comando.
python --version 

2. Instale o pip (se for necessário): o pip é o gerenciador de pacotes do Python e geralmente já vem pré-instalado. No entanto, caso não esteja disponível no seu sistema, você pode instalá-lo seguindo as instruções do site oficial do pip.

3. Instale o NumPy: o NumPy é uma dependência essencial para a biblioteca OpenCV. Para instalá-lo, use o seguinte comando:

pip install numpy

4. Instale o OpenCV: abra o terminal ou o prompt de comando e execute o seguinte comando para instalar o OpenCV:

pip install opencv-python

5. Verifique a instalação: após a instalação, é importante verificar se o OpenCV foi instalado corretamente. Digite o seguinte comando no terminal:

python -c "import  cv2;  print (cv2.version)"

Se não houver erros, significa que a instalação do OpenCV foi bem-sucedida e você já pode configurá-lo. Siga os passos abaixo para configurar e usar o OpenCV.

Como detectar objetos em uma imagem usando OpenCV?

Para implementar a detecção de objetos, vamos praticar contando quantas bicicletas tem em uma imagem. Isso levará poucos minutos seguindo os seguintes passos: 

  1. Baixe os seguintes arquivos:

Use uma imagem para realizar seu teste.

  1. Instale o pacote opencv-python: escreva pip install opencv-python no terminal e execute em seguida o código mostrado abaixo:
import cv2 as cv

# Caminhos para o arquivo de configuração e o modelo congelado
config_file = './ssd_mobilenet_v3_large_coco_2020_01_14.pbtxt'
frozen_model = './frozen_inference_graph.pb'

# Modelo de detecção usando o módulo de rede neural profunda
model = cv.dnn_DetectionModel(frozen_model, config_file)

# labels.txt contém todas as anotações para a detecção
class_labels = [ ]
file_name = './labels.txt'

with open(file_name, 'rt') as fpt:
    class_labels = fpt.read().rstrip('\n').split("\n")

# Parâmetros de entrada para o modelo de detecção
model.setInputSize(320, 320)
model.setInputScale(1.0/127.5)
model.setInputMean((127.5, 127.5, 127.5))
model.setInputSwapRB(True)

# Ler uma imagem
img = cv.imread("./test.jpeg")

# Executar uma inferência na imagem
class_index, confidence, bbox = model.detect(img, confThreshold=0.6)

# Configurar a escala da fonte e o tipo para exibir texto na imagem após a detecção
font_scale = 3
font = cv.FONT_HERSHEY_PLAIN

# Contador para acompanhar o número de bicicletas detectadas
counter = 0

# Iterar sobre os objetos detectados na imagem
for class_ind, conf, boxes in zip(class_index, confidence, bbox):
    # Desenhar um retângulo ao redor do objeto detectado
    cv.rectangle(img, boxes, (255, 0, 0), 2)

    # Exibir o rótulo perto do objeto detectado
    cv.putText(img, class_labels[class_ind - 1], (boxes[0] + 10, boxes[1] + 40), font, font_scale, (0, 255, 0), thickness=3)

    # Verificar se há uma bicicleta na imagem
    if class_labels[class_ind - 1] == 'bicycle':
        counter += 1  # Incrementar o contador se uma bicicleta for detectada

# Exibir o número de bicicletas detectadas
print(f"Número de bicicletas detectadas: {counter}")

# Salvar a imagem com rótulos e caixas ao redor dos objetos detectados
cv.imwrite('./output.jpg', img)

O resultado será a identificação da imagem inserida; no nosso caso, a detecção de duas bicicletas. Entretanto, este é apenas um exemplo básico, mas o OpenCV pode identificar muitos outros objetos, pessoas e até mesmo gestos, dependendo do comando que você deseja executar.

Exemplo de detecção de objetos com OpenCV para reconhecer bicicletas no trânsito

OpenCV em projetos de visão computacional

Antes de falar sobre os projetos, é importante explicar o que é visão computacional. A visão computacional é uma área da inteligência artificial que estuda como os computadores podem obter informações de imagens e vídeos de forma automatizada, quase como a maneira humana de ver o mundo.

As principais funcionalidades da visão computacional incluem:

  • Reconhecimento de objetos, rostos e padrões
  • Detecção e rastreamento de movimentos
  • Reconstrução 3D de cenas
  • Análise e segmentação de imagens
  • Restauração e aprimoramento de imagens
Bicicletas detectadas com OpenCV
Detecção de múltiplos objetos baseada em ML com OpenCV – Construído com Viso Suite | Viso.AI

Como mencionado, a visão computacional se baseia em sistemas que imitam o funcionamento dos olhos humanos. Imagine, por exemplo, um computador interpretando uma imagem ou vídeo, reconhecendo objetos ou pessoas, e até mesmo lendo textos através do reconhecimento óptico de caracteres. Esses sistemas também conseguem classificar movimentos humanos com base em suas poses, realizar inspeções automatizadas e detectar situações críticas, como infrações de trânsito, utilizando o reconhecimento de imagem.

É aqui que o OpenCV se destaca.

Considerada uma das ferramentas mais poderosas de visão computacional, o OpenCV é amplamente utilizado em diversas áreas, desde o reconhecimento de imagens até análises em 2D e 3D. 

Vamos explorar algumas das funções que podem ser testadas utilizando o OpenCV:

1. Detecção de objetos em tempo real

Essa tecnologia de detecção de objetos é aplicada diretamente no reconhecimento de imagens, localizando aqueles objetos específicos que foram solicitados, como carros, bicicletas, animais, entre outros. Esse sistema do OpenCV pode ser implementado até mesmo no setor industrial ou na sua casa:

@asimov.academy

🤯🤯🤯 VLMs (Visual Language Models) são uma nova classe de modelos de linguagem capazes de compreender imagens e vídeos. Neste projeto combinei um VLM (chamado Llava 1.6) com uma LLM tradicional (Llama 3), permitindo que ela passasse a ser capaz de interpretar o ambiente na qual está. Também adicionei uma palavra chave para ativar o assistente (“João”) e um algoritmo de text-to-speech, para gerar a voz. A vantagem de um projeto como este é que o assistente não foi programado de maneira explicita para desempenhar nenhuma daquelas tarefas: soube encontrar respostas em tempo real. Mas o que mais poderia ser feito com uma tecnologia assim?

♬ som original – Asimov Academy

2. Segmentação de imagem

A segmentação de imagem aplica algoritmos para dividir a imagem em diferentes segmentos. Essa segmentação geralmente simplifica, altera ou aprimora a imagem. Por exemplo, um algoritmo pode separar uma paisagem em céu, montanhas e vegetação para facilitar o processamento posterior.

Se você quer aprender mais sobre como automatizar o processo de segmentação e edição de imagens, confira o curso de Edição Automatizada de Imagens na nossa plataforma. Neste curso, você vai explorar como algoritmos avançados, como os do OpenCV, podem ser aplicados para otimizar o processamento de imagens em projetos reais.

3. Reconhecimento de movimentos e gestos

O sistema envolve também o reconhecimento de poses e gestos humanos ou de animais, interpretando esses movimentos através de vídeos, categorizando-os como corporais, manuais ou faciais. Esse sistema de categorização possibilita o cálculo da pose do objeto e sua orientação em 3D, permitindo, por exemplo, o desenvolvimento de tecnologias para realidade virtual.

Um exemplo prático dessa tecnologia pode ser visto no projeto de reconhecimento de movimentos em vídeos de partidas esportivas, que você pode conferir neste vídeo abaixo. Nele, são usadas as funcionalidades do OpenCV para rastrear e identificar gestos e movimentos de jogadores em tempo real.

Para aprender a criar esse sistema na prática e personalizá-lo de acordo com suas necessidades, explore nosso tutorial completo na plataforma, onde você pode seguir o passo a passo e aplicar em diferentes contextos.

4. Reconhecimento facial

O reconhecimento facial automático é uma das funcionalidades do OpenCV. Como já mencionado, ele pode identificar um rosto humano específico ou diferenciá-lo entre vários rostos de diferentes espécies. Isso é possível através da combinação de dados presentes em um banco de dados facial, no qual o FaceRecognizer do OpenCV é capaz de fornecer o reconhecimento. Por exemplo, na imagem abaixo, foi utilizado o reconhecimento facial para identificar pessoas famosas, como a atriz Emilia Clarke, em diferentes contextos – uma em um evento, outra caracterizada como sua personagem em Game of Thrones.

Reconhecimento facial com visão computacional usando a atriz Emilia Clarke de exemplo
Reconhecimento facial com visão computacional | Viso.AI

5. Realidade aumentada

A realidade aumentada permite uma interação em tempo real entre o mundo real e o virtual. Diferente da realidade virtual, que cria um ambiente completamente simulado, a realidade aumentada sobrepõe objetos digitais ao ambiente físico existente, criando uma experiência interativa do mundo real com elementos virtuais. Por exemplo, ao apontar seu celular para uma rua, você pode ver sinais de navegação ou informações sobre lojas, tudo sobreposto ao cenário real.

Reconhecimento facial com OpenCV: como funciona?

Para entender como o reconhecimento facial funciona, é importante compreender como o sistema do computador lê uma imagem ou vídeo. Os computadores processam imagens de forma lógica e sistemática, interpretando-as como matrizes de valores numéricos.

O processo básico ocorre da seguinte maneira: primeiro, uma imagem é composta por diversos pixels, e cada pixel possui um valor que representa sua cor e intensidade. Pixels RGB, por exemplo, têm três valores, correspondentes aos canais vermelho, verde e azul. Em segundo lugar, os valores RGB são geralmente representados como inteiros, variando de 0 a 255. O valor 0 indica a ausência de cor, representada pelo preto, e 255 representa a intensidade máxima, o brilho total.

Assim, o computador lê a imagem como uma tela cheia de números, onde cada elemento corresponde a um pixel em um lugar específico. Nesse processo, os algoritmos de processamento de imagem manipulam essas representações numéricas dos pixels. Com isso, ocorre a dinâmica do OpenCV de conseguir identificar um rosto, um relógio ou um carro em uma única imagem, por exemplo. 

Exemplo de visão computacional detectando o rosto e os acessórios de um homem

O OpenCV permite também a execução de várias operações na imagem. Algumas delas são:

  • Leitura da imagem: permite que você leia a imagem de um arquivo ou diretamente pela câmera, tornando-a acessível para processamento adicional. Além disso, essa funcionalidade é essencial para qualquer aplicação que envolva visão computacional.
  • Melhoramento de imagem: é possível melhorar a imagem ajustando brilho, nitidez e outras configurações para aprimorar a qualidade.
  • Detecção de objetos na foto/imagem: ao tirar uma foto e processá-la no sistema OpenCV, além de seu rosto ser detectado, ele pode reconhecer e identificar objetos como comida, pulseiras, relógios, placas na rua e outros rostos presentes na imagem.
  • Filtragem de imagem: ou seja, é possível alterar a saturação ou as cores da imagem com filtros, desfoques ou nitidez.
  • Desenho na imagem: permite fazer desenhos, linhas, traços ou adicionar textos nas imagens.

Dessa forma, mesmo que a imagem original seja uma foto tirada na rua, em movimento e com outras pessoas ao redor, o OpenCV pode detectar rostos e destacar acessórios como pulseiras, relógios, sandálias, entre outros.

Detecção de rostos, relógio e sandália de dois homens na rua usando OpenCV
Fonte: geeksforgeeks

Integração do OpenCV com Python

A integração do OpenCV com Python é uma prática comum e extremamente útil para o desenvolvimento de aplicações de visão computacional. O OpenCV-Python fornece uma interface perfeita que combina a eficiência do OpenCV, escrito em C++, com a flexibilidade do Python.

Para integrar Python e OpenCV, siga os seguintes passos:

  1. Importação da biblioteca: após a instalação, você pode importar o OpenCV em seu código Python (A instalação do OpenCV já foi abordada anteriormente.)
  1. Utilização de funcionalidades: você pode começar a usar as funcionalidades do OpenCV, como leitura e exibição de imagens, detecção de objetos, entre outras. Por exemplo, para detectar bordas em uma imagem, basta escrever o seguinte comando:
import cv2
import numpy as np

# Carrega a imagem image
image = cv2.imread('test.png', 0)

# Aplica o Canny Edge Detection
edges = cv2.Canny (image, 100, 200)

# Exibe a imagem com as bordas detectadas
cv2.imshow('Bordas', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

Para reconhecimento facial, você pode utilizar o classificador em cascata Haar Cascade, que é um algoritmo ideal para detectar rostos em imagens ou vídeos. Ele é um classificador Haar Cascade e funciona por meio de uma série de etapas (“cascata”) para analisar diferentes regiões da imagem. O algoritmo verifica se determinadas características estão presentes e decide se a região analisada pode conter o objeto que está sendo procurado. Isso torna o processo rápido e preciso, mesmo em grandes imagens. 

Para detecção de rostos, siga este comando:

import cv2
#Carrega o classificador em cascata para detecção de rostos
face_cascade = cv2.CascadeClassifier (cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

#Carrega a imagem
image = cv2.imread('imagem.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

#Detecta rostos
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5)

#Desenha retângulos ao redor dos rostos detectados
for (x, y, w, h) in faces:
  cv2.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0), 2)

#Exibe a imagem com os rostos detectados
cv2.imshow('Rostos Detectados', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Na detecção de objetos, pode ser realizada utilizando o algoritmo Haar Cascade para identificar objetos específicos, como veículos ou pedestres.

import cv2

# Carrega o classificador em cascata para detecção de carros
car_cascade = cv2.CascadeClassifier('./haarcascade_car.xml')

# Carrega a imagem
image = cv2.imread('./images.jpeg')

# Verifica se a imagem foi carregada corretamente
if image is None:
    print("Erro: Não foi possível carregar a imagem.")
else:
    # Converte a imagem para escala de cinza
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    # Detecta carros
    cars = car_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=3)

    # Desenha retângulos ao redor dos carros detectados
    for (x, y, w, h) in cars:
        cv2.rectangle(image, (x, y), (x+w, y+h), (8, 255, 0), 2)

    # Exibe a imagem com os carros detectados
    cv2.imshow('Carros Detectados', image)
    cv2.waitKey(0)  # Espera até que uma tecla seja pressionada
    cv2.destroyAllWindows()  # Fecha a janela

Para testar a realidade aumentada, insira os seguintes comandos que estão abaixo.

import cv2
import numpy as np

# Carrega a imagem de fundo
background = cv2.imread('background.jpg')

# Carrega a imagem do objeto a ser sobreposto
# Usar -1 para carregar a imagem com canal de transparência (RGBA)
overlay = cv2.imread('overlay.png', -1)

# Define a posição onde o objeto será colocado
x_offset = 50
y_offset = 50

# Verifica se a imagem foi carregada corretamente
if background is None or overlay is None:
    print("Erro: Não foi possível carregar as imagens.")
else:
    # Verifica se a imagem overlay possui canal alpha (transparência)
    if overlay.shape[2] == 4:  # Verifica se possui 4 canais (RGBA)
        # Separa o canal alfa
        alpha_overlay = overlay[:, :, 3] / 255.0
        alpha_background = 1.0 - alpha_overlay

        # Sobrepõe a imagem do objeto no fundo
        for c in range(0, 3):  # Para cada canal de cor (BGR)
            background[y_offset:y_offset+overlay.shape[0], x_offset:x_offset+overlay.shape[1], c] = \
                (alpha_overlay * overlay[:, :, c] + alpha_background * background[y_offset:y_offset+overlay.shape[0], x_offset:x_offset+overlay.shape[1], c])

        # Exibe a imagem resultante
        cv2.imshow('Realidade Aumentada', background)
        cv2.waitKey(0)
        cv2.destroyAllWindows()
    else:
        print("Erro: A imagem overlay não possui canal alfa (transparência).")

A integração do OpenCV com Python não apenas facilita o desenvolvimento na área de visão computacional, como também permite que os desenvolvedores aproveitem ao máximo as capacidades do OpenCV por meio de uma interface intuitiva.

Conclusão 

Como vimos, o OpenCV não apenas proporciona uma vasta gama de funcionalidades, mas também é altamente acessível e integrável com linguagens como Python, o que potencializa ainda mais seu impacto em projetos práticos. A instalação e configuração são bastante diretas, e a biblioteca está equipada para lidar com as necessidades de diversos aplicativos, desde sistemas de segurança até experiências imersivas em realidade aumentada.

À medida que continuamos a explorar e expandir as possibilidades da inteligência artificial, o OpenCV oferece as ferramentas necessárias para transformar ideias inovadoras em realidade. Se você está começando sua jornada na visão computacional ou deseja aperfeiçoar projetos já em andamento, a Trilha de Visão Computacional da Asimov Academy é o caminho ideal para avançar com eficiência. Nossa plataforma oferece conteúdos didáticos e práticos, que vão desde os fundamentos até as técnicas mais avançadas, tudo com o suporte de ótimos professores. 

Imagem de um notebook

Cursos de programação gratuitos com certificado

Aprenda a programar e desenvolva soluções para o seu trabalho com Python para alcançar novas oportunidades profissionais. Aqui na Asimov você encontra:

  • Conteúdos gratuitos
  • Projetos práticos
  • Certificados
  • +20 mil alunos e comunidade exclusiva
  • Materiais didáticos e download de código
Inicie agora

Comentários

Comentar
Faça parte da discussão Crie sua conta gratuita e compartilhe
sua opinião nos comentários
Entre para a Asimov