当前位置: 首页 > 科技观察

如何构建自己的人脸模糊工具

时间:2023-03-17 12:57:44 科技观察

如何使用OpenCV自定义去标识化人脸去标识化是指对数据进行匿名处理的过程。随着GDPR在欧盟的实施以及其他国家/地区的类似措施,保护PII(个人身份信息)成为准备数据集或任何个人信息处理的必要步骤。当然,一个人(?)的脸是一个人(?)身份最显着的特征之一,因此有许多检测和匿名化人脸的解决方案。但是,它们很难定制和自动化。这是一个DIY指南,适用于那些想使用开源自己动手的人。整个代码示例在Colab中运行,可在此处获取。GDPR在这里:https://github.com/changsin/DL/blob/main/notebooks/deidentify_faces_opencv.ipynb人脸自动匿名化涉及的步骤包括:1.人脸检测由于人脸检测是物体检测的一种,所以我们可以为此目的使用深度学习网络。OpenCV包括一个深度学习神经网络,该网络经过预先训练,可以使用公开可用的数据集检测人脸。它使用Caffe深度学习框架,您可以下载模型定义和预训练的权重文件。下载后,加载它们以创建一个深度神经网络,现在可以检测图像中的人脸。Caffe深度学习框架现在,我们只需要加载图像并将其传递给DNN来检测人脸,如下代码片段所示:每个预测结果包含类别ID(索引=1)、置信度(索引=2)和检测到的面部坐标。#asamplepredictionoutputfromDNNarray([0.,1.,0.8745881,0.68375957,0.47576728,0.75310016,0.62532324],dtype=float32)因为我们只对人脸检测感兴趣,所以我们可以只关注置信概率并用它来接受或拒绝预测.现在让?euro?处理示例图像。我选择这张公开发布的图像是因为它有不同角度和肤色的People-uro?面孔。当置信度阈值设置为0.5(即50%确定它是一张脸)时,它只检测到一张脸:面向前方的人。这是可以理解的,也是所有人脸检测算法的通病。解决这个问题的正确方法是添加更多种类的图像,包括侧面轮廓和其他角度。一种简单而廉价的方法就是简单地降低你的信心。例如,当置信水平设置为0.12时,结果会好很多。但是,引入了一个新问题。由于置信度阈值如此之低,预计会有更多的误报和漏报。您可以在左侧看到三个带标签的框。好消息是您可以对模型预测进行一些控制。2.人脸匿名化一旦检测到人脸,下一步就是如何对其进行匿名化/去识别化。存在不同的技术。我将展示三种方法:两种模糊技术和一种像素化方法。A。矩形模糊最简单的方法是使用OpenCVauro?的模糊方法,它通过平均卷积核内的像素值来工作。换句话说,卷积充当平滑过滤。通过调整内核大小,可以获得或多或少的粗粒度模糊效果。由于图像被处理为多维整数数组,您可以简单地用一行代码中的模糊像素替换感兴趣区域:OpenCV的blurimage[startY:endY,startX:endX]=cv2.blur(image[startY:endY,startX:endX],kernel_size)以下是使用kernel_size(20,20)时的结果:b.椭圆模糊虽然矩形模糊实现了所需的匿名化,但生成的图像看起来听起来相当刺耳。使用较小的内核大小,可以平滑不一致的模糊,但另一种方法是在椭圆中模糊,因为People?uro?的表面是椭圆形的。为此,需要通过创建掩码并执行一些按位运算来完成一些工作。以下是内核大小(10,10)的结果:c.像素化另一种流行的面部识别方法是使用“像素化”。在像素化中,感兴趣的区域被分成几个小块。-euro:在像素化中,感兴趣的区域被分成几个小块。对于每个块,计算平均RGB值并将其应用于整个块。如您所见,生成的图像看起来非常自然:结论去除人脸识别是保护隐私的第一步。虽然有许多现成的解决方案可用,但本文展示了使用OpenCV进行自定义和自动化的简单DIY步骤。整个源代码都在Jupyternotebook中,可以在这里找到。https://github.com/changsin/DL/blob/main/notebooks/deidentify_faces_opencv.ipynbReferencesUsingOpenCVandPythontoBlurandAnonymizeFaces基于OpenCV和深度学习的人脸检测