手把手教你运用深度学习构建视频人脸识别模型(Python实现)

本文将展现如何使用开源工具完成一我的脸识别的算法。python

 

引言

 

“计算机视觉和机器学习已经开始腾飞,可是大多数人并不清楚计算机在识别一张图片的时候,它到底看到了什么。”——麦克.克里奇

 

计算机视觉这个精彩领域在最近几年日新月异,目前已经具有了必定的规模。大量的应用已经在全世界被普遍使用 —— 而这也仅仅是个开始!git

在这个领域中,我最赞扬的一件事就是对开源的接纳。即便是那些技术大佬们也乐于与你们分享新的突破和创新,从而使这些技术再也不“曲高和寡”。web

其中一项技术就是人脸识别,它能够解决不少现实问题(若是被正确又合乎伦理地使用)。本文将展现如何使用开源工具完成一我的脸识别的算法。如下是的一个有趣的演示,这也为接下来的内容作好铺垫:算法

 

 

手把手教你运用深度学习构建视频人脸识别模型(Python实现)

 

 

因此,你准备好了吗?精彩才刚刚开始!安全

提示:若是你想要了解计算机视觉的复杂性, 下面这个深度学习的计算机视觉是很好的起步课程。网络

Computer Vision using Deep Learninghttps://trainings.analyticsvidhya.com/courses/course-v1:AnalyticsVidhya+CVDL101+CVDL101_T1 /about

 

内容

 

  • 人脸识别中有前景的应用
  • 系统准备—— 硬件/软件要求
  • 硬件安装
  • 软件安装
  • 探究Python的实现
  • 简单演练
  • 人脸识别案例

 

人脸识别中有前景的应用

 

我找到了一些经典的人脸识别技术应用案例。你必定碰到过相似的例子,但并无意识到这些场景背后到底使用了什么技术!app

例如,对于每一张上传到平台的图像,Facebook都用自动生成的标签建议替代手动给图像加标签。Facebook使用了一个简单的人脸识别算法来分析图像中人脸的像素,同时将它和相关用户作比较。咱们将学习如何建立一我的脸识别模型,可是在咱们描述相关的技术细节以前,先来探讨一些其它的应用案例。机器学习

咱们如今经常用最新的“人脸解锁”功能来解锁手机。这是一个很小的人脸识别技术案例,以帮助维护我的数据安全。一样的想法能够应用于更大范围,使相机可以在抓取图像的同时识别人脸。ide

 

 

手把手教你运用深度学习构建视频人脸识别模型(Python实现)

 

 

人脸识别技术还应用于广告、医疗、银行等行业中,只是不太被人所知。在大多数公司,甚至在不少会议中,进入时都须要佩戴身份识别卡。可是咱们可否找到一种无需佩戴任何身份识别卡就能进出的方法呢?人脸识别很是有助于这个想法的实现。人们只须要看着镜头,系统就会自动判断他是否具有权限。工具

另外一个有趣的人脸识别应用是计算参与活动(如会议或音乐会)的人数。这并非手动计算参加者的数量,咱们能够安装一个摄像机,它可以捕捉参加者影像并计算人员总数。如此可使得过程自动化,同时也能节省大量人力。这个技术很是实用,不是吗?

 

 

手把手教你运用深度学习构建视频人脸识别模型(Python实现)

 

 

 

你能够想出更多相似的应用 ——在下面的留言中和咱们分享吧!

本文将侧重于人脸识别的实践应用,对算法如何运做只做注释。如果你想了解更多,能够浏览下面这篇文章:

Understanding and Building an Object Detection Model from Scratch in Python

https://www.analyticsvidhya.com/blog/2018/06/understanding-building-object-detection-model-python/

 

系统准备 —— 硬件/软件要求

 

如今你知道了人脸识别技术能够实现的应用,让咱们看看如何可以经过可用的开源工具来实现它。这就能体现领域的优点了 —— 分享开源代码的意愿和行动都是其余领域没法比拟的。

