本书配套的所有资源都可以从网址http://aibook.cslt.org下载,这些资源既包括一些基础阅读材料,也包括一些可动手操作的示例系统,以下称为AIDemo系统。AIDemo中的所有示例都基于Linux操作系统,因此需要一些Linux的基础知识;另外,这些示例绝大部分是用Python语言编写的,如果希望对这些程序进行较细致的学习,需要对Python有初步的了解。访问本书的官方网址,可以学习关于Linux和Python的基础知识。
为了方便读者搭建AIDemo示例系统,我们将所有示例程序及其运行环境打包成一个虚拟机,只要安装这一虚拟机,即可体验这些示例,免去复杂的环境配置过程。我们选择VirtualBox虚拟机软件,该软件可免费下载安装,可移植性较好。安装AIDemo虚拟机需要主机至少有4GB内存,最好有8GB。AIDemo中的示例程序需要主机有网络环境,有声音输入输出设备。本节首先介绍VirtualBox和AIDemo的安装过程,之后以一个简单的人脸检测系统为例介绍AIDemo中示例程序的运行方法。
(1)在浏览器中输入网址https://www.virtualbox.org/wiki/Downloads.
(2)选择5.2版本,并选择合适的宿主机类型。对Windows用户,应选择Windows Hosts。下载安装包,进行默认安装即可。
(3)安装完成后,通过以下网址下载虚拟机映像(.ova文件):
http://aibook.cslt.org/aidemo/ova.html.
(4)在VirtualBox的“管理”菜单中选择“导入虚拟电脑”,在弹出的窗口中选择前一步所下载的.ova文件,完成AIDemo虚拟机安装。AIDemo安装完成后的VirtualBox界面如图1-11所示。
图1-11 安装完成AIDemo后的VirtualBox界面
(5)AIDemo虚拟机安装完成后,可双击该虚拟机图标启动系统,根据AIDemo主页(http://aibook.cslt.org/aidemo/demo.html)的提示索取密码,登录后即可开始体验AIDemo中的示例程序。
(6)我们会随时更新AIDemo系统,以方便读者体验最新的人工智能技术。请参考AIDemo主页上的提示信息进行示例程序的远程更新。
如果AIDemo虚拟机已经安装完成,且已经掌握了Linux和Python的基础知识,就可以开始体验一个简单的人工智能系统了。
首先以用户 tutorial 的身份登录AIDemo虚拟机,可以看到桌面上有一个主文件夹,鼠标双击该文件夹进入aibook→demo,即可看到若干文件夹,如图1-12所示。这些文件夹的内容如下。
图1-12 AIDemo所包含的文件夹
打开image或speech等目录,可以看到每个目录下有若干文件夹,每个文件夹对应一个示例程序。打开某一个示例程序,可以看到该文件夹下包括一个code目录和一个doc目录,前者保存了示例系统的源代码,后者保存了该示例的说明文档。AIDemo中的很多示例是从免费代码库github上下载后重新整理而成的,通常将从github上直接下载的代码放到org目录下。
认真阅读doc下的说明文档,可以了解运行相应示例程序的具体步骤。对大多数示例系统,code目标下的run.sh是主程序入口,运行该程序即可启动该示例的默认过程。这一运行过程需要在命令行窗口中执行。在AIDemo虚拟机桌面上右击,选择“打开终端”,进入相应示例程序的文件夹,再进入code目录,通过运行下述命令启动主程序:
sh run.sh
绝大多数示例程序都设计了实验环节,这些实验通过修改run.sh或其他配置文件,改变默认程序的运行特性,从而让读者加深对该示例的理解。修改run.sh或配置文件可以通过双击这些文件,启动图形界面编辑器来完成,也可以通过更复杂的编辑工具(如 vim )完成。
本小节选择人脸检测作为例子来说明如何运行AIDemo中的示例程序,该示例程序保存在image/face-detection下。所谓人脸检测,是指从一张照片中将人脸找出来,并用方框进行标注。人脸检测是第2章要介绍的人脸识别技术的基础,只有把人脸找到,才有可能对其进行识别。这一任务看似简单,但当图片中包含的场景比较复杂时,检测过程很容易出错。这里将忽略技术细节,仅介绍如何启动示例系统,并通过修改代码来改变检测系统的行为方式。
Face-detection示例程序事实上是机器视觉处理工具包OpenCV的演示样例。首先认真阅读image/face-detection/doc/README,了解运行步骤。然后打开一个终端,进入目录aibook/demo/image/face-detection/code,执行run.sh:
cd aibook/demo/image/face-detection/code sh run.sh
运行上述命令得到图1-13(a)所示的输入照片,回车后得到图1-13(b)所示的检测结果,再次回车则退出程序。
图1-13 Face-detection的默认主程序运行结果
(a)原图;(b)检测结果
Face-detection示例程序设计了三个实验来加深读者对人脸检测系统的理解。在第一个实验中,读者将通过修改detect.py中的参数来观察不同参数对检测结果的影响。例如,face_minSize用来设定脸的最小尺寸,当调小这一数值时,会有更多脸检测出来;相反,当调大这一数值时,只有足够大的脸才能被检测到。例如,当我们设face_minSize=(130,130)时,就只能检测出一张脸了,如图1-14(a)所示。如果进一步将眼睛的最小尺寸eye_minSize增大,如设eye_minSize=(60,60),则连眼睛都检测不出来了,如图1-14(b)所示。
在第二个实验中,我们用一张包含更多人脸的照片来考查该人脸检测系统的性能。修改detect.py,将输入图片变量photo_fn定义为一张包含多个人脸的照片,如img目录下的crowd.jpg,即设置photo_fn=img/crowd.jpg。用默认参数配置运行run.sh,可得如图1-15所示的检测结果。
图1-14 Face-detection修改参数后的运行结果
(a)设face_minSize=(130,130)之后的运行结果;(b)设face_minSize=(60,60)之后的运行结果
图1-15 Face-detection对多人脸照片的运行结果
在第三个实验中,我们鼓励读者用手机自拍一张照片,作为face-detection的输入图来进行人脸检测,观察光照、角度、姿态等对检测结果的影响。实验时,需要将照片上传到AIDemo虚拟机,并将detect.py中的photo_fn参数设成该文件的路径。将照片上传到虚拟机的方法有多种,一种简单的方法是将文件上传到第三方共享网站(如百度云),再从AIDemo虚拟机上通过浏览器下载;另一种方法是利用VirtualBox的文件夹共享功能,在主机和AIDemo虚拟机间交换文件。
通过上述实验过程,读者即可对人脸检测技术有个直观了解,对该实验的检测系统在性能、适用性上有更深入的认识。更重要的是,读者可以通过对模型参数进行调优,积累设计人工智能系统的基本技能,为深入学习和熟练应用人工智能技术打下基础。