在某些情况下,可能需要在不允许停车的街道上拍摄照片,以便追踪违规停放车辆的车牌。然而,拍摄的照片可能会包含背景中的行人。在这种情况下,可以通过识别车辆和人脸,并将人脸模糊处理,以确保不保存任何个人信息,如街上人们的面孔,与照片一起。
为了实现这一点,可以对计算机视觉模型返回的预测结果周围的边界框内容进行模糊处理。在本指南中,将讨论如何在Python中模糊边界框。将使用一个预测汽车和行人的模型作为示例。当在照片中识别出行人时,他们的身体将被模糊处理。
为了模糊图像中的所有人,需要绘制一个边界框,然后模糊其内容。要绘制边界框,需要每个边界框角落的坐标。然后,可以绘制盒子并用模糊效果填充它。将使用cv2库来绘制边界框并模糊其内容。
希望模糊这张图像中的所有人:
import cv2
predictions = {"predictions": [...]}
for prediction in predictions["predictions"]:
blur_x = int(prediction['x'] - prediction['width'] / 2)
blur_y = int(prediction['y'] - prediction['height'] / 2)
blur_width = int(prediction['width'])
blur_height = int(prediction['height'])
roi = img[blur_y:blur_y+blur_height, blur_x:blur_x+blur_width]
blur_image = cv2.GaussianBlur(roi,(51,51),0)
img[blur_y:blur_y+blur_height, blur_x:blur_x+blur_width] = blur_image
cv2.imwrite("example_with_blur.jpg", img)
在上面的代码中,首先计算每个边界框的x和y坐标,并确保预测的高度和宽度是整数。然后计算一个“感兴趣区域”(ROI),这是想要模糊的区域。接下来,绘制一个高斯模糊框。最后,代码用高斯模糊框替换想要模糊的图像区域。然后将修改后的图像保存到一个名为“example_with_blur.jpg”的文件中。
图像中的所有行人都被模糊掉了。代码起作用了!
如果还没有一个模型来测试模糊边界框,已经为准备好了!在上面,使用了一个预测图像中行人位置的模型。一个已经存在的用于识别汽车和行人的模型可以在Roboflow Universe上找到,这是一个包含超过110,000个图像数据集的开源图库。对于本指南,将使用“Pedestrian”数据集。
可以通过使用Roboflow Universe上的“Deploy”标签来测试数据集,以确保它按预期返回预测:
在开始使用模型之前,需要安装Roboflow pip包:
pip install roboflow
还需要一个Roboflow账户。可以在Roboflow网站上注册一个。在数据集页面的Deploy标签上进一步滚动,复制在“Python”部分看到的代码。然后,将代码粘贴到想要绘制边界框的文件的顶部:
from roboflow import Roboflow
rf = Roboflow(api_key="KEY")
project = rf.workspace().project("people-detection-general")
model = project.version(5).model
API密钥将自动添加到从Roboflow Universe的代码片段中。可以使用以下代码从模型中检索预测:
predictions = model.predict("image1.jpg", confidence=50).json()
print(predictions)
这将显示一个JSON对象,其中包含模型找到的预测。只有置信度大于50%的预测才会显示。这里是一个示例结果:
{'predictions': [{'x': 983.5, 'y': 462.5, 'width': 153.0, 'height': 441.0, 'confidence': 0.8825094699859619, 'class': 'person', 'image_path': 'image1.jpg', 'prediction_type': 'ObjectDetectionModel'}...]}
可以直接使用“predictions”变量与之前讨论的代码一起模糊图像中的所有边界框。