Saltar al contenido

VisionEye Ver Mapeo de objetos mediante Ultralytics YOLOv8 馃殌

驴Qu茅 es el mapeo de objetos VisionEye?

Ultralytics YOLOv8 VisionEye ofrece a los ordenadores la capacidad de identificar y se帽alar objetos, simulando la precisi贸n de observaci贸n del ojo humano. Esta funcionalidad permite a los ordenadores discernir y centrarse en objetos concretos, de forma muy parecida a como el ojo humano observa los detalles desde un punto de vista concreto.

Muestras

Vista VisionEye VisionEye Vista con seguimiento de objetos VisionEye Vista con c谩lculo de distancia
VisionEye Ver Mapeo de objetos mediante Ultralytics YOLOv8 VisionEye Ver Mapeo de objetos con seguimiento de objetos mediante Ultralytics YOLOv8 Vista VisionEye con c谩lculo de distancias mediante Ultralytics YOLOv8
VisionEye Ver Mapeo de objetos mediante Ultralytics YOLOv8 VisionEye Ver Mapeo de objetos con seguimiento de objetos mediante Ultralytics YOLOv8 Vista VisionEye con c谩lculo de distancias mediante Ultralytics YOLOv8

Cartograf铆a de objetos VisionEye mediante 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

Nombre Tipo Por defecto Descripci贸n
color tuple (235, 219, 11) Color del centroide de la l铆nea y del objeto
pin_color tuple (255, 0, 255) Color preciso VisionEye

Nota

Para cualquier consulta, no dudes en publicar tus preguntas en la Secci贸n de Cuestiones deUltralytics o en la secci贸n de debate mencionada m谩s abajo.

PREGUNTAS FRECUENTES

驴C贸mo empiezo a utilizar la cartograf铆a de objetos VisionEye con Ultralytics YOLOv8 ?

Para empezar a utilizar el mapeo de objetos de VisionEye con Ultralytics YOLOv8 , primero tendr谩s que instalar el paquete Ultralytics YOLO mediante pip. A continuaci贸n, puedes utilizar el c贸digo de ejemplo proporcionado en la documentaci贸n para configurar la detecci贸n de objetos con VisionEye. Aqu铆 tienes un ejemplo sencillo para empezar:

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()

驴Cu谩les son las principales caracter铆sticas de la capacidad de seguimiento de objetos de VisionEye mediante Ultralytics YOLOv8 ?

El seguimiento de objetos de VisionEye con Ultralytics YOLOv8 permite a los usuarios seguir el movimiento de los objetos dentro de un fotograma de v铆deo. Entre sus principales caracter铆sticas se incluyen:

  1. Seguimiento de objetos en tiempo real: Sigue a los objetos mientras se mueven.
  2. Identificaci贸n de objetos: Utiliza los potentes algoritmos de detecci贸n de YOLOv8.
  3. C谩lculo de distancias: Calcula distancias entre objetos y puntos especificados.
  4. Anotaci贸n y Visualizaci贸n: Proporciona marcadores visuales para los objetos rastreados.

Aqu铆 tienes un breve fragmento de c贸digo que demuestra el seguimiento con 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 obtener una gu铆a completa, visita el Mapa de objetos VisionEye con seguimiento de objetos.

驴C贸mo puedo calcular distancias con el modelo YOLOv8 de VisionEye?

El c谩lculo de distancias con VisionEye y Ultralytics YOLOv8 consiste en determinar la distancia de los objetos detectados desde un punto concreto del fotograma. Mejora la capacidad de an谩lisis espacial, 煤til en aplicaciones como la conducci贸n aut贸noma y la vigilancia.

He aqu铆 un ejemplo 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 obtener instrucciones detalladas, consulta VisionEye con c谩lculo de distancia.

驴Por qu茅 deber铆a utilizar Ultralytics YOLOv8 para el mapeo y seguimiento de objetos?

Ultralytics YOLOv8 es famoso por su velocidad, precisi贸n y facilidad de integraci贸n, lo que lo convierte en la mejor opci贸n para el mapeo y seguimiento de objetos. Sus principales ventajas son:

  1. Rendimiento de vanguardia: Ofrece una gran precisi贸n en la detecci贸n de objetos en tiempo real.
  2. Flexibilidad: Admite diversas tareas, como detecci贸n, seguimiento y c谩lculo de distancias.
  3. Comunidad y soporte: Amplia documentaci贸n y activa comunidad GitHub para la resoluci贸n de problemas y mejoras.
  4. Facilidad de uso: La API intuitiva simplifica las tareas complejas, permitiendo una r谩pida implantaci贸n e iteraci贸n.

Para m谩s informaci贸n sobre solicitudes y prestaciones, consulta la documentaci贸n deUltralytics YOLOv8 .

驴C贸mo puedo integrar VisionEye con otras herramientas de aprendizaje autom谩tico como Comet o ClearML?

Ultralytics YOLOv8 puede integrarse perfectamente con varias herramientas de aprendizaje autom谩tico como Comet y ClearML, mejorando el seguimiento de los experimentos, la colaboraci贸n y la reproducibilidad. Sigue las gu铆as detalladas sobre c贸mo utilizar YOLOv5 con Comet e integrar YOLOv8 con ClearML para empezar.

Para m谩s informaci贸n y ejemplos de integraci贸n, consulta nuestra Gu铆a de integracionesUltralytics .



Creado 2023-12-18, Actualizado 2024-07-05
Autores: glenn-jocher (13), IvorZhu331 (1), RizwanMunawar (1)

Comentarios