能去码也能打码!OpenCV实时检测视频流人脸并马赛克之,视频后期福音

简介: 能去码也能打码!OpenCV实时检测视频流人脸并马赛克之,视频后期福音

我们现在经常用到的马赛克其实起源于建筑上的图案装饰,如今马赛克常用于图像或视频的模糊处理。随着技术的进步,打码与去码变成了一种常见的技术研究方向,同时也掀起了一场技术与道德的“战争”。

那么为什么要打马赛克?其实是处于一种隐私保护,例如新闻上出现犯罪嫌疑人的画面时是需要打码的,因为尚未定罪时需要维护嫌疑人的肖像权。

现如今,大部分打马赛克的工作都需要我们手动来打,比如在图像/视频制作软件里添加马赛克。那么这种工作能不能交给AI呢?如果AI可以自动对图像/视频进行实时处理,无疑会帮人类减轻很大的工作量。

答案是可以!Adrian Rosebrock博士在博客中分享了通过OpenCV实现“人脸自动马赛克”这一教程,而这个项目是受到了他的一位博客读者的启发。事实上,这个项目有很大的现实意义。

那么,AI究竟是如何做到自动实时打码的?说到这里,首先需要介绍一下什么是人脸模糊。

什么是人脸模糊?

Adrian Rosebrock博士在博客中详细的分享了技术实现方法,从介绍人脸检测器,人脸模糊的简单步骤,到分别用OpenCV对人脸进行高斯模糊和像素化模糊的详细操作。

Adrian Rosebrock博士的详细教程:

https://www.pyimagesearch.com/2020/04/06/blur-and-anonymize-faces-with-opencv-and-python/

简单来说,实现人脸模糊可以分为以下4步:

第一步:人脸检测

在这一步可以使用任何的人脸检测器,只要它能在图像或视频中生成人脸的边界框坐标就行。

有一些常见的人脸检测工具可以供你参考:

  • Haar cascades
  • HOG + Linear SVM
  • Deep learning-based face detectors

一旦识别到人脸,就可以进入到第二步了。

第二步:图像/视频的ROI提取

脸探测器会给出一个边界框,也就是图像中人脸的坐标(x, y)。

这些坐标通常表示:

  • 人脸边界框的起始坐标x
  • 面部截止的坐标x
  • 人脸位置的起始坐标y
  • 面部截止的坐标y

然后就可以用这些信息来提取人脸ROI(感兴趣区域),如下图所示: 

接下来就开始进行人脸模糊啦。

第三步:人脸模糊


说到打码这件事,有两种常用的模糊方式,一个是高斯模糊,一个是像素化模糊。高斯模糊的效果比较“温柔”,但很可能面临着模糊不彻底的问题,而像素化模糊就相当简单粗暴,是我们最常见的马赛克样式。

高斯模糊下的面部图像

这两个模糊方式都可以实现人脸自动模糊这个项目,练习时可以凭你的个人喜好选择。

在进行人脸模糊之后,最后一步就是将模糊后的人脸放回原始图像中。

第四步:将模糊后的照片整合到原始图像中    

使用来自人脸检测的原始(x, y)坐标(步骤二中提到的),我们可以得到模糊/匿名化的人脸,然后将其存储到原始图像中(如果使用OpenCV和Python,则此步骤使用NumPy数组切片)。

至此,人脸模糊的部分就完成了。

如何在实时视频中通过AI实现人脸自动模糊?

文摘菌在这里简单展示一下如何使用OpenCV识别人脸,然后再将人脸模糊应用到实时视频流中。

首先需要从Adrian Rosebrock博士的这篇博文中获取源代码,然后打开OpenCV人脸检测器,使用以下命令启动blur_face_video.py:

以可以通过method pixelated来进行像素化的人脸模糊:

以上应用的人脸模糊方法,是假设输入视频流的每一帧中都可以检测到人脸。

那么,如果检测器中途未能检测到人脸会怎样?显然,在漏掉的帧中无法进行打码,也就破坏了人脸模糊的目的。

在这种情况下我们该怎么做呢?

通常,在人脸移动的比较慢的情况下,有一个简单的方法是取最后一个已知的面部位置,然后模糊该区域。

还有一种高级的方法是使用专门的对象跟踪器,如果人脸检测器没有识别到,则对象追踪器可以补充提供面部位置,这个方法会复杂很多,因为要在人脸的多个角度建立跟踪,但是这个方法也更加完善。

