Comptage d'objets à l'aide de Ultralytics YOLOv8 🚀
Qu'est-ce que le comptage d'objets ?
Le comptage d'objets avec Ultralytics YOLOv8 implique l'identification et le comptage précis d'objets spécifiques dans les vidéos et les flux de caméras. YOLOv8 excelle dans les applications en temps réel, en fournissant un comptage d'objets efficace et précis pour divers scénarios tels que l'analyse des foules et la surveillance, grâce à ses algorithmes de pointe et à ses capacités d'apprentissage profond.
Regarde : Comptage d'objets Ă l'aide de Ultralytics YOLOv8
Avantages du comptage d'objets ?
- Optimisation des ressources : Le comptage d'objets facilite la gestion efficace des ressources en fournissant des comptages précis et en optimisant l'allocation des ressources dans des applications telles que la gestion des stocks.
- Sécurité renforcée : Le comptage d'objets améliore la sécurité et la surveillance en suivant et en comptant avec précision les entités, ce qui permet une détection proactive des menaces.
- Prise de décision éclairée : Le comptage d'objets offre des informations précieuses pour la prise de décision, l'optimisation des processus dans le commerce de détail, la gestion du trafic et divers autres domaines.
Applications dans le monde réel
Logistique | Aquaculture |
---|---|
Comptage de paquets sur bande transporteuse Utilisation Ultralytics YOLOv8 | Compter les poissons dans la mer en utilisant Ultralytics YOLOv8 |
Comptage d'objets Ă l'aide de YOLOv8 Exemple
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 région est mobile
Tu peux déplacer la région n'importe où dans le cadre en cliquant sur ses bords
Arguments facultatifs set_args
Nom | Type | DĂ©faut | Description |
---|---|---|---|
view_img |
bool |
False |
Afficher les cadres avec les décomptes |
view_in_counts |
bool |
True |
Afficher les entrées uniquement sur l'image vidéo |
view_out_counts |
bool |
True |
Afficher les décomptes uniquement sur l'image vidéo |
line_thickness |
int |
2 |
Augmente les boîtes de délimitation et compte l'épaisseur du texte |
reg_pts |
list |
[(20, 400), (1260, 400)] |
Points définissant la zone de la région |
classes_names |
dict |
model.model.names |
Dictionnaire des noms de classe |
count_reg_color |
RGB Color |
(255, 0, 255) |
Couleur de l'objet, de la région de comptage ou de la ligne |
track_thickness |
int |
2 |
Épaisseur des lignes de suivi |
draw_tracks |
bool |
False |
Permettre de dessiner des lignes de suivi |
track_color |
RGB Color |
(0, 255, 0) |
Couleur pour chaque ligne de piste |
line_dist_thresh |
int |
15 |
Seuil de la distance euclidienne pour le compteur de lignes |
count_txt_color |
RGB Color |
(255, 255, 255) |
Couleur de premier plan pour le texte des comptes d'objets |
region_thickness |
int |
5 |
Épaisseur de la contre-région ou de la ligne de l'objet |
count_bg_color |
RGB Color |
(255, 255, 255) |
Compte la couleur du surligneur |
Arguments model.track
Nom | Type | DĂ©faut | Description |
---|---|---|---|
source |
im0 |
None |
répertoire source pour les images ou les vidéos |
persist |
bool |
False |
persistance des pistes entre les images |
tracker |
str |
botsort.yaml |
MĂ©thode de suivi 'bytetrack' ou 'botsort' |
conf |
float |
0.3 |
Seuil de confiance |
iou |
float |
0.5 |
Seuil de reconnaissance de dette |
classes |
list |
None |
filtre les résultats par classe, c'est-à -dire classes=0, ou classes=[0,2,3] |
verbose |
bool |
True |
Affiche les résultats du suivi des objets |
Créé le 2023-12-02, Mis à jour le 2024-04-18
Auteurs : glenn-jocher (9), RizwanMunawar (1), AyushExel (1)