face_recognition结合pinpong开发人脸识别门禁
谢作如
涉及学科:技术、电子电路、工程
人脸识别是人工智能的一个热门应用,在我们的生活中已经随处可见,如手机面部解锁、火车站进站检票、超市扫脸付款等。因而,人脸识别也成为中小学人工智能教育中一个重要案例,很多教材都会通过各种方式,让学生体验或者实现人脸识别,感受人工智能的强大功能。
在计算机中实现人脸识别非常简单,一个摄像头加上某个特定的软件,就能体验类似年龄、性别和颜值等方面的识别。但仅仅这样的体验是不够的,还要引导学生讨论:我们能应用人脸识别技术做点什么?正是基于这样的思考,一些创客往往会利用类似树莓派、虚谷号的迷你电脑,结合其他硬件,设计人脸识别相关的作品,在制作中学习和理解人工智能,如人脸识别门禁。其实这样的智能作品实现难度并不大,借助face_recognition和pinpong,中小学生也能开发类似的作品(如图1)。
● 人脸识别门禁系统的技术实现
人脸识别门禁是智能家居、智慧校园和创客教育中的典型案例,体现了人工智能在生活中的真实应用。作为一款人工智能的应用,我们总是期望这些系统能够运行在真实的环境,让学生得到一种不一样的成就感。例如,要求学生将人脸识别门禁系统部署在学校创客空间的门口,让原来的普通门锁升级为智能门锁。那么,这个人脸识别门禁系统需要达到如下两个基本要求:
一是能够运行在迷你电脑上。因为我们总不能接一台巨大的PC机,放在大门的旁边。如果用普通计算机,不仅接线成为难题,连供电都麻烦。
二是能够驱动常见的电子锁。常见的电子锁类似一个继电器,只要给特定的接口提供一定的电流,就能打开或者关闭锁舌。
要让人脸识别门禁系统运行在迷你电脑上,那首选的开源硬件肯定是树莓派、虚谷号和拿铁熊猫之类。这些开源硬件的特点是都能运行Linux和Python。而采用Python作为编程语言,本来就是我们最好的选择之一。首先,使用Python就意味着我们开发的应用是跨平台的,能够很好地运行在各种开源硬件上。其次,Python的人工智能相关库很多,搭建一个人脸识别应用的技术难度较低。
● 开发环境的搭建
人脸识别门禁是一个典型的信息系统,涉及多方面的功能,如拍摄人脸、识别人脸和门锁控制等。这里的人脸识别,指的是对特定人群的人脸识别。以我校的创客空间为例,只有科技制作社的部分学生有权限进入,系统的摄像头要能够将当前的人脸和预设的用户人脸进行比较,匹配成功则开门。具体的工作流程如图2所示。
1.软件环境的搭建
从工作流程中可以看出,人脸识别门禁的核心功能也分为识别、匹配和开门三部分。我们分别使用了三个相关的库来完成这些功能。
摄像头控制:OpenCV。
OpenCV是著名的开源计算机视觉库。绝大多数的Python项目都会利用OpenCV来控制摄像头。其实OpenCV也具备了人脸识别的功能,只不过相对face_recognition来说,要稍微复杂一点。
安装方法:pip install opencv-python。
人脸识别和匹配:face_recognition。
在人脸识别的库方面,我们选择了face_recognition。face_recognition是一个强大、简单、易上手的人脸识别开源项目,并且配备了完整的开发文档和应用案例。face_recognition对硬件的要求比较低,树莓派和虚谷号都能流畅运行。
安装方法:pip install face_recognition。
门锁控制:pinpong。
一些开源硬件都已经具备了驱动外围电子模块的功能,如树莓派有GPIO功能,虚谷号和拿铁熊猫则整合了一块Arduino。如果使用的是其他类型的迷你电脑,则需要借助Arduino或者掌控板之类的智能终端。不管采用什么开源硬件,pinpong库都是最佳选择之一。pinpong库是一个基于Firmata协议开发的Python硬件控制库,支持多款开源硬件,是虚谷计划中众多开源软件中的一个组成部分。Pinpong库的特点是代码简洁,而且配置方便。
安装方法:pip install pinpong。
需要强调的是,安装这几个库一般还要先安装一些依赖库,而这些安装工作是由pip自动完成的。
2.硬件环境的搭建
考虑到绝大多数创客空间都有Arduino,这个项目选择了虚谷号。但是在本机测试可以使用任何一块Arduino,如DFRduino。
扩展板和一个继电器模块是必需的。如果希望体积小一点,这里推荐使用树莓派Zero。如果用的是NUC或者HTPC,则推荐beetle控制器,结合专用的扩展板,体积很小,安装起来特别方便,如图3所示。
器材清单:①开源硬件——虚谷号、扩展板;②扩展模块——继电器、电子锁(电磁锁)。
硬件连接:有些电子锁(电磁锁)采用9-12V的电压支持,所以需要用继电器(或者通用开关控制模块)来控制。不同的硬件连接方式大同小异,接线参考如下页图4所示。
● 代码测试和运行
限于篇幅,这里仅仅提供了几段核心代码,需要具体的代码请访问虚谷号的GitHub官方文档(vvBoard-docs)。
1.摄像头检测人脸
参考代码如图5所示。
2.匹配预设的人脸
参考代码如图6所示。
3.控制继电器打开门锁
参考代码如图7所示。
● 结语
自国务院发布《新一代人工智能发展规划》以来,全国各地涌现出一大批人工智能教材。但现有的教材中,人工智能与人的交互手段非常单一,无非是键盘鼠标的输入和屏幕输出,再加上语音的交互。对中小学生而言,没有结合硬件的人工智能应用总不够直观形象、酷炫有趣,缺乏“生活”气息。以人脸识别为例,让学生设计具备人脸识别功能的创客作品,无論是学习兴趣还是最终收获,都要远高于局限于普通电脑的“体验”。在做中学,在研中学,人工智能教育需要结合真实的动手实践。
其实,在人工智能教育兴起之前,我国在创客教育方面已经得到了很好的发展。很多学校都配置了创客空间,也购买了如Arduino和掌控板之类的开源硬件,为人工智能教育的进一步实施打下了良好的基础。在face_recognition和pinpong之类扩展库的支持下,很多基于Python开发的人工智能应用,只要再加几行代码就能够感知外部环境,并且可以控制各种类型的电机,让人工智能不仅能够像人一样思考,还能够像人一样动起来。