Ir al contenido

Recuento de objetos mediante Ultralytics YOLO11

¿Qué es el recuento de objetos?

Recuento de objetos abiertos en Colab

El recuento de objetos con Ultralytics YOLO11 implica la identificación y el recuento precisos de objetos específicos en vídeos y secuencias de cámaras. YOLO11 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 por clases mediante Ultralytics YOLOv8

Ventajas del recuento de objetos

  • Optimización de recursos: El recuento de objetos facilita la gestión eficiente de los recursos al proporcionar recuentos precisos, 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, lo que contribuye a la detección proactiva de amenazas.
  • Toma de decisiones informada: El recuento de objetos ofrece información valiosa para la toma de decisiones y la optimización de procesos en el comercio minorista, la gestión del tráfico y otros ámbitos.

Aplicaciones en el mundo real

Logística Acuicultura
Recuento de paquetes con cinta transportadora Ultralytics YOLO11 Recuento de peces en el mar mediante Ultralytics YOLO11
Recuento de paquetes con cinta transportadora Ultralytics YOLO11 Recuento de peces en el mar mediante Ultralytics YOLO11

Recuento de objetos con Ultralytics YOLO

# Run a counting example
yolo solutions count show=True

# Pass a source video
yolo solutions count source="path/to/video.mp4"

# Pass region coordinates
yolo solutions count region="[(20, 400), (1080, 400), (1080, 360), (20, 360)]"
import cv2

from ultralytics import solutions

cap = cv2.VideoCapture("path/to/video.mp4")
assert cap.isOpened(), "Error reading video file"

# region_points = [(20, 400), (1080, 400)]                                      # line counting
region_points = [(20, 400), (1080, 400), (1080, 360), (20, 360)]  # rectangle region
# region_points = [(20, 400), (1080, 400), (1080, 360), (20, 360), (20, 400)]   # polygon region

