在数字时代,保护个人隐私变得尤为重要。无论是在图像还是视频中,人们都希望确保自己的隐私不被侵犯。为了实现这一目标,可以使用人脸检测API来识别图像或视频中的人,并使用Python的supervision库来模糊这些人所在的区域。这种方法只需几行代码即可实现。
本指南将详细介绍如何在图像和视频中模糊人像。将展示两种略有不同的方法:一种是用于图像的,另一种是用于视频的。对于图像,将使用Roboflow托管的API和supervision;而对于视频,将使用专为视频处理设计的Roboflow视频推理API和supervision。
以下是一个视频中人物被模糊的例子:
from roboflow import Roboflow
import supervision as sv
import cv2
rf = Roboflow(api_key="API_KEY")
project = rf.workspace().project("people-detection-o4rdr")
model = project.version(7).model
results = model.predict("people.jpg", confidence=40, overlap=30).json()
predictions = sv.Detections.from_inference(results)
image = cv2.imread("people.jpg")
# 过滤出class id == 0的预测,即“person”类别
people = predictions[predictions.class_id == 0]
blur_annotator = sv.BlurAnnotator()
annotated_frame = blur_annotator.annotate(
scene=image.copy(),
detections=people
)
sv.plot_image(annotated_frame)
在上述代码中,将"API_KEY"替换为Roboflow API密钥。了解如何获取Roboflow API密钥。然后运行代码。正在处理的图像将出现在屏幕上,图像中的所有人像都将被模糊处理。
成功地在图像中模糊了人像。
视频模糊API
要在视频中模糊人像,可以使用托管的Roboflow视频推理API。这个API针对视频推理进行了优化。可以将视频发送到API,并指定想要使用预训练的人像检测模型。然后,可以为每一帧检索预测结果。可以使用这些预测结果来模糊视频中的人像。
import json
import os
from roboflow import Roboflow
import numpy as np
import supervision as sv
import cv2
PROJECT_NAME = "people-detection-o4rdr"
VIDEO_FILE = "people.mp4"
rf = Roboflow(api_key="API_KEY")
project = rf.workspace().project(PROJECT_NAME)
model = project.version(7).model
job_id, signed_url, expire_time = model.predict_video(
VIDEO_FILE,
fps=5,
prediction_type="batch-video",
)
results = model.poll_until_video_results(job_id)
with open("results.json", "w") as f:
json.dump(results, f)
frame_offset = results["frame_offset"]
model_results = results["people-detection-o4rdr"]
def callback(scene: np.ndarray, index: int) -> np.ndarray:
if index in frame_offset:
detections = sv.Detections.from_inference(model_results[frame_offset.index(index)])
else:
nearest = min(frame_offset, key=lambda x: abs(x - index))
detections = sv.Detections.from_inference(
model_results[frame_offset.index(nearest)])
blur_annotator = sv.BlurAnnotator()
annotated_image = blur_annotator.annotate(
scene=scene, detections=detections)
return annotated_image
sv.process_video(
source_path=VIDEO_FILE,
target_path="output.mp4",
callback=callback,
)
在上述代码中,将"API_KEY"替换为Roboflow API密钥。了解如何获取Roboflow API密钥。建议将fps设置为5作为起点。这意味着每秒将运行五次推理。FPS越高,推理的成本就越高。
当运行上述代码时,视频将被发送进行处理。推理在视频上运行所需的时间取决于视频中的帧数。"poll_until_video_results"函数将每60秒轮询一次视频API,直到有结果可用。然后将该结果保存到文件中。
当处理开始时,将看到以下输出:
loading Roboflow workspace...
loading Roboflow project...
Checking for video inference results for job 15be7ab5-232a-4e02-aa47-864ff8a2581b every 60s
视频推理API返回每一帧中人物的像素坐标。然后使用supervision Python包来模糊人物所在的区域。
当上述脚本运行完成后,结果将被保存到名为“output.mp4”的文件中。以下是上述视频模糊代码的输出示例:
成功地在视频中模糊了人像。
当录制包含人物的视频,而人物与计算机视觉项目无关时,建议模糊人物所在的区域。模糊人物可以让保留画面中人物的隐私。
在本指南中,介绍了如何使用Roboflow图像和视频处理API以及supervision Python包来模糊图像和视频中的人物。使用了托管在Roboflow Universe上的人体检测模型来检测图像和视频中的人物,然后使用supervision来模糊人物所在的视觉媒体区域。