实践案例:使用开源工具从视频中构建人脸检测模型(Python实现)
介绍
近年来,计算机视觉这个奇妙的领域已经发展到独树一帜的地步。在世界各地已经有大量的应用程序在广泛使用。
我在这个领域最喜欢的事情之一是我们的社区拥抱开源概念的想法。即使是大型科技巨头也愿意与每个人分享新的突破和创新,这样技术就不会成为“富人的专利”。
其中一种技术是人脸检测,它在实际使用案例中提供了大量潜在的应用(如果使用正确且符合道德标准)。在本文中,我将向您展示如何使用开源工具构建功能强大的人脸检测算法。
如果您想了解计算机视觉的复杂性,本课程- 使用深度学习的计算机视觉- 是一个完美的起点。(https://www.youtube.com/watch?v=wr4rx0Spihs)
目录
- 人脸检测的潜在应用
- 设置系统- 硬件/软件要求
- 硬件设置
- 软件设置
- 深入了解Python实现
- 简单的介绍
- 人脸检测用例
人脸检测的潜在应用
让我提出一些很常见的应用程序示例,其中人脸检测技术正在普遍使用。我相信你肯定在某些时候遇到过这些用例,并且没有意识到在幕后使用了什么技术!
例如,Facebook取代了手动图像标记,并为上传到平台的每张图片自动生成了标记建议。Facebook使用简单的人脸检测算法来分析图像中人脸的像素,并将其与相关用户进行比较。我们将学习如何自己构建一个人脸检测模型,但在我们进入技术细节之前,让我们讨论一些其他的用例。
我们正习惯使用最新的“面部解锁”功能手机。这是如何使用面部检测技术来维护个人数据安全性的一个非常小的例子。同样它可以在更大范围内进行实施,使相机能够捕捉图像和检测面部。
在广告、医疗保健、银行业等方面还有其他一些鲜为人知的面部检测应用。大多数公司,甚至在许多会议中,我们都需要携带身份证才能进入。但是,如果能够找到一种方法不再需要携带任何身份证来获取访问权限就会很方便了。人脸检测便有助于使这一过程更简单。只要人类看着相机,它就会自动检测是否允许他/她进入。
面部检测的另一个有趣的应用是它可以计算参加活动的人数(如会议或音乐会)。我们安装了一个可以捕获与会者图像并向我们提供总人数的摄像头,而不是手动计算与会者。这有助于自动化流程并节省大量手动工作。
在本文中,我将重点介绍人脸检测的实际应用,并简单介绍其中的算法是如何工作的。
设置系统- 硬件/软件要求
既然您已经了解了可以使用面部检测技术构建的潜在应用程序,那么让我们看看如何使用可用的开源工具实现这一点。
具体来说,这是我使用和推荐使用的内容:
- 这里采用的是在Lenovo E470 ThinkPad笔记本电脑(Core i5 7th Gen)上构建实时面部检测器的网络摄像头(Logitech C920)。当然,您还可以在其他任何适当的系统上使用笔记本电脑的内置摄像头或闭路电视摄像头进行实时视频分析。
- 使用GPU进行更快速的视频处理始终是一个优势所在
- 在软件方面,我们使用了安装了所有必备软件的Ubuntu 18.04操作系统
让我们更详细地探索这些要点,以确保在构建人脸检测模型之前正确设置所有内容。
第1步:硬件设置
您要做的第一件事是检查网络摄像头是否设置正确。Ubuntu中的一个简单技巧- 查看设备是否已被操作系统注册。您可以按照以下步骤操作:
- 在将WebCam连接到笔记本电脑之前,请转到命令提示符并键入ls / dev / video *来检查所有连接的视频设备。这将打印已连接到系统的视频设备。
- 连接WebCam并再次运行命令。如果WebCam已成功连接,命令将显示一个新设备。
- 您可以做的另一件事是使用网络摄像头软件来检查网络摄像头是否正常工作。你可以在Ubuntu中使用“Cheese”。
在这里我们可以看到网络摄像头设置正确。这就是硬件方面的问题!
第2步:软件设置
步骤2.1:安装Python
本文中的代码是使用Python 3.5版构建的。虽然有多种方法可以安装Python,但我建议使用Anaconda--最流行的数据科学Python发行版。这是在您的系统中安装Anaconda的链接。(https://www.anaconda.com/download/)
步骤2.2:安装OpenCV
OpenCV(开源计算机视觉)是一个旨在构建计算机视觉应用程序的库。它有许多用于图像处理任务的预编写功能。要安装OpenCV,请执行库的pip安装:
步骤2.3:安装face_recognition API
最后,我们将使用face_recognition,被称为世界上最简单的面部识别API。安装:
让我们深入了解实施
现在您已经设置了系统,终于可以深入了解实际的实现。首先,我们将快速构建我们的程序,然后将其分解以了解我们所做的工作。
简单的演练
首先,创建一个文件face_detector.py,然后复制下面给出的代码:
然后,键入以下命令运行此Python文件:
如果一切正常,将弹出一个新窗口,运行实时面部检测。
总而言之,这就是我们上面的代码所做的:
- 首先,我们定义了将进行视频分析的硬件
- 由此,我们逐帧实时捕捉视频
- 然后我们处理每个帧并提取图像中所有面的位置
- 最后,我们以视频形式渲染这些帧以及面部位置
如果您想进入更详细的细节,我已在每个代码部分中包含注释。您可以随时返回查看。
人脸检测用例
乐趣并不止于此!我们可以做的另一件很酷的事情- 围绕上面的代码构建一个完整的用例。而且你不需要从头开始,可以对代码进行一些小的更改。
例如,假设您想构建一个基于摄像头的自动系统来实时跟踪扬声器的位置。根据他的位置,系统旋转摄像机,使扬声器始终位于视频的中间。
我们该如何解决这个问题?第一步是建立一个识别视频中人物的系统,并关注扬声器的位置。
让我们看看我们如何实现这一点。为了写这篇文章,我从Youtube上下载了一段视频,视频中有一位发言者在2017年DataHack峰会上讲话。
首先,我们导入必要的库:
然后,阅读视频并获取长度:
之后,我们创建一个输出文件,其所需的分辨率和帧速率与输入文件类似。
加载扬声器的示例图像以在视频中识别他:
所有这一切都完成了,现在我们运行一个循环,它将执行以下操作:
- 从视频中提取帧
- 找到所有面孔并识别它们
- 创建一个新视频,将原始帧与注释的扬声器面部位置相结合
让我们看看这个代码:
然后代码会给你一个这样的输出:
人脸检测真是一件很了不起的事情。
结论
恭喜!您现在知道如何为许多潜在用例构建面部检测系统。深度学习是一个非常迷人的领域,我很高兴看到我们下一步的前进方向。
在本文中,我们学习了如何利用开源工具构建具有实际用途的实时人脸检测系统。我鼓励你建立大量这样的应用程序,并自己尝试。