Une application pratique de la détection d’objets en temps réel en utilisant le modèle de deep learning YOLOv5 en combinaison avec OpenCV, une bibliothèque populaire pour le traitement d’images et de vidéos. Cette synergie permet de surveiller et d’analyser les flux vidéo de plusieurs caméras simultanément, offrant ainsi une solution robuste pour des applications telles que la surveillance de sécurité, le suivi du trafic ou même des études comportementales en temps réel. Voici une explication détaillée du fonctionnement du script :
import cv2
import torch
# Charger le modèle YOLOv5
model = torch.hub.load(‘ultralytics/yolov5’, ‘yolov5x’, pretrained=True)
camera1 = cv2.VideoCapture(0)
camera2 = cv2.VideoCapture(4)
if not camera1.isOpened():
print(‘Erreur …cam1’)
if not camera2.isOpened():
print(‘Erreur.. cam2’)
while True:
ret1, frame1 = camera1.read()
ret2, frame2 = camera2.read()
if ret1 and ret2:
# Appliquer YOLOv5 aux deux images
results1 = model(frame1)
results2 = model(frame2)
# Récupérer les images avec les détections
frame1 = results1.render()[0]
frame2 = results2.render()[0]
# Concaténer les images pour l’affichage
frame = cv2.hconcat([frame1, frame2])
cv2.imshow(“Cameras”, frame)
if cv2.waitKey(1) & 0xFF == ord(‘q’):
break
camera1.release()
camera2.release()
cv2.destroyAllWindows()
- Importation des bibliothèques nécessaires : Le script commence par importer cv2 (OpenCV) pour la capture vidéo et le traitement d’images, ainsi que torch, une bibliothèque de machine learning qui permet de charger et d’utiliser le modèle YOLOv5.
- Chargement du modèle YOLOv5 : Le modèle YOLOv5 est chargé depuis le dépôt ultralytics sur GitHub grâce à la fonction
torch.hub.load
, en spécifiant ‘yolov5x’ comme modèle pré-entraîné. ‘yolov5x’ est l’une des versions de YOLOv5, connue pour sa précision élevée, bien qu’elle soit plus gourmande en ressources que ses variantes plus petites.
- Initialisation des caméras : Deux objets
VideoCapture
sont créés pour les deux caméras.
cv2.VideoCapture(0)et
cv2.VideoCapture(4)sont utilisés pour initialiser la première et la deuxième caméra, respectivement. Les indices des caméras (0 et 4 dans ce cas) dépendent de l’ordre dans lequel les caméras sont reconnues par le système.
- Vérification de l’ouverture des caméras : Le script vérifie si chaque caméra a été correctement initialisée. Si une caméra ne peut pas être ouverte, un message d’erreur est affiché.
- Boucle de traitement des images : Une boucle
while True
est utilisée pour lire les images de chaque caméra en continu.
camera.read()renvoie un booléen qui indique si la lecture a été réussie (
ret) et l’image capturée (
frame).
- Application de YOLOv5 aux images : Pour chaque image capturée, le modèle YOLOv5 est appliqué via
model(frame)
. Cela permet de détecter les objets dans l’image et de renvoyer les résultats, qui incluent les cadres de délimitation, les classes d’objets et les scores de confiance.
- Rendu des détections : Les résultats de la détection sont rendus sur les images originales avec
results.render()
, qui superpose les cadres de délimitation et les étiquettes d’identification sur les objets détectés.
- Affichage des images : Les images traitées de chaque caméra sont concaténées horizontalement avec
cv2.hconcat
et affichées dans une fenêtre nommée “Cameras”.
- Sortie de la boucle : La boucle peut être interrompue par l’utilisateur en appuyant sur la touche ‘q’, permettant ainsi de fermer proprement les flux vidéo et de détruire toutes les fenêtres OpenCV ouvertes.
Ce script démontre la puissance et la flexibilité de combiner YOLOv5 et OpenCV pour la détection d’objets en temps réel sur plusieurs sources vidéo. L’application de telles technologies ouvre des horizons vastes pour des applications allant de la surveillance de sécurité avancée à des solutions innovantes dans le domaine de la recherche et au-delà.
Related Posts