Salta para o conte√ļdo

Mapeamento de objectos VisionEye View utilizando Ultralytics YOLOv8 ūüöÄ

O que é o mapeamento de objectos VisionEye?

Ultralytics YOLOv8 O VisionEye oferece a capacidade de os computadores identificarem e localizarem objectos, simulando a precisão de observação do olho humano. Esta funcionalidade permite aos computadores discernir e focar objectos específicos, de forma muito semelhante à forma como o olho humano observa os detalhes de um determinado ponto de vista.

Amostras

VisionEye View VisionEye View com seguimento de objectos VisionEye View com c√°lculo de dist√Ęncia
VisionEye Ver mapeamento de objectos utilizando Ultralytics YOLOv8 VisionEye View Object Mapping com Object Tracking usando Ultralytics YOLOv8 VisionEye View com c√°lculo de dist√Ęncia utilizando Ultralytics YOLOv8
VisionEye Ver mapeamento de objectos utilizando Ultralytics YOLOv8 VisionEye View Object Mapping com Object Tracking usando Ultralytics YOLOv8 VisionEye View com c√°lculo de dist√Ęncia utilizando Ultralytics YOLOv8

Mapeamento de objectos VisionEye utilizando YOLOv8

import cv2

from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors

model = YOLO("yolov8n.pt")
names = model.model.names
cap = cv2.VideoCapture("path/to/video/file.mp4")
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

