Search
Close this search box.
Detecção de objetos em imagens e vídeos com YOLOv9 e Python
Detecção de objetos com YOLO

Posts Relacionados:

A detecção de objetos é fundamental em visão computacional. Conheça YOLOv9, a nova versão do algoritmo de deep learning mais poderoso para essa tarefa.

Receba nossa newsletter

Em visão computacional, a detecção de objetos é uma tecnologia fundamental. Ela possibilita que as máquinas percebam e interpretem o ambiente visual com excepcional precisão. Especificamente, a detecção de objetos permite que os computadores não apenas identifiquem objetos em imagens ou vídeos, mas também os localizem. O processo de localização de objetos envolve determinar a posição precisa de um objeto em uma imagem ou quadro de vídeo, geralmente por meio de caixas delimitadoras. Já a classificação se refere à identificação de objetos em categorias predefinidas (por exemplo, carro, pessoa, bicicleta).

Em termos de aplicações, a detecção de objetos é uma técnica avançada que tem transformado inúmeras indústrias. Utilizada em áreas variando de carros autônomos a sistemas de vigilância, essa é uma técnica que está constantemente avançando as fronteiras da inteligência artificial (IA).

Neste post, realizaremos a detecção de objetos usando a nova versão do YOLO, YOLOv9.

YOLOv9

YOLO (You Only Look Once) é uma rede neural do tipo deep learning desenvolvida para tarefas de visão computacional. Seu algoritmo é considerado um dos mais eficazes e mais rápidos para inúmeras tarefas da área. Ele analisa toda a imagem de uma só vez usando uma rede neural profunda convolucional (CNN). YOLOv9 é a sua mais nova versão.

YOLOv9, como seus antecessores, concentra-se em identificar e identificar objetos em imagens e vídeos. Aplicativos como carros autônomos, sistemas de segurança e pesquisa avançada de imagens dependem muito desse recurso. YOLOv9 introduz inovações ainda mais impressionantes do que YOLOv8, que já exploramos algumas vezes (veja aqui e aqui).

Os modelos YOLO são pré-treinados no conjunto de dados COCO. Eles conseguem reconhecer várias classes de objetos sem precisar de treinamento adicional. Mas eles também podem ser treinados para detectar classes adicionais. Neste post, focaremos nas classificações padrão, ou seja, sem nenhum treinamento extra.

Detecção de Objetos com YOLOv9 em Código

Para usar o YOLO, precisa instalar as bibliotecas Python OpenCV e ultralytics, preferencialmente em ambiente virtual.

				
					
pip install opencv-python ultralytics
				
			

Num código Python, importamos os pacotes:

				
					import cv2
from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator
				
			

Usaremos o Annotator da própria ultralytics para desenhar as caixas delimitadoras ao redor dos objetos identificados.

Também precisamos especificar o modelo YOLO que será usado. Como explicado anteriormente, YOLO é uma rede neural do tipo deep learning pré-treinada. YOLOv9 deve contar com 5 versões, ou seja, 5 tamanhos de redes diferentes. Por enquanto, apenas duas estão disponíveis: YOLOv9c e YOLOv9e. Para saber mais detalhes sobre elas, clique aqui.

Para esse post, usaremos o YOLOv9c. Ele será baixado diretamente com a ultralytics na primeira vez que o código for executado:

				
					model = YOLO("yolov9c.pt")
				
			

Classificação e Localização de Objetos

Para realizar a detecção de objetos em imagens ou vídeos, utilizaremos duas funções. A primeira (código abaixo) realiza as classificações e retorna uma tupla contendo a classe e as coordenadas das caixas limitadoras de cada objeto detectado.

				
					
def predict(model, img, classes=[], conf=0.5):
    '''Realiza a detecção de objetos em imagens
     ou vídeos e retorna os resultados contendo as classes identificadas 
     e as coordenadas para traçar caixas delimitadoras. '''
     
    if classes:
        results = model.predict(img, classes=classes, conf=conf)
    else:
        results = model.predict(img, conf=conf)
    return results
				
			

Essa primeira função possui quatro argumentos: o modelo (model), uma imagem para realizar a detecção (img), uma lista de nomes de classe para filtrar previsões (opcional), e um limite mínimo de confiança para uma previsão ser aceita (conf, opcional).

Como mencionado acima, a função retorna uma tupla (results) com o nome das classes detectadas e as coordenadas de suas localizações.

Anotação em Imagens

A segunda função (código abaixo) é responsável por receber a tupla com os resultados da primeira e realizar as anotações dos objetos detectados e de suas localizações na imagem ou quadro de um vídeo. Ela recebe os mesmos argumentos da primeira.

				
					
def detect(model, img, classes=[], conf=0.5):
    '''Anota as classes e desenha caixas delimitadoras ao redor dos objetos detectados.'''

    results = predict(model, img, classes, conf=conf)
    for r in results:
        annotator = Annotator(img)
        boxes = r.boxes
        for box in boxes:
            b = box.xyxy[0]  # coordenada das caixas delimitadoras
            c = box.cls # classe detectadas
            annotator.box_label(b, model.names[int(c)]) # anota imagem
   
    return img
				
			

 Como o YOLO pode identificar vários objetos numa única imagem, essa função executa um loop sobre todos os possíveis objetos detectados para desenhar as caixas e adicionar seus rótulos. A função retorna a imagem anotada.

Detecção de Objetos em Imagens

Com as funções implementadas, basta selecionar uma imagem para realizar as detecções de objetos. A imagem anotada é então salva com OpenCV. Veja o trecho abaixo, ele abre uma imagem, realiza a detecção com YOLO e salva a imagem final anotada:

				
					path_para_imagem = 'SUA_IMAGEM_AQUI' # insira o local da sua imagem, por exemplo: fotos/imagem.jpg
img = cv2.imread(img_name) # abre imagem com OpenCV

img_anotada = detect(model, img, classes=[], conf=0.5) # anota imagem
cv2.imwrite('nome_da_nova_imagem.jpg', img_anotada) # salva imagem anotada
				
			

Abaixo, veja alguns resultados obtidos:

Detecção de Objetos em Vídeo

Para detecções em vídeo, basta adicionar um loop. Ele detecta os objetos aplicando o YOLO quadro a quadro. Em código, esse loop pode ser implementado assim:

				
					video_path = "SEU_VIDEO_AQUI.mp4" # insira seu vídeo
cap = cv2.VideoCapture(video_path)

while True:
    success, img = cap.read()
    if not success:
        break
    result_img = detect(model, img, classes=[], conf=0.5) # anota os quadros do vídeo
    cv2.imshow("Image", result_img) # mostra vídeo anotado
    cv2.waitKey(1) 
				
			

Abaixo, mostramos um exemplo de quatro vídeos combinados e totalmente anotados com YOLO.

Imagem com IA Generativa – Dia 102

IA generativa img102

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