Salta para o conteúdo

Cálculo da distância utilizando Ultralytics YOLOv8 🚀

O que é o cálculo da distância?

A medição da distância entre dois objectos é conhecida como cálculo de distância dentro de um determinado espaço. No caso do Ultralytics YOLOv8o centróide da caixa delimitadora é utilizado para calcular a distância das caixas delimitadoras destacadas pelo utilizador.



Observa: Cálculo da distância utilizando Ultralytics YOLOv8

Visuais

Cálculo da distância utilizando Ultralytics YOLOv8
Ultralytics YOLOv8 Cálculo da distância

Vantagens do cálculo da distância?

  • Precisão de localização: Melhora o posicionamento espacial preciso em tarefas de visão computacional.
  • Estimativa de tamanho: Permite estimar tamanhos físicos para uma melhor compreensão contextual.
  • Compreensão da cena: Contribui para uma compreensão 3D do ambiente para melhorar a tomada de decisões.
Cálculo da distância
  • Clica em quaisquer duas caixas delimitadoras com o botão esquerdo do rato para calcular a distância

Cálculo da distância utilizando YOLOv8 Exemplo

from ultralytics import YOLO
from ultralytics.solutions import distance_calculation
import cv2

model = YOLO("yolov8n.pt")
names = model.model.names

cap = cv2.VideoCapture("path/to/video/file.mp4")
assert cap.isOpened(), "Error reading video file"
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

# Video writer
video_writer = cv2.VideoWriter("distance_calculation.avi",
                               cv2.VideoWriter_fourcc(*'mp4v'),
                               fps,
                               (w, h))

# Init distance-calculation obj
dist_obj = distance_calculation.DistanceCalculation()
dist_obj.set_args(names=names, view_img=True)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break

    tracks = model.track(im0, persist=True, show=False)
    im0 = dist_obj.start_process(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()
Nota
  • Clica com o botão direito do rato para apagar todos os pontos desenhados
  • O clique esquerdo do rato pode ser utilizado para desenhar pontos

Argumentos opcionais set_args

Nome Tipo Predefinição Descrição
names dict None Nomes de classes
view_img bool False Apresenta quadros com contagens
line_thickness int 2 Aumenta a espessura das caixas delimitadoras
line_color RGB (255, 255, 0) Cor da linha para o mapeamento de centróides em duas caixas delimitadoras
centroid_color RGB (255, 0, 255) Cor do centróide para cada caixa delimitadora

Argumentos model.track

Nome Tipo Predefinição Descrição
source im0 None diretório de origem para imagens ou vídeos
persist bool False persistência de faixas entre fotogramas
tracker str botsort.yaml Método de rastreio 'bytetrack' ou 'botsort'
conf float 0.3 Limiar de confiança
iou float 0.5 Limiar IOU
classes list None filtra os resultados por classe, ou seja, classes=0, ou classes=[0,2,3]
verbose bool True Apresenta os resultados do rastreio de objectos


Criado em 2024-01-05, Atualizado em 2024-03-01
Autores: RizwanMunawar (5), glenn-jocher (2), AyushExel (1)

Comentários