out = cv2.VideoWriter("visioneye-pinpoint.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))

center_point = (-10, h)

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

    results = model.predict(im0)
    boxes = results[0].boxes.xyxy.cpu()
    clss = results[0].boxes.cls.cpu().tolist()

    annotator = Annotator(im0, line_width=2)

    for box, cls in zip(boxes, clss):
        annotator.box_label(box, label=names[int(cls)], color=colors(int(cls)))
        annotator.visioneye(box, center_point)

    out.write(im0)
    cv2.imshow("visioneye-pinpoint", im0)

    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

out.release()
cap.release()
cv2.destroyAllWindows()
import cv2

from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors

model = YOLO("yolov8n.pt")
cap = cv2.VideoCapture("path/to/video/file.mp4")
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

out = cv2.VideoWriter("visioneye-pinpoint.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))

center_point = (-10, h)

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

    annotator = Annotator(im0, line_width=2)

    results = model.track(im0, persist=True)
    boxes = results[0].boxes.xyxy.cpu()

    if results[0].boxes.id is not None:
        track_ids = results[0].boxes.id.int().cpu().tolist()

        for box, track_id in zip(boxes, track_ids):
            annotator.box_label(box, label=str(track_id), color=colors(int(track_id)))
            annotator.visioneye(box, center_point)

    out.write(im0)
    cv2.imshow("visioneye-pinpoint", im0)

    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

out.release()
cap.release()
cv2.destroyAllWindows()
import math

import cv2

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

model = YOLO("yolov8s.pt")
cap = cv2.VideoCapture("Path/to/video/file.mp4")

w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

out = cv2.VideoWriter("visioneye-distance-calculation.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))

center_point = (0, h)
pixel_per_meter = 10

txt_color, txt_background, bbox_clr = ((0, 0, 0), (255, 255, 255), (255, 0, 255))

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

    annotator = Annotator(im0, line_width=2)

    results = model.track(im0, persist=True)
    boxes = results[0].boxes.xyxy.cpu()

    if results[0].boxes.id is not None:
        track_ids = results[0].boxes.id.int().cpu().tolist()

        for box, track_id in zip(boxes, track_ids):
            annotator.box_label(box, label=str(track_id), color=bbox_clr)
            annotator.visioneye(box, center_point)

            x1, y1 = int((box[0] + box[2]) // 2), int((box[1] + box[3]) // 2)  # Bounding box centroid

            distance = (math.sqrt((x1 - center_point[0]) ** 2 + (y1 - center_point[1]) ** 2)) / pixel_per_meter

            text_size, _ = cv2.getTextSize(f"Distance: {distance:.2f} m", cv2.FONT_HERSHEY_SIMPLEX, 1.2, 3)
            cv2.rectangle(im0, (x1, y1 - text_size[1] - 10), (x1 + text_size[0] + 10, y1), txt_background, -1)
            cv2.putText(im0, f"Distance: {distance:.2f} m", (x1, y1 - 5), cv2.FONT_HERSHEY_SIMPLEX, 1.2, txt_color, 3)

    out.write(im0)
    cv2.imshow("visioneye-distance-calculation", im0)

    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

out.release()
cap.release()
cv2.destroyAllWindows()

visioneye Argumentos

Nome Tipo Predefinição Descrição
color tuple (235, 219, 11) Cor do centróide da linha e do objeto
pin_color tuple (255, 0, 255) VisionEye cor exacta

Nota

Se tiveres d√ļvidas, n√£o hesites em colocar as tuas quest√Ķes na sec√ß√£oUltralytics ou na sec√ß√£o de discuss√£o mencionada abaixo.

FAQ

Como é que começo a utilizar o mapeamento de objectos do VisionEye com Ultralytics YOLOv8 ?

Para começar a usar o mapeamento de objetos do VisionEye com Ultralytics YOLOv8 , primeiro, é necessário instalar o pacote Ultralytics YOLO via pip. Em seguida, podes utilizar o código de exemplo fornecido na documentação para configurar a deteção de objectos com o VisionEye. Aqui está um exemplo simples para começares:

import cv2

from ultralytics import YOLO

model = YOLO("yolov8n.pt")
cap = cv2.VideoCapture("path/to/video/file.mp4")

while True:
    ret, frame = cap.read()
    if not ret:
        break

    results = model.predict(frame)
    for result in results:
        # Perform custom logic with result
        pass

    cv2.imshow("visioneye", frame)
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

cap.release()
cv2.destroyAllWindows()

Quais são as principais características da capacidade de localização de objectos da VisionEye utilizando Ultralytics YOLOv8 ?

O rastreio de objectos do VisionEye com Ultralytics YOLOv8 permite aos utilizadores seguir o movimento de objectos dentro de um quadro de vídeo. As principais características incluem:

  1. Seguimento de objectos em tempo real: Acompanha os objectos à medida que se movem.
  2. Identificação de objectos: Utiliza os poderosos algoritmos de deteção do YOLOv8.
  3. C√°lculo de dist√Ęncias: Calcula as dist√Ęncias entre os objectos e os pontos especificados.
  4. Anotação e visualização: Fornece marcadores visuais para objetos rastreados.

Segue-se um breve excerto de código que demonstra o rastreio com o VisionEye:

import cv2

from ultralytics import YOLO

model = YOLO("yolov8n.pt")
cap = cv2.VideoCapture("path/to/video/file.mp4")

while True:
    ret, frame = cap.read()
    if not ret:
        break

    results = model.track(frame, persist=True)
    for result in results:
        # Annotate and visualize tracking
        pass

    cv2.imshow("visioneye-tracking", frame)
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

cap.release()
cv2.destroyAllWindows()

Para obter um guia completo, visita o VisionEye Object Mapping with Object Tracking.

Como √© que posso calcular dist√Ęncias com o modelo YOLOv8 do VisionEye?

O c√°lculo da dist√Ęncia com o VisionEye e Ultralytics YOLOv8 envolve a determina√ß√£o da dist√Ęncia de objectos detectados a partir de um ponto especificado na imagem. Melhora as capacidades de an√°lise espacial, √ļteis em aplica√ß√Ķes como a condu√ß√£o aut√≥noma e a vigil√Ęncia.

Segue um exemplo simplificado:

import math

import cv2

from ultralytics import YOLO

model = YOLO("yolov8s.pt")
cap = cv2.VideoCapture("path/to/video/file.mp4")
center_point = (0, 480)  # Example center point
pixel_per_meter = 10

while True:
    ret, frame = cap.read()
    if not ret:
        break

    results = model.track(frame, persist=True)
    for result in results:
        # Calculate distance logic
        distances = [
            (math.sqrt((box[0] - center_point[0]) ** 2 + (box[1] - center_point[1]) ** 2)) / pixel_per_meter
            for box in results
        ]

    cv2.imshow("visioneye-distance", frame)
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

cap.release()
cv2.destroyAllWindows()

Para obter instru√ß√Ķes detalhadas, consulta o VisionEye com c√°lculo de dist√Ęncia.

Por que razão devo utilizar Ultralytics YOLOv8 para mapeamento e localização de objectos?

Ultralytics YOLOv8 é conhecido pela sua velocidade, precisão e facilidade de integração, tornando-o uma escolha de topo para o mapeamento e localização de objectos. As principais vantagens incluem:

  1. Desempenho de √ļltima gera√ß√£o: Oferece uma elevada precis√£o na dete√ß√£o de objectos em tempo real.
  2. Flexibilidade: Suporta v√°rias tarefas, como a dete√ß√£o, o seguimento e o c√°lculo da dist√Ęncia.
  3. Comunidade e suporte: Documentação extensa e comunidade GitHub ativa para resolução de problemas e melhorias.
  4. Facilidade de utilização: A API intuitiva simplifica tarefas complexas, permitindo uma rápida implementação e iteração.

Para mais informa√ß√Ķes sobre aplica√ß√Ķes e benef√≠cios, consulta a documenta√ß√£oUltralytics YOLOv8 .

Como posso integrar o VisionEye com outras ferramentas de aprendizagem autom√°tica, como Comet ou ClearML?

Ultralytics YOLOv8 pode integrar-se perfeitamente com várias ferramentas de aprendizagem automática, como Comet e ClearML, melhorando o acompanhamento de experiências, a colaboração e a reprodutibilidade. Segue os guias detalhados sobre como utilizar YOLOv5 com Comet e integrar YOLOv8 com ClearML para começar.

Para mais explora√ß√Ķes e exemplos de integra√ß√£o, consulta o nosso Ultralytics Integrations Guide.



Criado em 2023-12-18, Atualizado em 2024-07-05
Autores: glenn-jocher (13), IvorZhu331 (1), RizwanMunawar (1)

Coment√°rios