Comptage d’objets dans des zones avec Ultralytics YOLO26#
La solution RegionCounter d’Ultralytics YOLO26 suit les objets d’une image vidéo à l’autre et compte, à chaque image, ceux dont le centre de la boîte englobante se trouve dans chacune des zones que tu as définies. Chaque zone est dessinée sur l’image avec son propre décompte en direct. Tu peux ainsi surveiller plusieurs espaces, comme des allées de magasin, des voies de circulation ou des zones de production, avec un seul appel Python ou une seule commande CLI.
Regarder : Comptage d’objets dans différentes zones avec Ultralytics YOLO | Solutions Ultralytics
Pourquoi utiliser le comptage par zone ?#
- Plusieurs zones en un seul passage : Transmets un dictionnaire de polygones nommés ; chaque zone reçoit alors son propre décompte affiché sur l’image, ce qui te permet de couvrir tous les espaces qui t’intéressent avec un seul flux vidéo.
- Suivi intégré : La solution exécute en interne la détection YOLO26 et le suivi d’objets, sans nécessiter de pipeline de suivi distinct.
- Décomptes accessibles par programmation : Chaque image traitée renvoie un objet de résultats contenant un dictionnaire des décomptes par zone, prêt à être utilisé dans des tableaux de bord, des alertes ou des journaux.
Applications concrètes#
| Commerce de détail | Rues de marché |
|---|---|
![]() | ![]() |
| Comptage de personnes par zone avec Ultralytics YOLO | Comptage de foule par zone avec Ultralytics YOLO |
Comment compter des objets dans des zones avec Ultralytics YOLO#
Exécute la solution RegionCounter sur une source vidéo depuis la CLI ou Python. Une zone peut être une liste de points (une seule zone) ou un dictionnaire associant des noms de zones à des listes de points. L’exemple Python ci-dessous compte les objets dans deux zones nommées et écrit les images traitées dans un fichier vidéo de sortie :
# Run a region counting example
yolo solutions region show=True
# Pass a source video
yolo solutions region source="path/to/video.mp4"
# Pass a custom region
yolo solutions region region="[(20, 400), (1080, 400), (1080, 360), (20, 360)]"Arguments de RegionCounter()#
Voici un tableau des arguments de RegionCounter :
| Argument | Type | Valeur par défaut | Description |
|---|---|---|---|
model | str | None | Chemin vers un fichier de modèle Ultralytics YOLO. |
region | list ou dict | None | Points définissant la région d'intérêt : une liste de tuples (x, y) ou un dictionnaire associant des noms de régions à des listes de points pour plusieurs régions (uniquement RegionCounter). Si None, les solutions qui nécessitent une région utilisent une région par défaut prédéfinie. |
line_width | int | 2 | Épaisseur des lignes des boîtes, des points clés et des compteurs dessinés par la solution. |
verbose | bool | True | Active le journal de la solution pour chaque image, qui indique la forme de l'entrée, le nombre d'éléments par classe et la vitesse de traitement. L'appel de suivi reste toujours silencieux. |
La solution RegionCounter permet d’utiliser les paramètres de suivi d’objets :
| Argument | Type | Valeur par défaut | Description |
|---|---|---|---|
tracker | str | 'tracktrack.yaml' | Indique l'algorithme de suivi à utiliser. Options intégrées : botsort.yaml, bytetrack.yaml, ocsort.yaml, deepocsort.yaml, fasttrack.yaml, tracktrack.yaml. |
conf | float | 0.25 | Définit le seuil de confiance des détections ; des valeurs plus faibles permettent de suivre davantage d'objets, mais peuvent inclure des faux positifs. |
iou | float | 0.7 | Définit le seuil d'intersection sur l'union (IoU) utilisé pour filtrer les détections qui se chevauchent. |
classes | list | None | Filtre les résultats selon l'indice de classe. Par exemple, classes=[0, 2, 3] ne suit que les classes spécifiées. |
device | str | None | Indique le périphérique utilisé pour l'inférence (par exemple, cpu, cuda:0 ou 0). Permet de choisir entre le CPU, un GPU spécifique ou d'autres périphériques de calcul pour l'exécution du modèle. |
imgsz | int or tuple | 640 | Taille cible de l'image pour l'inférence : un entier pour une image carrée ou une paire (height, width). Les dimensions sont ajustées au stride du modèle. |
max_det | int | 300 | Nombre maximal de détections conservées par image avant le suivi, ce qui limite le nombre d'objets qu'une solution traite dans les scènes denses. |
quantize | int or str | None | Précision de l'inférence : 16 (FP16) ou 32/non défini (FP32) pour les modèles PyTorch et TorchScript ; les autres formats utilisent la précision sélectionnée par leur artefact et leur environnement d'exécution. Remplace l'option obsolète half. |
Les paramètres de visualisation suivants sont également pris en charge :
| Argument | Type | Valeur par défaut | Description |
|---|---|---|---|
show | bool | False | Si True, affiche les images ou vidéos annotées dans une fenêtre. Utile pour obtenir un retour visuel immédiat pendant le développement ou les tests. |
show_conf | bool | True | Affiche le score de confiance de chaque détection à côté de son étiquette. Donne une indication du degré de certitude du modèle pour chaque détection. |
show_labels | bool | True | Affiche les étiquettes de chaque détection dans le résultat visuel. Permet d'identifier immédiatement les objets détectés. |
Fonctionnement du comptage par zone#
La solution RegionCounter convertit chaque zone transmise en un polygone d’au moins trois points. Une simple liste de points devient une zone unique nommée Region#01, tandis qu’un dictionnaire conserve les noms de zones que tu as définis ; chaque zone est dessinée dans une couleur distincte de la palette Ultralytics. Chaque image est ensuite traitée en trois étapes :
- Le suivi YOLO26 détecte et suit chaque objet dans l’image.
- Pour chaque objet suivi, la solution calcule le centre de la boîte englobante et vérifie dans quels polygones de zone il se trouve
- Le décompte de chaque zone est affiché en son centre, puis les décomptes sont remis à zéro avant l’image suivante
Comme les décomptes redémarrent à chaque image, le nombre affiché dans une zone correspond à son occupation actuelle, c’est-à-dire au nombre d’objets qui s’y trouvent à cet instant, et non à un total cumulé. Pour compter de façon cumulative les objets qui franchissent une limite, utilise plutôt la solution ObjectCounter.
Chaque appel renvoie également un objet de résultats dont l’attribut plot_im contient l’image annotée et dont le dictionnaire region_counts associe les noms de zones à leurs décomptes. Tu peux ainsi intégrer ces valeurs à la logique de ta propre application.
Conclusion#
La solution RegionCounter d’Ultralytics YOLO26 surveille en direct le nombre d’objets dans autant de zones nommées que nécessaire, avec seulement quelques lignes de code. Pour aller plus loin, compte les franchissements de limites avec le comptage d’objets, suis les objets à l’intérieur d’une seule zone avec TrackZone ou découvre les autres solutions Ultralytics.
FAQ#
Ultralytics YOLO26 compte les objets par zone en suivant chaque objet de l’image et en vérifiant si le centre de sa boîte englobante se trouve dans chacun des polygones définis par l’utilisateur. Le nombre affiché pour une zone correspond à son occupation actuelle dans cette image, et non à un total cumulé. Les options de configuration sont répertoriées dans la section Arguments de
RegionCounter().Transmets l’argument
regionsous forme de dictionnaire associant les noms de zones à des listes de points, comme dans l’exemple principal :from ultralytics import solutions region_points = { "region-01": [(50, 50), (250, 50), (250, 250), (50, 250)], "region-02": [(640, 640), (780, 640), (780, 720), (640, 720)], } regioncounter = solutions.RegionCounter(region=region_points, model="yolo26n.pt", show=True)Chaque zone nommée est dessinée dans une couleur distincte et possède son propre décompte.
L’objet renvoyé par chaque appel
regioncounter(im0)contient un dictionnaireregion_countsassociant les noms de zones à leurs décomptes, ainsi queplot_im(l’image annotée) ettotal_tracks(le nombre d’objets suivis). Affiche l’objet de résultats pour examiner tous les champs disponibles.Oui. Passe l’argument
classesavec les indices des classes à conserver, par exempleclasses=[0]pour compter uniquement les personnes avec un modèle préentraîné sur COCO. La liste complète des arguments liés au suivi se trouve dans la sectionRegionCounter()Arguments.RegionCounterindique le nombre d’objets présents dans chaque zone polygonale de l’image courante, tandis que ObjectCounter compte les objets de manière cumulative lorsqu’ils franchissent une ligne ou la limite d’une zone, en suivant les totaux des entrées et des sorties. UtiliseRegionCounterpour connaître en temps réel le nombre d’objets présents dans une ou plusieurs zones etObjectCounterpour compter les entrées et les sorties ; seules les régions en forme de ligne sont prises en charge parObjectCounter.