微软曾提出一种可在视频中通过AI实现人脸模糊的方

早在2017年,微软研究院就提出了一套基于AI算法的视频人脸模糊解决方案。虽然该算法能够对视频进行自动处理,但是需要用户点击想要打码的人才能打上马赛克。

这套算法能够将源视频中的人物提取出来,并返回给用户,然后用户可以自由选择给谁打码。       image.gif

要想打码,首先需要找出所有人脸的出现位置,并把同一个人所有帧中的人脸连接起来。为此,需要有三个算法:人脸检测、跟踪、识别

下图更为详细的展示了关于这套人脸模糊系统具体是如何工作的:

在时间复杂度方面,微软研究院称该系统在Azure的CPU服务器上能够实时处理720p的视频,并且能够以2倍时长处理1080p的高清视频。

技术始终在进步,3年前就可以做到在视频中通过AI进行人脸模糊,3年后已经可以利用AI在实时视频流中自动打码了,我们相信,科技还能做到更多。 尽管,目前AI实时打码这一技术还尚未成熟,但总有一天技术能够“承担”起更多的社会责任,保护更多的人。

相关报道:

https://www.pyimagesearch.com/2020/04/06/blur-and-anonymize-faces-with-opencv-and-python/

https://www.zhihu.com/question/21672713

相关文章
|
3月前
|
计算机视觉 索引
OpenCV4学习笔记(2):显示相机视频流的帧率
这篇文章是OpenCV4学习笔记的第二部分,介绍了如何通过OpenCV4在显示相机视频流时计算并显示其帧率,使用`getTickCount`和`getTickFrequency`函数来测量帧时间,并用`putText`在图像上绘制帧率信息。
OpenCV4学习笔记(2):显示相机视频流的帧率
|
1月前
|
计算机视觉
Opencv学习笔记(八):如何通过cv2读取视频和摄像头来进行人脸检测(jetson nano)
如何使用OpenCV库通过cv2模块读取视频和摄像头进行人脸检测,并提供了相应的代码示例。
84 1
|
1月前
|
编解码 计算机视觉 Python
Opencv学习笔记(九):通过CV2将摄像头视频流保存为视频文件
使用OpenCV库通过CV2将摄像头视频流保存为视频文件,包括定义视频编码格式、设置保存路径、通过write写入视频文件,并提供了相应的Python代码示例。
125 0
|
1月前
|
机器学习/深度学习 计算机视觉
目标检测笔记(六):如何结合特定区域进行目标检测(基于OpenCV的人脸检测实例)
本文介绍了如何使用OpenCV进行特定区域的目标检测,包括人脸检测实例,展示了两种实现方法和相应的代码。
64 1
目标检测笔记(六):如何结合特定区域进行目标检测(基于OpenCV的人脸检测实例)
|
1月前
|
编解码 关系型数据库 计算机视觉
Opencv学习笔记(十一):opencv通过mp4保存为H.264视频
本文介绍了如何在OpenCV中通过使用cisco开源的openh264库来解决不支持H.264编码的问题,并提供了完整的代码示例。
66 0
Opencv学习笔记(十一):opencv通过mp4保存为H.264视频
|
1月前
|
算法 计算机视觉 Python
圆形检测算法-基于颜色和形状(opencv)
该代码实现了一个圆检测算法,用于识别视频中的红色、白色和蓝色圆形。通过将图像从RGB转换为HSV颜色空间,并设置对应颜色的阈值范围,提取出目标颜色的区域。接着对这些区域进行轮廓提取和面积筛选,使用霍夫圆变换检测圆形,并在原图上绘制检测结果。
71 0
|
3月前
|
计算机视觉 索引
OpenCV读取视频失败<无可用信息,未为 opencv_world453.dll 加载任何符号> cv::VideoCapture
本文介绍了解决OpenCV读取视频失败的错误,指出问题通常由视频路径错误或摄像头索引错误导致,并提供了相应的解决方法。
OpenCV读取视频失败<无可用信息,未为 opencv_world453.dll 加载任何符号> cv::VideoCapture
|
4月前
|
机器学习/深度学习 传感器 算法
OpenCV4工业缺陷检测的六种方法
OpenCV4工业缺陷检测的六种方法
|
4月前
|
机器学习/深度学习 XML 计算机视觉
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,它提供了大量的函数和工具,用于处理图像和视频数据。
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,它提供了大量的函数和工具,用于处理图像和视频数据。
|
1月前
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
342 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
下一篇
无影云桌面