Desfocagem de objectos utilizando Ultralytics YOLOv8 🚀
O que é a desfocagem de objectos?
Desfocagem de objectos com Ultralytics YOLOv8 envolve a aplicação de um efeito de desfocagem a objectos específicos detectados numa imagem ou vídeo. Isto pode ser conseguido utilizando as capacidades do modelo YOLOv8 para identificar e manipular objectos numa determinada cena.
Vantagens da desfocagem de objectos?
- Proteção da privacidade: A desfocagem de objectos é uma ferramenta eficaz para salvaguardar a privacidade, ocultando informações sensíveis ou pessoalmente identificáveis em imagens ou vídeos.
- Foco seletivo: YOLOv8 permite uma desfocagem selectiva, permitindo aos utilizadores visar objectos específicos, assegurando um equilíbrio entre privacidade e retenção de informação visual relevante.
- Processamento em tempo real: YOLOv8 A eficiência do software permite a desfocagem de objectos em tempo real, tornando-o adequado para aplicações que requerem melhorias de privacidade em tempo real em ambientes dinâmicos.
Desfocagem de objectos utilizando YOLOv8 Exemplo
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()
Argumentos model.predict
Nome | Tipo | Predefinição | Descrição |
---|---|---|---|
source |
str |
'ultralytics/assets' |
diretório de origem para imagens ou vídeos |
conf |
float |
0.25 |
limiar de confiança do objeto para deteção |
iou |
float |
0.7 |
limiar de intersecção sobre a união (IoU) para os NMS |
imgsz |
int or tuple |
640 |
tamanho da imagem como escalar ou lista (h, w), ou seja, (640, 480) |
half |
bool |
False |
utiliza meia precisão (FP16) |
device |
None or str |
None |
dispositivo para execução, ou seja, dispositivo cuda=0/1/2/3 ou dispositivo=cpu |
max_det |
int |
300 |
número máximo de detecções por imagem |
vid_stride |
bool |
False |
taxa de fotogramas do vídeo |
stream_buffer |
bool |
False |
guarda todos os fotogramas de transmissão (True) ou devolve o fotograma mais recente (False) |
visualize |
bool |
False |
visualiza as características do modelo |
augment |
bool |
False |
aplica o aumento de imagem a fontes de previsão |
agnostic_nms |
bool |
False |
NMS com diagnóstico de classe |
classes |
list[int] |
None |
filtra os resultados por classe, ou seja, classes=0, ou classes=[0,2,3] |
retina_masks |
bool |
False |
utiliza máscaras de segmentação de alta resolução |
embed |
list[int] |
None |
devolve vectores de características/embeddings de determinadas camadas |
Criado em 2024-01-09, Atualizado em 2024-01-15
Autores: glenn-jocher (2), AyushExel (1), RizwanMunawar (1)