Skip to content

Flouter les objets à l'aide de Ultralytics YOLOv8 🚀

Qu'est-ce que le flou artistique ?

Le flou d'objet avec Ultralytics YOLOv8 consiste à appliquer un effet de flou à des objets spécifiques détectés dans une image ou une vidéo. Ceci peut être réalisé en utilisant les capacités du modèle YOLOv8 pour identifier et manipuler des objets dans une scène donnée.

Avantages du flou artistique ?

  • Protection de la vie privĂ©e: Le flou d'objet est un outil efficace pour protĂ©ger la vie privĂ©e en dissimulant les informations sensibles ou personnellement identifiables dans les images ou les vidĂ©os.
  • Mise au point sĂ©lective: YOLOv8 permet un flou sĂ©lectif, ce qui permet aux utilisateurs de cibler des objets spĂ©cifiques, assurant un Ă©quilibre entre le respect de la vie privĂ©e et la conservation des informations visuelles pertinentes.
  • Traitement en temps rĂ©el: YOLOv8 L'efficacitĂ© du logiciel permet de flouter les objets en temps rĂ©el, ce qui le rend adaptĂ© aux applications nĂ©cessitant des amĂ©liorations de la confidentialitĂ© Ă  la volĂ©e dans des environnements dynamiques.

Flouter les objets Ă  l'aide de YOLOv8 Exemple

from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors
import cv2

model = YOLO("yolov8n.pt")
names = model.names

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))

# Blur ratio
blur_ratio = 50

# Video writer
video_writer = cv2.VideoWriter("object_blurring_output.avi",
                               cv2.VideoWriter_fourcc(*'mp4v'),
                               fps, (w, h))

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break

    results = model.predict(im0, show=False)
    boxes = results[0].boxes.xyxy.cpu().tolist()
    clss = results[0].boxes.cls.cpu().tolist()
    annotator = Annotator(im0, line_width=2, example=names)

    if boxes is not None:
        for box, cls in zip(boxes, clss):
            annotator.box_label(box, color=colors(int(cls), True), label=names[int(cls)])

            obj = im0[int(box[1]):int(box[3]), int(box[0]):int(box[2])]
            blur_obj = cv2.blur(obj, (blur_ratio, blur_ratio))

            im0[int(box[1]):int(box[3]), int(box[0]):int(box[2])] = blur_obj

    cv2.imshow("ultralytics", im0)
    video_writer.write(im0)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
video_writer.release()
cv2.destroyAllWindows()

Arguments model.predict

Nom Type DĂ©faut Description
source str 'ultralytics/assets' répertoire source pour les images ou les vidéos
conf float 0.25 seuil de confiance de l'objet pour la détection
iou float 0.7 seuil d'intersection sur l'union (IoU) pour NMS
imgsz int or tuple 640 taille de l'image sous forme de scalaire ou de liste (h, w), c'est-Ă -dire (640, 480)
half bool False utiliser la demi-précision (FP16)
device None or str None périphérique à utiliser, c'est-à-dire cuda device=0/1/2/3 ou device=cpu
max_det int 300 nombre maximum de détections par image
vid_stride bool False taux d'images vidéo stride
stream_buffer bool False mettre en mémoire tampon toutes les images de streaming (True) ou renvoyer l'image la plus récente (False)
visualize bool False visualise les caractéristiques du modèle
augment bool False applique l'augmentation d'image aux sources de prédiction
agnostic_nms bool False NMS agnostique
classes list[int] None filtre les résultats par classe, c'est-à-dire classes=0, ou classes=[0,2,3]
retina_masks bool False utiliser des masques de segmentation à haute résolution
embed list[int] None renvoie les vecteurs de caractéristiques/embeddings des couches données


Créé le 2024-01-09, Mis à jour le 2024-01-15
Auteurs : glenn-jocher (2), AyushExel (1), RizwanMunawar (1)

Commentaires