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)