Search
Close this search box.
Detecção de veículos em tempo real com Python

Posts Relacionados:

Já pensou em detectar carros em movimento com poucas linhas de código? Neste post, nosso código faz detecção de veículos com Python em tempo real.

Receba nossa newsletter

A visão computacional trata da aquisição, análise, interpretação e síntese de dados visuais por meio do uso de recursos computacionais. Ela possui várias aplicações como a detecção e reconhecimento facial e a detecção de objetos.

A detecção de veículos em tempo real é uma das muitas aplicações da detecção de objetos. Seu objetivo é realizar a detecção de veículos em uma imagem ou vídeo juntamente com as coordenadas de suas localizações.

Nesse post, utilizaremos a biblioteca OpenCV e um classificador Haar cascade pré-treinado para realizar a detecção de veículos com Python em vídeos.

Pré-requisitos

É necessário instalar a biblioteca OpenCV caso você ainda não a tenha instalada. Para a instalação com pip:

				
					pip install opencv-python
				
			

Para a instalação através do conda:

				
					conda install -c conda-forge opencv
				
			

Também é necessário baixar o classificador pré-treinado que será usado. Ele é o Haar cascade para carros e pode ser achado em alguns repositórios do GitHub como esse.

Precisaremos também de um vídeo com carros em movimento para testar o código que será desenvolvido. Para esse post, utilizaremos esse exemplo do pexels. A resolução que escolhemos para download foi Full HD 1920×1080.

Detecção de veículos com Python

Crie um arquivo do Python chamado classificador_veiculos.py. Nesse arquivo, importe a biblioteca OpenCV e carregue o classificador que será utilizado. Ele precisa estar na mesma pasta que o código ou será preciso indicar sua localização.

				
					import cv2

classifier = cv2.CascadeClassifier('haarcascade_car.xml')
				
			

Em seguida, definimos uma função chamada detecta_carros que detecta veículos e desenha um retângulo ao redor deles. Seu código é mostrado abaixo. Ela tem como argumento um frame do vídeo e retorna um frame com os veículos detectados marcados com um retângulo.

Os comandos usados nessa função são equivalentes aos utilizados aqui para detecção de faces. Dentro da função, usamos o método detectMultiScale para realizar a detecção de veículos. Esse método tem alguns parâmetros que precisam ser compreendidos.

Seu primeiro parâmetro é um frame de vídeo em escala de cinzas.

O parâmetro scaleFactor reduz o tamanho da imagem de entrada para tornar mais fácil para o algoritmo detectar objetos grandes. Especificamos um fator de 1.1, indicando que queremos reduzir o tamanho da imagem em 10%.

Nosso classificador cascade funciona com uma sliding window que corre através da imagem para detectar veículos nela. O parâmetro minNeighbors define em quantas sliding windows vizinhas um veículo precisa ser detectado para sua detecção ser considerada válida. No nosso caso, o valor escolhido foi 5.

O parâmetro minSize determina um valor mínimo que um objeto precisa ter para ser detectado.

É importante enfatizar: todos os parâmetros dessa função influenciam os resultados do classificador e devem ser ajustados de acordo com suas necessidades.

Após definirmos o classificador na função, é necessário usar as coordenadas que ele retorna para traçar um retângulo ao redor dos veículos. Isso é feito nas linhas 7-8 do código abaixo.

				
					
def detecta_carros(frame):
    carros = classifier.detectMultiScale(frame,
                                     scaleFactor=1.1,
                                     minNeighbors=5,
                                     minSize=(60, 60))

    for (x, y, w, h) in carros:
        cv2.rectangle(frame, (x, y), (x+w,y+h), color=(0, 255, 0), thickness=2)
    
    return frame
				
			

Detecção de veículos com Python em vídeos

Na sequência, definimos uma segunda função chamada Simulator que aplica a função detecta_carros sobre os frames de um vídeo. Ela tem como argumento um vídeo. Esse vídeo pode ser fornecido por uma câmera diretamente conectada ao computador.

A função Simulator usa alguns métodos da biblioteca OpenCV. Primeiro, ela cria um loop com o vídeo aberto. Na linha 3, o método .read() retorna 2 elementos, o primeiro é um valor booleano (True/False) e o segundo é um frame do vídeo.

Se a elemento booleano é True, a função que detecta veículos é chamada tendo o frame como seu argumento (linha 6). Em seguida, o frame com veículos detectados é mostrado (linha 7). Os outros comandos da função definem as formas de término do while loop e o fechamento das janelas abertas do vídeo.  

				
					
def Simulator(video):
    while video.isOpened():
        ret, frame = video.read()
        controlkey = cv2.waitKey(1)
        if ret:        
            carros_frame = detecta_carros(frame)
            cv2.imshow('frame', carros_frame)
        else:
            break
        if controlkey == ord('q'):
            break

    video.release()
    cv2.destroyAllWindows()
				
			

Após a implementação, basta chamar a função usando um vídeo como argumento. No código abaixo, substitua o termo path_to_video pela localização do seu vídeo.

				
					
video = cv2.VideoCapture('path_to_video')
Simulator(video)
				
			

Esse é o resultado que obtivemos.

Conclusão

Nesse post, usamos o OpenCV e o classificador Haar cascade para detectar veículos em vídeos. O processo é simples, mas o resultado depende de uma boa escolha dos parâmetros utilizados para a detecção.

Imagem com IA Generativa – Dia 274

IA generativa img 274

Arte com IA generativa: imagem do dia

Todos os dias, postamos um exemplo de imagem artística gerada com inteligência artificial.

Tutoriais

Postagens Mais Recentes

Outras Postagens Que Podem Interessar

Veja
Mais

Fique em contato

Se inscreva para receber nossa newsletter com novidades.

aprendiz artificial