Saltar al contenido

Recuento de objetos mediante Ultralytics YOLOv8 馃殌

驴Qu茅 es el recuento de objetos?

El recuento de objetos con Ultralytics YOLOv8 implica la identificaci贸n y el recuento precisos de objetos espec铆ficos en v铆deos y secuencias de c谩maras. YOLOv8 destaca en aplicaciones en tiempo real, proporcionando un recuento de objetos eficiente y preciso para diversos escenarios como el an谩lisis de multitudes y la vigilancia, gracias a sus algoritmos de 煤ltima generaci贸n y a sus capacidades de aprendizaje profundo.



Observa: Recuento de objetos mediante Ultralytics YOLOv8

驴Ventajas del recuento de objetos?

  • Optimizaci贸n de recursos: El recuento de objetos facilita una gesti贸n eficaz de los recursos, proporcionando recuentos precisos y optimizando la asignaci贸n de recursos en aplicaciones como la gesti贸n de inventarios.
  • Seguridad mejorada: El recuento de objetos mejora la seguridad y la vigilancia mediante el seguimiento y recuento precisos de entidades, ayudando a la detecci贸n proactiva de amenazas.
  • Toma de decisiones informada: El recuento de objetos ofrece informaci贸n valiosa para la toma de decisiones, optimizando los procesos en el comercio minorista, la gesti贸n del tr谩fico y otros 谩mbitos diversos.

Aplicaciones en el mundo real

Log铆stica Acuicultura
Recuento de paquetes con cinta transportadora Ultralytics YOLOv8 Recuento de peces en el mar utilizando Ultralytics YOLOv8
Recuento de paquetes con cinta transportadora Ultralytics YOLOv8 Recuento de peces en el mar utilizando Ultralytics YOLOv8

Recuento de objetos mediante YOLOv8 Ejemplo

from ultralytics import YOLO
from ultralytics.solutions import object_counter
import cv2

model = YOLO("yolov8n.pt")
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))

# Define region points
region_points = [(20, 400), (1080, 404), (1080, 360), (20, 360)]

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

# Init Object Counter
counter = object_counter.ObjectCounter()
counter.set_args(view_img=True,
                 reg_pts=region_points,
                 classes_names=model.names,
                 draw_tracks=True,
                 line_thickness=2)

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 = counter.start_counting(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()
from ultralytics import YOLO
from ultralytics.solutions import object_counter
import cv2

model = YOLO("yolov8n.pt")
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))

# Define region points as a polygon with 5 points
region_points = [(20, 400), (1080, 404), (1080, 360), (20, 360), (20, 400)]

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

# Init Object Counter
counter = object_counter.ObjectCounter()
counter.set_args(view_img=True,
                 reg_pts=region_points,
                 classes_names=model.names,
                 draw_tracks=True,
                 line_thickness=2)

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 = counter.start_counting(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()
from ultralytics import YOLO
from ultralytics.solutions import object_counter
import cv2

model = YOLO("yolov8n.pt")
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))

# Define line points
line_points = [(20, 400), (1080, 400)]

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

# Init Object Counter
counter = object_counter.ObjectCounter()
counter.set_args(view_img=True,
                 reg_pts=line_points,
                 classes_names=model.names,
                 draw_tracks=True,
                 line_thickness=2)

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 = counter.start_counting(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()
from ultralytics import YOLO
from ultralytics.solutions import object_counter
import cv2

model = YOLO("yolov8n.pt")
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))

line_points = [(20, 400), (1080, 400)]  # line or region points
classes_to_count = [0, 2]  # person and car classes for count

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

# Init Object Counter
counter = object_counter.ObjectCounter()
counter.set_args(view_img=True,
                 reg_pts=line_points,
                 classes_names=model.names,
                 draw_tracks=True,
                 line_thickness=2)

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,
                         classes=classes_to_count)

    im0 = counter.start_counting(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()
La regi贸n es m贸vil

Puedes mover la regi贸n a cualquier lugar del marco haciendo clic en sus bordes

Argumentos opcionales set_args

Nombre Tipo Por defecto Descripci贸n
view_img bool False Mostrar cuadros con recuentos
view_in_counts bool True Mostrar recuentos de entradas s贸lo en el fotograma de v铆deo
view_out_counts bool True Mostrar recuentos de salida s贸lo en el fotograma de v铆deo
line_thickness int 2 Aumentar los cuadros delimitadores y contar el grosor del texto
reg_pts list [(20, 400), (1260, 400)] Puntos que definen el 脕rea de la Regi贸n
classes_names dict model.model.names Diccionario de nombres de clase
count_reg_color RGB Color (255, 0, 255) Color de la regi贸n o l铆nea de recuento de objetos
track_thickness int 2 Grosor de las l铆neas de seguimiento
draw_tracks bool False Activar dibujo L铆neas de seguimiento
track_color RGB Color (0, 255, 0) Color para cada l铆nea de v铆a
line_dist_thresh int 15 Umbral de distancia euclidiana para el contador de l铆neas
count_txt_color RGB Color (255, 255, 255) Color de primer plano del texto del recuento de objetos
region_thickness int 5 Grosor de la contra regi贸n o l铆nea del objeto
count_bg_color RGB Color (255, 255, 255) Cuenta el color del resaltador

Argumentos model.track

Nombre Tipo Por defecto Descripci贸n
source im0 None directorio fuente de im谩genes o v铆deos
persist bool False persistencia de pistas entre fotogramas
tracker str botsort.yaml M茅todo de seguimiento 'bytetrack' o 'botsort'
conf float 0.3 Umbral de confianza
iou float 0.5 Umbral del pagar茅
classes list None filtrar los resultados por clase, es decir, classes=0, o classes=[0,2,3]
verbose bool True Mostrar los resultados del seguimiento de objetos


Creado 2023-12-02, Actualizado 2024-04-18
Autores: glenn-jocher (9), RizwanMunawar (1), AyushExel (1)

Comentarios