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 |
Observa: Recuento de objetos por clases 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 objetos mediante YOLOv8 Ejemplo
import cv2
from ultralytics import YOLO, solutions
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 = solutions.ObjectCounter(
view_img=True,
reg_pts=region_points,
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()
import cv2
from ultralytics import YOLO, solutions
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 = solutions.ObjectCounter(
view_img=True,
reg_pts=region_points,
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()
import cv2
from ultralytics import YOLO, solutions
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 = solutions.ObjectCounter(
view_img=True,
reg_pts=line_points,
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()
import cv2
from ultralytics import YOLO, solutions
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 = solutions.ObjectCounter(
view_img=True,
reg_pts=line_points,
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
Argumento ObjectCounter
Aqu铆 tienes una tabla con los ObjectCounter
argumentos:
Nombre | Tipo | Por defecto | Descripci贸n |
---|---|---|---|
names |
dict |
None |
Diccionario de nombres de clases. |
reg_pts |
list |
[(20, 400), (1260, 400)] |
Lista de puntos que definen la regi贸n de recuento. |
line_thickness |
int |
2 |
Grosor de l铆nea de los cuadros delimitadores. |
view_img |
bool |
False |
Bandera para controlar si se muestra el flujo de v铆deo. |
view_in_counts |
bool |
True |
Indicador para controlar si se muestran los recuentos en el flujo de v铆deo. |
view_out_counts |
bool |
True |
Bandera para controlar si se muestran los recuentos de salida en el flujo de v铆deo. |
draw_tracks |
bool |
False |
Indicador para controlar si se dibujan las pistas del objeto. |
Argumentos model.track
Argumento | Tipo | Por defecto | Descripci贸n |
---|---|---|---|
source |
str |
None |
Specifies the source directory for images or videos. Supports file paths and URLs. |
persist |
bool |
False |
Enables persistent tracking of objects between frames, maintaining IDs across video sequences. |
tracker |
str |
botsort.yaml |
Specifies the tracking algorithm to use, e.g., bytetrack.yaml o botsort.yaml . |
conf |
float |
0.3 |
Sets the confidence threshold for detections; lower values allow more objects to be tracked but may include false positives. |
iou |
float |
0.5 |
Sets the Intersection over Union (IoU) threshold for filtering overlapping detections. |
classes |
list |
None |
Filters results by class index. For example, classes=[0, 2, 3] only tracks the specified classes. |
verbose |
bool |
True |
Controls the display of tracking results, providing a visual output of tracked objects. |
PREGUNTAS FRECUENTES
驴C贸mo cuento objetos en un v铆deo utilizando Ultralytics YOLOv8 ?
Para contar objetos en un v铆deo utilizando Ultralytics YOLOv8 , puedes seguir estos pasos:
- Importa las bibliotecas necesarias (
cv2
,ultralytics
). - Carga un modelo YOLOv8 preentrenado.
- Define la regi贸n de recuento (por ejemplo, un pol铆gono, una l铆nea, etc.).
- Configura la captura de v铆deo e inicializa el contador de objetos.
- 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 YOLO, solutions
def count_objects_in_region(video_path, output_video_path, model_path):
"""Count objects in a specific region within a video."""
model = YOLO(model_path)
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))
region_points = [(20, 400), (1080, 404), (1080, 360), (20, 360)]
video_writer = cv2.VideoWriter(output_video_path, cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
counter = solutions.ObjectCounter(
view_img=True, reg_pts=region_points, 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()
count_objects_in_region("path/to/video.mp4", "output_video.avi", "yolov8n.pt")
Explora m谩s configuraciones y opciones en la secci贸n Recuento de objetos.
驴Qu茅 ventajas tiene utilizar Ultralytics YOLOv8 para el recuento de objetos?
Utilizar Ultralytics YOLOv8 para el recuento de objetos ofrece varias ventajas:
- Optimizaci贸n de recursos: Facilita la gesti贸n eficaz de los recursos proporcionando recuentos precisos, ayudando a optimizar la asignaci贸n de recursos en sectores como la gesti贸n de inventarios.
- Seguridad mejorada: 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: Ofrece informaci贸n valiosa para la toma de decisiones, optimizando procesos en 谩mbitos como el comercio minorista, la gesti贸n del tr谩fico, etc.
Para aplicaciones reales y ejemplos de c贸digo, visita la secci贸n Ventajas del Recuento de Objetos.
驴C贸mo puedo contar clases espec铆ficas de objetos utilizando Ultralytics YOLOv8 ?
Para contar clases espec铆ficas de objetos utilizando Ultralytics YOLOv8 , tienes que especificar las clases que te interesan durante la fase de seguimiento. A continuaci贸n se muestra un ejemplo de Python :
import cv2
from ultralytics import YOLO, solutions
def count_specific_classes(video_path, output_video_path, model_path, classes_to_count):
"""Count specific classes of objects in a video."""
model = YOLO(model_path)
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))
line_points = [(20, 400), (1080, 400)]
video_writer = cv2.VideoWriter(output_video_path, cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
counter = solutions.ObjectCounter(
view_img=True, reg_pts=line_points, 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()
count_specific_classes("path/to/video.mp4", "output_specific_classes.avi", "yolov8n.pt", [0, 2])
En este ejemplo, classes_to_count=[0, 2]
lo que significa que cuenta los objetos de la clase 0
y 2
(por ejemplo, persona y coche).
驴Por qu茅 deber铆a utilizar YOLOv8 en lugar de otros modelos de detecci贸n de objetos para aplicaciones en tiempo real?
Ultralytics YOLOv8 proporciona varias ventajas sobre otros modelos de detecci贸n de objetos, como Faster R-CNN, SSD y las versiones anteriores de YOLO :
- Velocidad y eficacia: YOLOv8 ofrece capacidades de procesamiento en tiempo real, por lo que es ideal para aplicaciones que requieren inferencia a alta velocidad, como la vigilancia y la conducci贸n aut贸noma.
- Precisi贸n: Proporciona una precisi贸n de vanguardia para las tareas de detecci贸n y seguimiento de objetos, reduciendo el n煤mero de falsos positivos y mejorando la fiabilidad general del sistema.
- Facilidad de integraci贸n: YOLOv8 ofrece una integraci贸n perfecta con varias plataformas y dispositivos, incluidos los dispositivos m贸viles y de borde, lo que es crucial para las aplicaciones modernas de IA.
- Flexibilidad: Admite diversas tareas, como la detecci贸n, segmentaci贸n y seguimiento de objetos, con modelos configurables para satisfacer los requisitos espec铆ficos de cada caso de uso.
Consulta ladocumentaci贸n de Ultralytics YOLOv8 para profundizar en sus funciones y comparar su rendimiento.
驴Puedo utilizar YOLOv8 para aplicaciones avanzadas como el an谩lisis de multitudes y la gesti贸n del tr谩fico?
S铆, Ultralytics YOLOv8 es perfectamente adecuado para aplicaciones avanzadas como el an谩lisis de multitudes y la gesti贸n del tr谩fico, gracias a su capacidad de detecci贸n en tiempo real, su escalabilidad y su flexibilidad de integraci贸n. Sus funciones avanzadas permiten seguir, contar y clasificar objetos con gran precisi贸n en entornos din谩micos. Ejemplos de casos de uso
- An谩lisis de multitudes: Supervisa y gestiona las grandes concentraciones, garantizando la seguridad y optimizando el flujo de multitudes.
- Gesti贸n del Tr谩fico: Sigue y cuenta los veh铆culos, analiza los patrones de tr谩fico y gestiona la congesti贸n en tiempo real.
Para m谩s informaci贸n y detalles de implementaci贸n, consulta la gu铆a sobre Aplicaciones en el mundo real del recuento de objetos con YOLOv8.