Comptage d'objets à l'aide de Ultralytics YOLO11
Qu'est-ce que le comptage d'objets ?
Le comptage d'objets avec Ultralytics YOLO11 implique l'identification et le comptage précis d'objets spécifiques dans les vidéos et les flux de caméras. YOLO11 excelle dans les applications en temps réel, 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.
Regarder : Comptage d'objets par classe à 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, optimisant ainsi l'allocation des ressources dans des applications telles que la gestion des stocks.
- Sécurité renforcée : Le comptage d'objets renforce 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 YOLO11 | Compter les poissons dans la mer en utilisant Ultralytics YOLO11 |
Comptage d'objets avec Ultralytics YOLO
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
Arguments
Voici un tableau avec les ObjectCounter
arguments :
Argument | Type | Défaut | Description |
---|---|---|---|
model |
str |
None |
Chemin d'accès au fichier modèleYOLO d'Ultralytics . |
show_in |
bool |
True |
Indicateur permettant de contrôler l'affichage du nombre d'entrées dans le flux vidéo. |
show_out |
bool |
True |
Indicateur permettant de contrôler l'affichage du nombre de sorties sur le flux vidéo. |
region |
list |
[(20, 400), (1260, 400)] |
Liste des points définissant la région de comptage. |
Le ObjectCounter
permet d'utiliser plusieurs track
arguments :
Argument | Type | Défaut | Description |
---|---|---|---|
tracker |
str |
'botsort.yaml' |
Spécifie l'algorithme de suivi à utiliser, par exemple, bytetrack.yaml ou botsort.yaml . |
conf |
float |
0.3 |
Définit le seuil de confiance pour les détections ; des valeurs plus faibles permettent de suivre plus d'objets mais peuvent inclure des faux positifs. |
iou |
float |
0.5 |
Définit le seuil d'intersection sur l'union (IoU) pour le filtrage des détections qui se chevauchent. |
classes |
list |
None |
Filtre les résultats par indice de classe. Par exemple, classes=[0, 2, 3] ne suit que les classes spécifiées. |
verbose |
bool |
True |
Contrôle l'affichage des résultats du suivi, fournissant une sortie visuelle des objets suivis. |
device |
str |
None |
Spécifie le dispositif d'inférence (par ex, cpu , cuda:0 ou 0 ). Permet aux utilisateurs de choisir entre CPU, un GPU spécifique ou d'autres dispositifs de calcul pour l'exécution du modèle. |
En outre, les arguments de visualisation énumérés ci-dessous sont pris en charge :
Argument | Type | Défaut | Description |
---|---|---|---|
show |
bool |
False |
Si True affiche les images ou vidéos annotées dans une fenêtre. Utile pour un retour d'information visuel immédiat pendant le développement ou les tests. |
line_width |
None or int |
None |
Spécifie la largeur de ligne des boîtes de délimitation. Si les None La largeur de la ligne est automatiquement ajustée en fonction de la taille de l'image. Permet une personnalisation visuelle pour plus de clarté. |
FAQ
Comment compter les objets dans une vidéo en utilisant Ultralytics YOLO11 ?
Pour compter les objets dans une vidéo à l'aide de Ultralytics YOLO11 , vous pouvez suivre les étapes suivantes :
- Importer les bibliothèques nécessaires (
cv2
,ultralytics
). - Définir la région de comptage (par exemple, un polygone, une ligne, etc.).
- Configurer la capture vidéo et initialiser le compteur d'objets.
- Traiter chaque image pour suivre les objets et les compter dans la région définie.
Voici un exemple simple de comptage dans une région :
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")
Pour des configurations et des options plus avancées, consultez la solution RegionCounter pour le comptage simultané d'objets dans plusieurs régions.
Quels sont les avantages de l'utilisation de Ultralytics YOLO11 pour le comptage d'objets ?
L'utilisation de Ultralytics YOLO11 pour le comptage d'objets présente plusieurs avantages :
- Optimisation des ressources : Il facilite la gestion efficace des ressources en fournissant des comptages précis, ce qui permet d'optimiser l'affectation des ressources dans des secteurs tels que la gestion des stocks.
- Sécurité renforcée : Il améliore la sécurité et la surveillance en suivant et en comptant avec précision les entités, ce qui contribue à la détection proactive des menaces et à la mise en place de systèmes de sécurité.
- Prise de décision éclairée : Il offre des informations précieuses pour la prise de décision, l'optimisation des processus dans des domaines tels que la vente au détail, la gestion du trafic, etc.
- Traitement en temps réel : L'architecture de YOLO11 permet une inférence en temps réel, ce qui la rend adaptée aux flux vidéo en direct et aux applications sensibles au temps.
Pour des exemples de mise en œuvre et des applications pratiques, découvrez la solution TrackZone pour le suivi d'objets dans des zones spécifiques.
Comment puis-je compter des classes spécifiques d'objets en utilisant Ultralytics YOLO11 ?
Pour compter des classes d'objets spécifiques à l'aide de Ultralytics YOLO11 , vous devez spécifier les classes qui vous intéressent pendant la phase de suivi. Vous trouverez ci-dessous un exemple 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])
Dans cet exemple, classes_to_count=[0, 2]
signifie qu'il compte les objets de la classe 0
et 2
(par exemple, personne et voiture dans l'ensemble de données COCO). Vous trouverez plus d'informations sur les indices de classe dans la section Documentation sur le jeu de données COCO.
Pourquoi utiliser YOLO11 plutôt que d'autres modèles de détection d'objets pour les applications en temps réel ?
Ultralytics YOLO11 offre plusieurs avantages par rapport à d'autres modèles de détection d'objets comme Faster R-CNN, SSD, et les versions précédentes de YOLO :
- Vitesse et efficacité : YOLO11 offre des capacités de traitement en temps réel, ce qui le rend idéal pour les applications nécessitant une inférence à grande vitesse, telles que la surveillance et la conduite autonome.
- Précision: il offre une précision de pointe pour les tâches de détection et de suivi des objets, en réduisant le nombre de faux positifs et en améliorant la fiabilité globale du système.
- Facilité d'intégration : YOLO11 offre une intégration transparente avec diverses plateformes et appareils, y compris les appareils mobiles et périphériques, ce qui est crucial pour les applications modernes d'IA.
- Flexibilité : Prise en charge de diverses tâches telles que la détection, la segmentation et le suivi d'objets à l'aide de modèles configurables pour répondre aux exigences de cas d'utilisation spécifiques.
Consultez lesite Ultralytics YOLO11 Documentation pour en savoir plus sur les caractéristiques et les comparaisons de performances.
Puis-je utiliser YOLO11 pour des applications avancées telles que l'analyse des foules et la gestion du trafic ?
Oui, Ultralytics YOLO11 est parfaitement adapté aux applications avancées telles que l'analyse des foules et la gestion du trafic, grâce à ses capacités de détection en temps réel, à son évolutivité et à sa flexibilité d'intégration. Ses fonctionnalités avancées permettent le suivi, le comptage et la classification d'objets avec une grande précision dans des environnements dynamiques. Voici quelques exemples de cas d'utilisation :
- Analyse des foules : Surveillez et gérez les grands rassemblements, en assurant la sécurité et en optimisant les flux de foule grâce au comptage par région.
- Gestion du trafic : Suivez et comptez les véhicules, analysez les schémas de circulation et gérez les embouteillages en temps réel grâce à des fonctions d'estimation de la vitesse.
- Analyse de la vente au détail : Analyse des mouvements des clients et des interactions avec les produits afin d'optimiser l'agencement des magasins et d'améliorer l'expérience des clients.
- Automatisation industrielle : Compter les produits sur les bandes transporteuses et surveiller les lignes de production pour le contrôle de la qualité et l'amélioration de l'efficacité.
Pour des applications plus spécialisées, découvrez les solutionsUltralytics pour un ensemble complet d'outils conçus pour relever les défis de la vision par ordinateur dans le monde réel.