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