Sfocatura degli oggetti con Ultralytics YOLOv8 🚀
Che cos'è la sfocatura degli oggetti?
Sfocatura degli oggetti con Ultralytics YOLOv8 consiste nell'applicare un effetto di sfocatura a specifici oggetti rilevati in un'immagine o in un video. Questo può essere ottenuto utilizzando le funzionalità del modello YOLOv8 per identificare e manipolare gli oggetti all'interno di una determinata scena.
Vantaggi della sfocatura degli oggetti?
- Protezione della privacy: La sfocatura degli oggetti è uno strumento efficace per salvaguardare la privacy nascondendo informazioni sensibili o di identificazione personale nelle immagini o nei video.
- Messa a fuoco selettiva: YOLOv8 permette di sfocare in modo selettivo, consentendo agli utenti di mirare a oggetti specifici, garantendo un equilibrio tra privacy e conservazione delle informazioni visive rilevanti.
- Elaborazione in tempo reale: YOLOv8 L'efficienza del sistema consente di sfocare gli oggetti in tempo reale, rendendolo adatto alle applicazioni che richiedono miglioramenti della privacy al volo in ambienti dinamici.
Esempio di sfocatura degli oggetti con YOLOv8
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()
Argomenti model.predict
Nome | Tipo | Predefinito | Descrizione |
---|---|---|---|
source |
str |
'ultralytics/assets' |
directory di origine per le immagini o i video |
conf |
float |
0.25 |
soglia di fiducia dell'oggetto per il rilevamento |
iou |
float |
0.7 |
soglia di intersezione su unione (IoU) per gli NMS |
imgsz |
int or tuple |
640 |
dimensione dell'immagine come scalare o come elenco (h, w), ad esempio (640, 480) |
half |
bool |
False |
usa la mezza precisione (FP16) |
device |
None or str |
None |
dispositivo su cui eseguire, ad esempio cuda device=0/1/2/3 o device=cpu |
max_det |
int |
300 |
numero massimo di rilevamenti per immagine |
vid_stride |
bool |
False |
passo della frequenza dei fotogrammi video |
stream_buffer |
bool |
False |
bufferizza tutti i fotogrammi dello streaming (True) o restituisce il fotogramma più recente (False) |
visualize |
bool |
False |
visualizzare le caratteristiche del modello |
augment |
bool |
False |
applicare l'aumento dell'immagine alle fonti di predizione |
agnostic_nms |
bool |
False |
NMS con compatibilità di classe |
classes |
list[int] |
None |
filtrare i risultati per classe, ad esempio classi=0 o classi=[0,2,3]. |
retina_masks |
bool |
False |
utilizzare maschere di segmentazione ad alta risoluzione |
embed |
list[int] |
None |
restituisce vettori di caratteristiche/embeddings da determinati livelli |