针对本文,如下列出了我使用的和推荐使用的系统配置以下:

  • 一个网络摄像头(罗技 Logitech C920)用来搭建一个实时人脸识别器,并将其安装在联想E470 ThinkPad系列笔记本(英特尔酷睿5第7代内核Core i5 7th Gen)。你也可使用笔记本电脑自带的摄像头,或电视监控系统摄像头。在任意系统上作实时的视频分析均可以,并不必定是我正在使用的配置。
  • 使用图形处理器(GPU)来加速视频处理会更好。
  • 在软件方面,咱们使用Ubuntu 18.04操做系统安装全部必要的软件。

 

为了确保搭建模型前的每件事都安排稳当,接下来咱们将详细探讨如何配置。

步骤一:硬件安装

首要的事就是检查网络摄像头是否正确安装。在Ubuntu上有一个简单小技巧 —— 看一下相应的设备在操做系统中是否已经被注册。你能够照着如下的步骤来作:

步骤1.1:在链接网络摄像头到笔记本电脑以前,经过在命令提示符窗口输入命令ls /dev/video* 来检查全部链接上的视频设备。这将列出那些已经链接入系统的视频设备。

 

 

手把手教你运用深度学习构建视频人脸识别模型(Python实现)

 

 

步骤1.2:链接网络摄像头并再次执行这一命令。

 

 

手把手教你运用深度学习构建视频人脸识别模型(Python实现)

 

 

 

若是网络摄像头被成功链接,将显示一个新的设备。

步骤1.3:另外一件你能够作的事是使用任一网络摄像头软件来检查摄像头可否正常工做,Ubuntu中你能够用“Cheese”来检查。

 

手把手教你运用深度学习构建视频人脸识别模型(Python实现)

 

 

这里咱们能够看出网络摄像头已经安装成功啦!硬件部分完成!

步骤二:软件安装

步骤2.1:安装Python

本文中的代码是用Python 3.5编写。尽管有多种方法来安装Python,我仍是建议使用Anaconda —— 数据科学中最受欢迎的Python发行版。

Anaconda下载连接:https://www.anaconda.com/download/

 

步骤2.2:安装OpenCV

OpenCV(Open Source Computer Vision) 是一个旨在建立计算机视觉应用的软件库。它包含大量预先写好的图像处理功能。要安装OpenCV,须要一个该软件库的pip安装:

pip3 install opencv-python

步骤2.3:安装face_recognition应用程序接口

最后,咱们将会使用face_recognition,它号称是世界上最简单的人脸识别应用程序Python接口。安装以下:

pip install dlib
pip install face_recognition

让咱们开始探索它的实现吧。

既然你已经配置好了系统,是时候探究真正的使用了。首先,咱们将快速地建立程序,而后分段来解释咱们作了什么。

 

简单流程

 

首先,建立一个face_detector.py文件同时复制下面的代码:

# import librariesimport cv2import face_recognition# Get a reference to webcam video_capture = cv2.VideoCapture("/dev/video1")# Initialize variablesface_locations = []while True:
 # Grab a single frame of video
 ret, frame = video_capture.read()
 # Convert the image from BGR color (which OpenCV uses) to RGB color (which face_recognition uses)
 rgb_frame = frame[:, :, ::-1]
 # Find all the faces in the current frame of video
 face_locations = face_recognition.face_locations(rgb_frame)
 # Display the results
 for top, right, bottom, left in face_locations:
 # Draw a box around the face
 cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)
 # Display the resulting image
 cv2.imshow('Video', frame)
 # Hit 'q' on the keyboard to quit!
 if cv2.waitKey(1) & 0xFF == ord('q'):
 break# Release handle to the webcamvideo_capture.release()cv2.destroyAllWindows()

而后,用以下命令执行这个Python文件:

python face_detector.py

若是一切运行正确,会弹出一个新窗口,以运行实时的人脸识别。

 

 

手把手教你运用深度学习构建视频人脸识别模型(Python实现)

 

 

总结一下,以上的代码作了这些:

  • 首先,咱们配置了运行影像分析的硬件。
  • 接下来咱们逐帧地捕捉实时影像。
  • 而后咱们处理每一帧而且提取图像中全部人脸的位置。
  • 最后,咱们以视频形式描绘出这些帧,同时标注人脸的位置。

 

这很简单,不是吗? 若是你想深刻了解更多细节,我已经对各代码段作了详尽注解。你能够随时回顾咱们作了什么。

 

