Rastreamento de veículos
Visão computacional é uma das áreas mais promissoras e interessantes da IA. Ela conta com inúmeras aplicações extremamente úteis em segurança, controle de estoque, monitoramento, esportes entre muitas outras.
O rastreamento de veículos é uma das principais aplicações de visão computacional. Além de ser importante no planejamento urbano, ele também tem aplicações comerciais.
À primeira vista, um algoritmo de rastreamento pode parecer com um classificador. No entanto, algoritmos de rastreamento operam em vários quadros de um vídeo para seguir os objetos ao longo do tempo. Já os classificadores normalmente funcionam em imagens únicas.
Os rastreadores incorporam modelos de movimento para prever o deslocamento dos objetos entre os quadros de um vídeo. Consequentemente, eles têm velocidades de processamento mais rápidas para vídeos, especialmente para aplicativos em tempo real. Enquanto os classificadores simplesmente detectam classes de objetos em cada imagem, os rastreadores costumam atribuir identidades aos objetos. Isso permite a realização de operações como contagem e verificações de comportamentos complexos.
Neste post, faremos um rastreador de veículos com YOLOv8. Por ser um algoritmo extremamente eficiente do ponto de vista computacional, o YOLO serve para aplicações em tempo real. Portanto, o código mostrado aqui pode ser usado com alimentação diretamente de uma câmera acoplada a um computador.
Rastreamento de veículos em código
pip install ultralytics
Também é preciso instalar OpenCV.
pip install opencv-python
Após as instalações, em um código Python, fazemos as importações necessárias:
import cv2
from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator
Em seguida, abrimos um vídeo:
video_cap = cv2.VideoCapture("SEU_VIDEO_AQUI") # abre um video
Para usar a câmera, basta trocar a linha acima por cap = cv2.VideoCapture(0). Depois, definimos o modelo do YOLO que usaremos. Usaremos o YOLOv8m, mas você pode utilizar outra versão se preferir. Isso não altera o código. Não é preciso baixar o modelo. Se você não o possui, ele será baixado na primeira vez em que o código for executado.
model = YOLO("yolov8m.pt") # modelo YOLO
Loop para executar rastreamento de vídeos
Depois, como é usual para processamento de vídeos, fazemos um loop para aplicar o algoritmo em cada quadro.
while True:
ret, frame = video_cap.read() # leitura do video
controlkey = cv2.waitKey(1)
if not ret: # termina loop se nao houver quadro
break
tracker = model.track(frame, persist=True, classes=[1, 2, 3, 5, 6, 7]) # aplica algoritmo buscando as classes indicadas
for r in tracker: # anota todos os objetos rastreados
annotator = Annotator(frame)
boxes = r.boxes # caixas delimitadoras dos objetos rastreados
for box in boxes:
b = box.xyxy[0] # coordenadas de cada caixa delimitadora
c = box.cls # classes identificadas
annotator.box_label(b, model.names[int(c)]) # anota quadro com caixa e classe
cv2.imshow("Frame", frame) # mostra quadro anotado
if cv2.waitKey(1) == ord("q"): # comando para sair do loop
break
video_cap.release()
cv2.destroyAllWindows()
Dentro do loop, primeiro lemos um quadro do vídeo. Em seguida, criamos um break caso não haja quadros para serem lidos.
O YOLO é implementado na sequência. Na linha 6, definimos a tarefa que o modelo deve fazer: rastreamento (track) e aplicamos o algoritmo. O modelo do YOLO é pré-treinado no conjunto de dados COCO que possui cerca de 80 classes. Como desejamos rastrear apenas veículos, selecionamos especificamente os números correspondentes a suas classes (clique aqui para ver as classes disponíveis e seus índices). Portanto, o YOLO irá ignorar objetos pertencentes a outras classes.
Como o YOLO pode reconhecer vários objetos em um mesmo quadro, precisamos fazer um for loop para marcar cada item localizado. Para isso, usamos o Annotator da Ultralytics. Ele é utilizado para desenhar as caixas delimitadoras e anotar a classe em cada objeto rastreado.
Pronto! Rastreador de veículos concluído em cerca de 20 linhas de código. Veja um exemplo dele em ação abaixo: