超有趣!手把手教你用Python实现实时“人脸检测”

Instagram 的联合创始人兼首席技术官 Mike Kreiger 说:“计算机视觉和机器学习其实已开始流行起来,但是对于大多数人来说,计算机看了图像后看到了什么这方面还是比较模糊 。”
 

超有趣!手把手教你用Python实现实时“人脸检测”

文章插图
 
 
近年来,计算机视觉这个神奇的领域已渐成气候 。该技术在世界各地已有广泛的应用,而我们才开了个头!
我在这个领域最喜欢的事情之一是我们的社区拥抱开源这个概念 。连各大科技巨头也愿意与每个人分享新的突破和创新,以便这项技术不会成为“有钱人的玩物” 。
人脸检测就是这样一种技术,它在实际用例下拥有广泛的潜在用途(如果使用得当且符合伦理道德) 。在本文中我将介绍如何使用开源工具构建一种功能强大的人脸检测算法 。
人脸检测大有前景的应用
让我举几个表明人脸检测技术在普遍使用的典例 。我确信你肯定在某个时候碰到过这些用例,只是没有意识到幕后使用了什么技术!
比如,Facebook 把图像手动标记换成了为上传到平台的每张图片建议自动生成的标记 。
Facebook 使用一种简单的人脸检测算法来分析图像中人脸的像素,并将其与相关用户进行比较 。
我们将学习如何自行构建一个人脸检测模型,但在深入介绍这方面的技术细节之前,不妨讨论另外几个用例 。
我们习惯于使用最新的“人脸解锁”功能解锁手机 。这是表明如何使用人脸检测技术来保持个人数据安全性的一个很小的例子 。
同样技术可以在更大的规模内予以实现,使摄像头能够捕捉图像、检测人脸 。
在广告、医疗保健和银行等行业,有另外几个鲜为人知的人脸检测应用 。在大多数公司或甚至在许多会议中,你需要携带身份证件才能进入 。
但如果我们能找到一种方法,不需要携带任何身份证件就能进入,将会怎么样?
人脸检测有助于使这个过程流畅简单 。人只要看一眼摄像头,它就会自动检测要不要允许他/她进入 。
人脸检测的另一个值得关注的应用是可以计算参加活动(比如会议或音乐会)的人数 。
我们安装了一个可以捕获参与者图像并为我们提供总人数的摄像头,而不是手动计算参与者 。这有助于使整个过程自动化,并节省大量手动工作 。是不是觉得很有用?
在本文中我将着重介绍人脸检测的实际应用,简单介绍其中的算法是如何工作的 。
如何使用手头开源工具实现人脸检测
你已了解了人脸检测技术的潜在应用场景,不妨看看我们如何使用手头的开源工具来实现这项技术 。
具体就本文而言,这是我使用和推荐使用的软硬件:
  • 用来在联想 E470 ThinkPad 笔记本电脑(酷睿 i5 第 7 代)上构建实时人脸检测系统的网络摄像头(罗技 C920) 。
你还可以在其他任何适当的系统上使用笔记本电脑的内置摄像头或闭路电视摄像头用于实时视频分析,而不是采用我使用的这套设置 。
  • 使用 GPU 进行更快速的视频处理始终是额外好处 。
  • 在软件方面,我们使用了已安装所有必备软件的 Ubuntu 18.04 操作系统 。
不妨更深入一点地探讨这几点,确保在构建人脸检测模型之前已正确设置好了一切 。
第 1 步:硬件设置
你要做的第一件事是检查网络摄像头是否设置正确 。Ubuntu 中的一个简单技巧是查看设备是否已被操作系统注册 。
可以按照下列步骤来操作:
  • 将网络摄像头连接到笔记本电脑之前,进入到命令提示符并输入 ls /dev/video*,检查所有已连接的视频设备 。这会输出显示已连接到系统的视频设备 。
  • 连接网络摄像头,并再次运行上述命令 。如果网络摄像头已成功连接,命令会显示一个新设备 。
  • 可以做的另一件事是使用任何网络摄像头软件来检查网络摄像头是否正常工作 。你可以在 Ubuntu 中使用“Cheese”来执行这番操作 。
这里我们可以看到网络摄像头已正确设置 。硬件方面就是这些!
第 2 步:软件设置
①安装 Python
本文中的代码是用 Python 版本 3.5 构建的 。虽然有多种方法来安装 Python,但我建议使用 Anaconda,这是最流行的数据科学 Python 发行版 。
这是系统中安装 Anaconda 的链接:
https://www.anaconda.com/download ②安装 OpenCV
OpenCV(开源计算机视觉)是一个旨在构建计算机视觉应用程序的库 。它有许多用于图像处理任务的预编写函数 。


推荐阅读