人脸识别案例

 

有趣的事情并无结束!咱们还能作一件很酷的事情 —— 结合以上代码实现一个完整的案例。而且不须要从零开始,咱们仅仅须要对代码作一些小的改动。

例如,你想搭建一个自动的摄像头定位系统,来实时跟踪演讲者的位置。根据他的位置,系统会转动摄像头使得演讲者老是处于视频的中间。

咱们怎么作到这一点?第一步就是要搭建一个可辨识视频中人(们)的系统,而且重点放在演讲者的位置。

 

 

手把手教你运用深度学习构建视频人脸识别模型(Python实现)

 

 

让咱们来看一下如何才能实现这个案例。本文将以一个Youtube上的影片为例,视频记录了一个演讲者在2017年数据黑客峰会(DataHack Summit 2017)上的演讲。

首先,咱们引入必要的代码库:

import cv2
import face_recognition

而后,读入影片并获得影片长度:

input_movie = cv2.VideoCapture("sample_video.mp4")
length = int(input_movie.get(cv2.CAP_PROP_FRAME_COUNT))

随后咱们新建一个输出文件,使其拥有和输入文件类似的分辨率和帧频。

载入演讲者的一个影像样本,来识别视频中的主角:

image = face_recognition.load_image_file("sample_image.jpeg")
face_encoding = face_recognition.face_encodings(image)[0]
known_faces = [
face_encoding,
]

作完这些,如今咱们能够执行一个循环来完成以下步骤:

  • 从影片中提取一帧影像
  • 找到全部的人脸并完成识别
  • 新建一个影片,来将源帧图像和标注演讲者脸部的位置合并起来

 

让咱们看看这部分代码:

# Initialize variablesface_locations = []face_encodings = []face_names = []frame_number = 0while True:
 # Grab a single frame of video
 ret, frame = input_movie.read()
 frame_number += 1
 # Quit when the input video file ends
 if not ret:
 break
 # Convert the image from BGR color (which OpenCV uses) to RGB color (which face_recognition uses)
 rgb_frame = frame[:, :, ::-1]
 # Find all the faces and face encodings in the current frame of video
 face_locations = face_recognition.face_locations(rgb_frame, model="cnn")
 face_encodings = face_recognition.face_encodings(rgb_frame, face_locations)
 face_names = []
 for face_encoding in face_encodings:
 # See if the face is a match for the known face(s)
 match = face_recognition.compare_faces(known_faces, face_encoding, tolerance=0.50)
 name = None
 if match[0]:
 name = "Phani Srikant"
 face_names.append(name)
 # Label the results
 for (top, right, bottom, left), name in zip(face_locations, face_names):
 if not name:
 continue
 # Draw a box around the face
 cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)
 # Draw a label with a name below the face
 cv2.rectangle(frame, (left, bottom - 25), (right, bottom), (0, 0, 255), cv2.FILLED)
 font = cv2.FONT_HERSHEY_DUPLEX
 cv2.putText(frame, name, (left + 6, bottom - 6), font, 0.5, (255, 255, 255), 1)
 # Write the resulting image to the output video file
 print("Writing frame {} / {}".format(frame_number, length))
 output_movie.write(frame)# All done!input_movie.release()cv2.destroyAllWindows()

这段代码将输出以下相似的结果:

 

 

手把手教你运用深度学习构建视频人脸识别模型(Python实现)

 

 

人脸识别真的是一件了不得的事情!

 

总结

 

恭喜!你如今已经掌握了如何为一些现实场景搭建人脸识别系统。深度学习是一个如此使人着迷的领域,而我很是期待看到它将来的发展。

在这篇文章中,咱们学习了如何在真实情境中运用开源工具来构建实时人脸识别系统。我但愿你能创造更多相似的应用,而且本身尝试更多的案例。相信我,还有不少东西要学习,而他们真的很趣!

一如既往,若是你有任何问题或建议尽管在下面的留言部分提出来吧!

 

原文标题:

Building a Face Detection Model from Video using Deep Learning (Python Implementation)

原文连接:

https://www.analyticsvidhya.com/blog/2018/12/introduction-face-detection-video-deep-learning-python/

相关文章
相关标签/搜索