# Video writer
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 = cv2.VideoWriter("object_counting_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Initialize object counter object
counter = solutions.ObjectCounter(
    show=True,  # display the output
    region=region_points,  # pass region points
    model="yolo11n.pt",  # model="yolo11n-obb.pt" for object counting with OBB model.
    # classes=[0, 2],  # count specific classes i.e. person and car with COCO pretrained model.
    # tracker="botsort.yaml",  # choose trackers i.e "bytetrack.yaml"
)

# Process video
while cap.isOpened():
    success, im0 = cap.read()

    if not success:
        print("Video frame is empty or processing is complete.")
        break

    results = counter(im0)

    # print(results)  # access the output

    video_writer.write(results.plot_im)  # write the processed frame.

cap.release()
video_writer.release()
cv2.destroyAllWindows()  # destroy all opened windows

ObjectCounter Argumentos

Aquí tiene una tabla con los ObjectCounter argumentos:

Argumento Tipo Por defecto Descripción
model str None Ruta al archivo del modeloYOLO Ultralytics .
show_in bool True Indicador para controlar si se muestran los recuentos en el flujo de vídeo.
show_out bool True Indicador para controlar si se muestran los recuentos de salida en el flujo de vídeo.
region list [(20, 400), (1260, 400)] Lista de puntos que definen la región de recuento.

En ObjectCounter permite utilizar varios track argumentos:

Argumento Tipo Por defecto Descripción
tracker str 'botsort.yaml' Especifica el algoritmo de seguimiento a utilizar, por ejemplo, bytetrack.yaml o botsort.yaml.
conf float 0.3 Establece el umbral de confianza para las detecciones; los valores más bajos permiten rastrear más objetos pero pueden incluir falsos positivos.
iou float 0.5 Establece el umbral de intersección sobre unión (IoU) para filtrar las detecciones solapadas.
classes list None Filtra los resultados por índice de clase. Por ejemplo, classes=[0, 2, 3] sólo rastrea las clases especificadas.
verbose bool True Controla la visualización de los resultados del rastreo, proporcionando una salida visual de los objetos rastreados.
device str None Especifica el dispositivo para la inferencia (por ejemplo, cpu, cuda:0 o 0). Permite a los usuarios seleccionar entre CPU, un GPU específico u otros dispositivos de cálculo para la ejecución del modelo.

Además, se admiten los argumentos de visualización enumerados a continuación:

Argumento Tipo Por defecto Descripción
show bool False Si Truemuestra las imágenes o vídeos anotados en una ventana. Resulta útil para obtener información visual inmediata durante el desarrollo o las pruebas.
line_width None or int None Especifica el ancho de línea de los cuadros delimitadores. Si NoneEl ancho de línea se ajusta automáticamente en función del tamaño de la imagen. Proporciona personalización visual para mayor claridad.

PREGUNTAS FRECUENTES

¿Cómo puedo contar objetos en un vídeo utilizando Ultralytics YOLO11 ?

Para contar objetos en un vídeo utilizando Ultralytics YOLO11 , puede seguir estos pasos:

  1. Importe las bibliotecas necesarias (cv2, ultralytics).
  2. Defina la región de recuento (por ejemplo, un polígono, una línea, etc.).
  3. Configure la captura de vídeo e inicialice el contador de objetos.
  4. Procesa cada fotograma para rastrear los objetos y contarlos dentro de la región definida.

He aquí un ejemplo sencillo para contar en una región:

import cv2

from ultralytics import solutions


def count_objects_in_region(video_path, output_video_path, model_path):
    """Count objects in a specific region within a video."""
    cap = cv2.VideoCapture(video_path)
    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 = cv2.VideoWriter(output_video_path, cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

    region_points = [(20, 400), (1080, 400), (1080, 360), (20, 360)]
    counter = solutions.ObjectCounter(show=True, region=region_points, model=model_path)

    while cap.isOpened():
        success, im0 = cap.read()
        if not success:
            print("Video frame is empty or processing is complete.")
            break
        results = counter(im0)
        video_writer.write(results.plot_im)

    cap.release()
    video_writer.release()
    cv2.destroyAllWindows()


count_objects_in_region("path/to/video.mp4", "output_video.avi", "yolo11n.pt")

Para configuraciones y opciones más avanzadas, consulte la solución RegionCounter para contar objetos en varias regiones simultáneamente.

¿Cuáles son las ventajas de utilizar Ultralytics YOLO11 para el recuento de objetos?

La utilización de Ultralytics YOLO11 para el recuento de objetos ofrece varias ventajas:

  1. Optimización de recursos: Facilita la gestión eficiente de los recursos al proporcionar recuentos precisos, ayudando a optimizar la asignación de recursos en sectores como la gestión de inventarios.
  2. Seguridad mejorada: Mejora la seguridad y la vigilancia mediante el seguimiento y recuento precisos de entidades, ayudando a la detección proactiva de amenazas y a los sistemas de seguridad.
  3. Toma de decisiones informada: Ofrece información valiosa para la toma de decisiones, optimizando procesos en ámbitos como el comercio minorista o la gestión del tráfico, entre otros.
  4. Procesamiento en tiempo real: La arquitectura de YOLO11 permite la inferencia en tiempo real, lo que la hace adecuada para flujos de vídeo en directo y aplicaciones sensibles al tiempo.

Para ver ejemplos de implementación y aplicaciones prácticas, explore la solución TrackZone para el seguimiento de objetos en zonas específicas.

¿Cómo puedo contar clases específicas de objetos utilizando Ultralytics YOLO11 ?

Para contar clases específicas de objetos utilizando Ultralytics YOLO11 , debe especificar las clases que le interesan durante la fase de seguimiento. A continuación se muestra un ejemplo de Python :

import cv2

from ultralytics import solutions


def count_specific_classes(video_path, output_video_path, model_path, classes_to_count):
    """Count specific classes of objects in a video."""
    cap = cv2.VideoCapture(video_path)
    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 = cv2.VideoWriter(output_video_path, cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

    line_points = [(20, 400), (1080, 400)]
    counter = solutions.ObjectCounter(show=True, region=line_points, model=model_path, classes=classes_to_count)

    while cap.isOpened():
        success, im0 = cap.read()
        if not success:
            print("Video frame is empty or processing is complete.")
            break
        results = counter(im0)
        video_writer.write(results.plot_im)

    cap.release()
    video_writer.release()
    cv2.destroyAllWindows()


count_specific_classes("path/to/video.mp4", "output_specific_classes.avi", "yolo11n.pt", [0, 2])

En este ejemplo, classes_to_count=[0, 2] significa que cuenta objetos de la clase 0 y 2 (por ejemplo, persona y coche en el conjunto de datos COCO). Encontrará más información sobre los índices de clase en la página Documentación del conjunto de datos COCO.

¿Por qué debería utilizar YOLO11 en lugar de otros modelos de detección de objetos para aplicaciones en tiempo real?

Ultralytics YOLO11 proporciona varias ventajas sobre otros modelos de detección de objetos como Faster R-CNN, SSD y versiones anteriores de YOLO :

  1. Velocidad y eficacia: YOLO11 ofrece capacidades de procesamiento en tiempo real, lo que lo hace ideal para aplicaciones que requieren inferencia a alta velocidad, como la vigilancia y la conducción autónoma.
  2. Precisión: proporciona una precisión de vanguardia para tareas de detección y seguimiento de objetos, reduciendo el número de falsos positivos y mejorando la fiabilidad general del sistema.
  3. Facilidad de integración: YOLO11 ofrece una integración perfecta con varias plataformas y dispositivos, incluidos los dispositivos móviles y de borde, lo cual es crucial para las aplicaciones modernas de IA.
  4. Flexibilidad: Admite diversas tareas como la detección, la segmentación y el seguimiento de objetos con modelos configurables para satisfacer requisitos de casos de uso específicos.

Consultela documentación de Ultralytics YOLO11 para profundizar en sus características y comparar su rendimiento.

¿Puedo utilizar YOLO11 para aplicaciones avanzadas como el análisis de multitudes y la gestión del tráfico?

Sí, Ultralytics YOLO11 es perfectamente adecuado para aplicaciones avanzadas como el análisis de multitudes y la gestión del tráfico gracias a sus capacidades de detección en tiempo real, escalabilidad y flexibilidad de integración. Sus funciones avanzadas permiten el seguimiento, recuento y clasificación de objetos con gran precisión en entornos dinámicos. Algunos ejemplos de uso son:

  • Análisis de multitudes: Supervise y gestione grandes concentraciones, garantizando la seguridad y optimizando el flujo de multitudes con un recuento basado en regiones.
  • Gestión del tráfico: Siga y cuente los vehículos, analice los patrones de tráfico y gestione los atascos en tiempo real con funciones de estimación de la velocidad.
  • Análisis del comercio minorista: Analice los patrones de movimiento de los clientes y las interacciones con los productos para optimizar la distribución de las tiendas y mejorar la experiencia de los clientes.
  • Automatización industrial: Cuente los productos en las cintas transportadoras y supervise las líneas de producción para controlar la calidad y mejorar la eficiencia.

Para aplicaciones más especializadas, explore Ultralytics Solutions para obtener un completo conjunto de herramientas diseñadas para los retos de la visión por ordenador en el mundo real.

Creado hace 1 año ✏️ Actualizado hace 8 días

Comentarios