背景知识
1 人工智能
人工智能(Artificial Intelligence),英文缩写为AI。人工智能是人类设计并在计算机环境下实现的模拟或再现某些人智能行为的技术,是研究使计算机来模拟人的某些思维过程和智能行为(如学习、推理、思考、规划等)的学科,研究的一个主要目标是使机器能够胜任一些通常需要人类智能才能完成的复杂工作。在计算机领域内,人工智能得到了愈加广泛的重视。人工智能作为新一代信息技术领域的核心板块之一,已经在基础层、技术层和应用层等多方位领域中实现了应用,渗透到了我们生活中的方方面面。人工智能包括十分广泛的科学,它由不同的领域组成,如机器学习、计算机视觉等等。
人工智能的发展与机器学习算法的不断进步(如图8.1所示)有着密不可分的关系。1993年之后,得益于机器学习算法的不断发展,人工智能迎来飞速发展阶段。在这个时段,人工智能曾多次击败过人类:1997年,当年5月11日电脑深蓝以3.5:2.5击败卡斯帕罗夫,成为首个在标准比赛时限内击败国际象棋世界冠军的电脑系统。2011年,Watson作为IBM公司开发的使用自然语言回答问题的人工智能程序参加美国智力问答节目,打败了两位人类冠军。同年,iPhone4s发布,其亮点在于搭载了支持语音识别并能通过语音进行人机互动的Siri,而Siri也一直都被认为应用了人工智能技术。2013年,深度学习算法被广泛运用在产品开发中。Facebook人工智能实验室成立,探索深度学习领域,借此为Facebook用户提供更智能化的产品体验;谷歌收购了语音和图像识别公司DNNResearch,推广深度学习平台;百度创立了深度学习研究院等。2016年,围棋人工智能程序AlphaGo以4:1的成绩战胜围棋世界冠军李世石。2017年,基于深度学习的AlphaGo化身Master,再次出战横扫棋坛,让人类见识到了人工智能的强大。
计算机程序主要包括输入、运算和输出,而研究人工智能的计算机程序,很多时候是在研究“聪明的算法”,能够适应各种各样的实际情况,让计算机程序通过运算,从输入的数据出发,正确而高效地得出应该输出的结果。机器学习是一种实现人工智能的方法,在人工智能的这一轮发展中,它发挥了重要的作用。机器学习的应用已遍及人工智能的各个分支,如专家系统、自动推理、自然语言理解、模式识别、计算机视觉、智能机器人等领域。机器学习方法最成功的应用领域之一便是计算机视觉。计算机视觉的应用在整个人工智能应用领域中占比达34.9%,已成为各行业发展的重要支撑。相关数据显示,2018年中国计算机视觉领域获得超过230亿元的投资,在中国人工智能领域的投资当中占比超过三分之一。
2 计算机视觉
计算机视觉(computer vision,CV),用计算机来模拟人的视觉机理获取和处理信息的能力,指用摄影机和电脑代替人眼对目标进行识别、跟踪和测量等机器视觉,并进一步做图形处理,用电脑处理成为更适合人眼观察或传送给仪器检测的图像。
计算机视觉是一门关于如何运用照相机和计算机来获取我们所需的,被拍摄对象的数据与信息的学问,试图建立能够从图像或者多维数据中获取信息的人工智能系统,是使计算机能像人那样通过视觉观察和理解世界,具有自主适应环境的能力。计算机视觉的挑战是要为计算机和机器人开发具有与人类水平相当的视觉能力。机器视觉需要图像信号、纹理和颜色建模、几何处理和推理、物体建模等。一个有能力的视觉系统应该把所有这些处理都紧密地集成在一起。
随着深度学习的进步、计算机存储的扩大以及可视化数据集的激增,计算机视觉技术得到迅速发展。从目标跟踪、目标检测、目标识别等领域,计算机视觉都担当着重要角色。随着人工智能技术落地生花,计算机视觉将扶摇直上,解锁更多应用场景,帮助各行业创造更大的价值。
3 人脸检测与人脸识别
人脸检测(Face Detection)和人脸识别(Face Recogonition)技术是计算机视觉领域中最热门的应用。2017年,《麻省理工科技评论》发布全球十大突破性技术榜单,来自中国的刷脸支付技术位列其中。目前,人脸识别技术已经广泛应用于金融、司法、军队、边检、航天、电力、医疗等行业。
人脸检测就是在一副图像或一个序列图像(比如视频)中判断是否有人脸,若有则返回人脸的大小、位置等信息。在这个过程中,系统的输入是一张可能含有人脸的图片,输出是人脸位置的矩形框。一般来说,人脸检测应该正确检测出图片中存在的所有人脸,完成的是寻找人脸的功能,不能漏检、错检。人脸识别则是在假设图像或者图像序列中有人脸的情况下,根据人脸的特征判断人的身份等信息,即确定检测到的人脸是谁。
在python中,有很多可以用于人脸检测与人脸识别的第三方库,可以调用dlib库来进行人脸识别,调用预测器“shape_predictor_68_face_landmarks.dat”进行68点标定;也可以引入Face Recognition软件包来管理和识别人脸,该软件包使用dlib中最先进的人脸识别深度学习算法,使得识别准确率在《Labled Faces in the world》测试基准下达到了99.38%;也可以安装opencv-python,使用OpenCV中已经训练好的模型来检测人脸。
4 OpenCV计算机视觉包
OpenCV(Open Source Computer Vision Library)是一个基于BSD许可(开源)发行的跨平台计算机视觉库,于1999年由Intel建立,如今由Willow Garage提供支持。它可以运行在Linux、Windows、MacOS操作系统上,轻量级而且高效——由一系列 C 函数和少量C++类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法,其覆盖了工业产品检测、医学成像、无人机飞行、无人驾驶、安防、卫星地图与电子地图拼接、信息安全、用户界面、摄像机标定、立体视觉和机器人等计算机视觉应用领域。其框架结构如图8.3所示。OpenCV-Python是OpenCV的Python版本,可以下载并安装使用。
安装好的OpenCV-Python中,cv2/data文件夹下保存了诸多已经训练好的分类器,用来识别人险、眼睛、微笑等等,它以XML文件的形式存储,在data文件夹里可以看到下图所示的内容。
不同的xml用来识别不同的对象,说明详见下表。
表 OpenCV中的分类器说明表
序号 | 名称 | 用途说明 |
1 | haarcascade_frontalface_default.xml | 人脸检测器(默认) |
2 | haarcascade_frontalface_alt2.xml | 人脸检测器(快速Harr) |
3 | haarcascade_profileface.xml | 人脸检测器(侧视) |
4 | haarcascade_lefteye_2splits.xml | 眼部检测器(左眼) |
5 | haarcascade_righteye_2splits.xml | 眼部检测器(右眼) |
6 | haarcascade_mcs_mouth.xml | 嘴部检测器 |
7 | haarcascade_mcs_nose.xml | 鼻子检测器 |
8 | haarcascade_fullbody.xml | 身体检测器 |
9 | lbpcascade_frontalface.xml | 人脸检测器(快速LBP) |
在做物体检测时使用Harr分类器,可以直接在网上搜索别人训练好的xml文件能够更快捷的进行物体检测。另外,如果我们想构建自己的分类器,比如识别火焰、汽车、数字、花等,我们依然可以使用OpenCV训练构建。
接下来,我们将使用OpenCV中已经训练好的XML格式的分类器进行人脸检测。OpenCV的官网上提供很多的技术文档,具体的使用实例可以查看网站:
https://docs.OpenCV.org/4.0.1/d7/d8b/tutorial_py_face_detection.html