Ir al contenido

Conteo de Objetos usando Ultralytics YOLO11

¿Qué es el conteo de objetos?

Abrir el conteo de objetos en Colab

El conteo de objetos con Ultralytics YOLO11 implica la identificación y el conteo precisos de objetos específicos en videos y transmisiones de cámaras. YOLO11 destaca en aplicaciones en tiempo real, proporcionando un conteo 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 capacidades de aprendizaje profundo.



Ver: Cómo realizar el conteo de objetos en tiempo real con Ultralytics YOLO11 🍏

Ventajas del Conteo de Objetos

  • Optimización de recursos: El conteo 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 inventario.
  • Seguridad mejorada: El conteo de objetos mejora la seguridad y la vigilancia mediante el seguimiento y el conteo precisos de entidades, lo que ayuda en la detección proactiva de amenazas.
  • Toma de decisiones informada: El conteo 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 dominios.

Aplicaciones en el mundo real

Logística Acuicultura
Conteo de paquetes en cintas transportadoras utilizando Ultralytics YOLO11 Conteo de peces en el mar usando Ultralytics YOLO11
Conteo de paquetes en cintas transportadoras utilizando Ultralytics YOLO11 Conteo de peces en el mar usando Ultralytics YOLO11

Conteo de objetos utilizando 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 el ObjectCounter argumentos:

Argumento Tipo Predeterminado Descripción
model str None Ruta al archivo del modelo YOLO de Ultralytics.
show_in bool True Indica si se deben mostrar los conteos de entrada en la transmisión de video.
show_out bool True Indica si se deben mostrar los conteos de salida en la transmisión de video.
region list '[(20, 400), (1260, 400)]' Lista de puntos que definen la región de conteo.

El ObjectCounter la solución permite el uso de varios track argumentos:

Argumento Tipo Predeterminado Descripción
tracker str 'botsort.yaml' Especifica el algoritmo de seguimiento a utilizar, p. ej., 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 detecciones superpuestas.
classes list None Filtra los resultados por índice de clase. Por ejemplo, classes=[0, 2, 3] solo rastrea las clases especificadas.
verbose bool True Controla la visualización de los resultados del seguimiento, proporcionando una salida visual de los objetos rastreados.
device str None Especifica el dispositivo para la inferencia (p. ej., cpu, cuda:0 o 0). Permite a los usuarios seleccionar entre CPU, una GPU específica u otros dispositivos de cálculo para la ejecución del modelo.

Adicionalmente, los argumentos de visualización que se enumeran a continuación son compatibles:

Argumento Tipo Predeterminado Descripción
show bool False Si True, muestra las imágenes o vídeos anotados en una ventana. Ú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 None, el ancho de línea se ajusta automáticamente en función del tamaño de la imagen. Proporciona personalización visual para mayor claridad.
show_conf bool True Muestra la puntuación de confianza para cada detección junto con la etiqueta. Ofrece información sobre la certeza del modelo para cada detección.
show_labels bool True Muestra etiquetas para cada detección en la salida visual. Proporciona una comprensión inmediata de los objetos detectados.

Preguntas frecuentes

¿Cómo cuento objetos en un vídeo usando Ultralytics YOLO11?

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

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

Aquí tiene 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, consulta la solución RegionCounter para contar objetos en varias regiones simultáneamente.

¿Cuáles son las ventajas de usar Ultralytics YOLO11 para el conteo de objetos?

El uso de Ultralytics YOLO11 para el conteo de objetos ofrece varias ventajas:

  1. Optimización de recursos: Facilita la gestión eficiente de los recursos al proporcionar recuentos precisos, lo que ayuda a optimizar la asignación de recursos en industrias como la gestión de inventario.
  2. Seguridad mejorada: Mejora la seguridad y la vigilancia mediante el seguimiento y el conteo precisos de entidades, lo que ayuda en la detección proactiva de amenazas y los sistemas de seguridad.
  3. Toma de decisiones informada: Ofrece información valiosa para la toma de decisiones, optimizando procesos en dominios como el comercio minorista, la gestión del tráfico y más.
  4. Procesamiento en tiempo real: La arquitectura de YOLO11 permite la inferencia en tiempo real, lo que lo hace adecuado para transmisiones de video en vivo y aplicaciones sensibles al tiempo.

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

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

Para contar clases específicas de objetos utilizando Ultralytics YOLO11, necesitas especificar las clases que te interesan durante la fase de seguimiento. A continuación, se muestra un ejemplo en 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 (p. ej., persona y coche en el conjunto de datos COCO). Puedes encontrar más información sobre los índices de clase en el Documentación del conjunto de datos COCO.

¿Por qué debería usar 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 eficiencia: YOLO11 ofrece capacidades de procesamiento en tiempo real, lo que lo hace ideal para aplicaciones que requieren inferencia de alta velocidad, como la vigilancia y la conducción autónoma.
  2. Precisión: Proporciona una precisión de última generación 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 dispositivos móviles y de borde, lo cual es crucial para las aplicaciones modernas de IA.
  4. Flexibilidad: Admite varias tareas como la detección de objetos, la segmentación y el seguimiento con modelos configurables para satisfacer los requisitos específicos del caso de uso.

Consulte la Documentación de YOLO11 de Ultralytics para obtener una visión más profunda de sus características y comparaciones de rendimiento.

¿Puedo usar 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 debido a sus capacidades de detección en tiempo real, escalabilidad y flexibilidad de integración. Sus características avanzadas permiten el seguimiento, conteo y clasificación de objetos de alta precisión en entornos dinámicos. Los casos de uso de ejemplo incluyen:

  • Análisis de Multitudes: Supervise y gestione grandes concentraciones, garantizando la seguridad y optimizando el flujo de la multitud con el conteo basado en regiones.
  • Gestión del tráfico: Realice un seguimiento y cuente los vehículos, analice los patrones de tráfico y gestione la congestión en tiempo real con capacidades de estimación de velocidad.
  • Análisis minorista: Analice los patrones de movimiento de los clientes y las interacciones con los productos para optimizar la distribución de la tienda y mejorar la experiencia del cliente.
  • Automatización industrial: Contar productos en cintas transportadoras y supervisar las líneas de producción para el control de calidad y la mejora de la eficiencia.

Para aplicaciones más especializadas, explora las Soluciones de Ultralytics para un conjunto completo de herramientas diseñadas para los desafíos de la visión artificial en el mundo real.



📅 Creado hace 1 año ✏️ Actualizado hace 4 meses

Comentarios