前言
以在数字化时代,视频内容的分享和传播已经成为了生活中不可或缺的一部分。然而,随着社交媒体的普及和信息的广泛传播,我们也面临着隐私泄露的风险。特别是在涉及他人隐私的视频中,保护个人信息变得愈发重要。在本文中我将为大家讲解使用人脸关键点检测进行马赛克处理。
马赛克简介
马赛克(Mosaic)是一种常见的图像处理技术,它用于对图像或视频中的特定区域进行模糊或像素化处理。马赛克处理通过在敏感区域上覆盖小方块(像素块)或小圆点,使得原始图像中的细节被隐藏或模糊,从而达到保护隐私或隐藏敏感信息的目的。
马赛克处理的原理很简单,它涉及两个主要步骤:
- 区域划分:首先,需要确定要进行马赛克处理的敏感区域。这可以通过人工标注或使用计算机视觉技术进行自动检测来实现。在人脸马赛克处理中,通常会使用人脸检测算法来找到人脸的位置。
- 模糊处理:一旦确定了敏感区域,就会在这些区域上进行模糊处理。常见的方法是用小方块或小圆点等固定形状的像素块来替代原始图像中的细节。这些像素块的颜色可以是敏感区域周围的平均颜色或其他特定颜色,以便将敏感信息有效地隐藏起来。
通过上述的介绍我们知道了马赛克的主要目的:保护隐私或隐藏敏感信息 。那么我们使用另一个张图贴到需要保护隐私或隐藏敏感信息的地方同样达到了目的,如下所示。
马赛克实操
在上述两类马赛克处理去前提要求是检测到人脸部位,大家可以参考本人博客:博客:一起来学MediaPipe(一)人脸及五官定位检测,在这里我们将这两类马赛克处理称为模糊马赛克与贴图马赛克。 模糊马赛克:
shell
复制代码
def do_mosaic(img, x, y, w, h, neighbor=9): """ :param rgb_img :param int x : 马赛克左顶点 :param int y: 马赛克左顶点 :param int w: 马赛克宽 :param int h: 马赛克高 :param int neighbor: 马赛克每一块的宽 """ for i in range(0, h, neighbor): for j in range(0, w, neighbor): rect = [j + x, i + y] color = img[i + y][j + x].tolist() # 关键点1 tolist left_up = (rect[0], rect[1]) x2 = rect[0] + neighbor - 1 # 关键点2 减去一个像素 y2 = rect[1] + neighbor - 1 if x2 > x + w: x2 = x + w if y2 > y + h: y2 = y + h right_down = (x2, y2) cv2.rectangle(img, left_up, right_down, color, -1) # 替换为为一个颜值值 return img
贴图马赛克:
shell
复制代码
frame[ymin:ymax, xmin:xmax] = effect
演示
拓展
在mediapipe 库中我们仅以简单的人脸检测作为关键但进行马赛克处理,但mediapipe 库还可以检测人体姿态,后续大家可以自行尝试做整个人体关键部位的马赛克处理。深入拓展下可以对一些【禁片:1未满8入内】中的主角的关键部分检测并自动打码