No more snow

import cv2
from ultralytics import YOLO
import numpy as np
import matplotlib.pyplot as plt

# Initialisation de la capture vidéo et du modèle YOLO
cap = cv2.VideoCapture("RUE.mp4")
model = YOLO("yolov8n.pt")  # Utilisation de yolov8n.pt

# Seuils à ajuster
SEUIL_CONF = 0.1  # Réduire pour détecter des objets moins évidents
SEUIL_NMS = 0.1   # Ajuster pour la suppression non maximale

# Dictionnaire des couleurs pour les classes ciblées
class_colors = {
    'person': (255, 0, 0),  # Rouge
    'car': (0, 255, 0),     # Vert
}

# Vérifier si la vidéo a été chargée correctement
ret, first_frame = cap.read()
if not ret:
    raise RuntimeError("Failed to read the first frame from the video")

# Initialiser l'image composite avec un fond blanc
composite_image = np.full_like(first_frame, fill_value=255)

# Boucle principale
while True:
    # Lecture d'une frame de la vidéo
    ret, frame = cap.read()
    if not ret:
        break

    # Détection d'objets avec YOLO
    results = model(frame, device="mps", conf=SEUIL_CONF, iou=SEUIL_NMS)
    result = results[0]
    class_names = result.names
    bboxes = np.array(result.boxes.xyxy.cpu(), dtype="int")
    classes = np.array(result.boxes.cls.cpu(), dtype="int")

    for cls, bbox in zip(classes, bboxes):
        class_name = class_names[cls]

        # Traiter uniquement les classes 'person' et 'car'
        if class_name not in ['person', 'car']:
            continue

        (x, y, x2, y2) = bbox
        color = class_colors[class_name]

        # Dessiner le rectangle et le texte sur la frame
        cv2.rectangle(frame, (x, y), (x2, y2), color, 2)
        cv2.putText(frame, class_name, (x, y - 5), cv2.FONT_HERSHEY_PLAIN, 1, color, 2)

        # Dessiner le rectangle sur l'image composite
        cv2.rectangle(composite_image, (x, y), (x2, y2), color, 2)

    # Affichage de la frame
    cv2.imshow("Img", frame)

    # Vérification si la touche 'Esc' (27) est pressée
    key = cv2.waitKey(1)
    if key == 27:
        break

# Libération des ressources et fermeture des fenêtres
cap.release()
cv2.destroyAllWindows()

# Affichage de l'image composite avec un fond blanc
plt.figure(figsize=(16, 9))
plt.imshow(cv2.cvtColor(composite_image, cv2.COLOR_BGR2RGB))
plt.title('Superposition de tous les rectangles détectés sur fond blanc')
plt.axis('off')

# Sauvegarde de l'image avec une haute résolution
plt.savefig('composite_image_white_background.png', dpi=300)

plt.show()
Rémi Coutanson

French contemporary artist

Previous
Previous

Paysage Industriel

Next
Next

Paper Architecture