Classificação de imagens com Python e OpenCV

Introdução à visão computacional com exemplos práticos

Gabriel Cassimiro
4 min readMar 25, 2021
Exemplo de visão computacional

O objetivo desse post é mostrar na prática como conseguimos reconhecer objetos, pessoas e faces em imagens e vídeos ao vivo, usando Python e a biblioteca OpenCV.

Requisitos para usar o código:

  1. Ter Python instalado;
  2. Ter a biblioteca OpenCV instalada;
  3. Acesso a um editor de texto.

Introdução

O que é OpenCV?

A Open Source Computer Vision Library (OpenCV) é uma biblioteca open source para visão computacional e algumas aplicações de machine learning. Ela permite desde o processamento de imagens e vídeos até o treinamento de e aplicação de modelos. A biblioteca também disponibiliza alguns modelos pré treinados de classificação.

Os modelos usados nos exemplos são modelos mais simples, por isso não são perfeitos para trabalhos de classificação, mas são ótimos para uma introdução no mundo de visão computacional.

Modelo Usado: HAAR Cascade

Existem diversos classificadores de imagens disponíveis, mas optei por utilizar o modelo HAAR cascade. Esse modelo é disponibilizado por meio de um arquivo XML contendo diversos padrões definidos durante treino.

Quando uma parte da imagem corresponde com esses padrões pré definidos conseguimos identificar sua posição e classificar na imagem original esse objeto ou pessoa. Exemplo de alguns padrões:

Padrões de um modelo HAAR Cascade

Esses padrões são aplicados na imagem buscando uma diferença pré definida de pixels escuros e claros. Quando esses padrões são encontrados, encontramos o objeto que foi treinado para certo HAAR cascade.

Vamos aplicar em um exemplo real!

Classificação em Imagens

O objetivo do processo de classificação é encontrar o target definido (Pessoas) e obter sua localização na imagem. Com essa localização conseguimos rotular na imagem original a classificação do modelo.

Para isso, vamos usar um modelo já treinado para classificar pessoas de corpo inteiro. Usaremos a seguinte foto para o exemplo:

Nosso objetivo final é desenhar um retângulo em volta de todas as pessoas presentes na imagem. Vamos por partes então.

Ler imagem usando OpenCV.

import cv2img = cv2.imread(“../data/people_on_street.jpeg”)

Depois vamos transformar essa imagem em uma gray scale, pois o classificador HAAR cascade funciona melhor em escalas de cinza do que em imagens com cor.

gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

Agora vamos carregar o modelo treinado e realizar as classificações:

## Carregando o modeloperson_classifier_file = '../models/full_body.xml'
person_cascade = cv2.CascadeClassifier(person_classifier_file)
## Gerando previsãopersons = person_cascade.detectMultiScale(gray_img)

Com isso encontramos a posição das pessoas nas imagens. Essas posições estão em formato de listas, por isso vamos iterar sobre cada uma delas e desenhar um retângulo nas posições. Vamos também adicionar um label nos retângulos dizendo que são pessoas.

for (x,y,w,h) in persons:
gray = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),16)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'person',(x, y-10), font, 2.0, (11,255,255), 6)

Por fim, vamos mostrar a imagem com as classificações:

cv2.imshow('person_detection', img)
cv2.waitKey(0)
Classificação de pessoas em uma imagem

Todos esses códigos e modelos podem ser encontrados no seguinte repositório.

Reconhecimento em vídeos ao vivo

Agora vamos subir um nível e aplicar esses mesmos conceitos porém em vídeos ao vivo. Vamos procurar mais features também. Queremos identificar e classificar o rosto e os olhos de uma pessoa e gerar um vídeo de saída com essas classificações em tempo real.

O código usado é o mesmo do exemplo da imagem, porém com 2 mudanças:

  1. 2 modelos para classificação (Rosto e Olhos);
  2. O input será o vídeos ao vivo da webcam do computador.

Com essas mudanças o código fica assim:

O resultado que obtemos é o video ao vivo da webcam com as classificações:

Classificação em tempo real

Percebemos que ambos modelos possuem alguns erros de classificação. No exemplo da imagem uma das pessoas não foi identificada e durante o video o modelo dos olhos errou em alguns frames.

Isso comprova que esses modelos não são os mais precisos, mas eles possuem algumas vantagens como o tamanho do arquivo e velocidade de processamento, que são ótimas para classificações em vídeos ao vivo.

Se você quiser testar esses métodos basta clonar o seguinte repositório e executar o script face_recognition.py no seu computador.

--

--

Gabriel Cassimiro

Solving and creating problems with AI. Google Developer Expert in ML