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

import cv2

from ultralytics import YOLO, solutions

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 = solutions.DistanceCalculation(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 DistanceCalculation()

Name Type Default Descrição
names dict None Dicionário de nomes de classes.
pixels_per_meter int 10 Fator de conversão de pixéis para metros.
view_img bool False Marca para indicar se o fluxo de vĂ­deo deve ser apresentado.
line_thickness int 2 Espessura das linhas desenhadas na imagem.
line_color tuple (255, 255, 0) Cor das linhas desenhadas na imagem (formato BGR).
centroid_color tuple (255, 0, 255) Cor dos centroides desenhados (formato BGR).

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

FAQ

Como posso calcular distâncias entre objectos utilizando Ultralytics YOLOv8 ?

Para calcular distâncias entre objectos utilizando Ultralytics YOLOv8Para isso, tens de identificar os centróides da caixa delimitadora dos objectos detectados. Este processo envolve a inicialização do DistanceCalculation classe de Ultralytics' solutions e utiliza as saídas de rastreio do modelo para calcular as distâncias. Podes consultar a implementação no exemplo de cálculo de distância.

Quais são as vantagens de utilizar o cálculo de distâncias com Ultralytics YOLOv8 ?

A utilização do cálculo da distância com Ultralytics YOLOv8 oferece várias vantagens:

  • PrecisĂŁo de localização: Fornece um posicionamento espacial preciso para os objectos.
  • Estimativa de tamanho: Ajuda a estimar tamanhos fĂ­sicos, contribuindo para uma melhor compreensĂŁo do contexto.
  • CompreensĂŁo de cenas: Melhora a compreensĂŁo da cena 3D, ajudando a melhorar a tomada de decisões em aplicações como a condução autĂłnoma e a vigilância.

Posso efetuar o cálculo da distância em fluxos de vídeo em tempo real com Ultralytics YOLOv8 ?

Sim, podes efetuar o cálculo da distância em fluxos de vídeo em tempo real com Ultralytics YOLOv8 . O processo envolve a captura de quadros de vídeo usando o OpenCV, executando a deteção de objetos YOLOv8 e usando o DistanceCalculation para calcular as distâncias entre objectos em fotogramas sucessivos. Para uma implementação detalhada, vê a exemplo de fluxo de vídeo.

Como é que elimino os pontos desenhados durante o cálculo da distância utilizando Ultralytics YOLOv8 ?

Para apagar os pontos desenhados durante o cálculo da distância com Ultralytics YOLOv8 , podes clicar com o botão direito do rato. Esta ação irá apagar todos os pontos que desenhaste. Para mais detalhes, consulta a secção de notas sob o exemplo de cálculo de distância.

Quais sĂŁo os argumentos chave para inicializar a classe DistanceCalculation em Ultralytics YOLOv8 ?

Os argumentos chave para inicializar o DistanceCalculation classe em Ultralytics YOLOv8 inclui:

  • names: Dicionário que mapeia Ă­ndices de classes para nomes de classes.
  • pixels_per_meter: Fator de conversĂŁo de pixĂ©is para metros.
  • view_img: Sinalizador para indicar se o fluxo de vĂ­deo deve ser apresentado.
  • line_thickness: Espessura das linhas desenhadas na imagem.
  • line_color: Cor das linhas desenhadas na imagem (formato BGR).
  • centroid_color: Cor dos centrĂłides (formato BGR).

Para uma lista exaustiva e valores por defeito, vĂŞ os argumentos de DistanceCalculation.



Criado em 2024-01-05, Atualizado em 2024-07-14
Autores: RizwanMunawar (5), glenn-jocher (7), IvorZhu331 (1), AyushExel (1)

Comentários