林星翰
对于硬件爱好者来说,树莓派(Raspberry PI)是再熟悉不过的开发板,树莓派开发板体积虽小,但是功能非常强大。
最新树莓派3代B型板采用64位1.2GHz四核的ARM Cortex处理器,具有1G内存,支持使用Python语言进行软件开发,主板上预留的接口可完美对接与之配套的树莓派500万像素专用摄像头、7英寸液晶触摸屏、Sense Hat传感器模块等。
人脸识别是目前人工智能热门的应用领域之一,我尝试在树莓派上开发一个Python软件,实现人脸识别功能。
一、软件实现
人脸识别软件的主要功能是将待识别的人脸照片与照片库中的人脸照片进行匹配,如果相似度大于80%,则软件输出匹配成功的照片信息。人脸识别软件在电子支付、门禁系统、照相工具等领域都得到了广泛应用。
本软件使用的人脸识别功能主要通过云服务实现,具体来讲是通过调用旷视公司提供的Face++ open APIs来实现人脸特征库的构建和照片搜索匹配功能。本软件进行人脸识别的主要过程如下。
首先,软件调用Detect API对照片库中的照片进行人脸检测和分析,识别出人脸会给出face token,将face token加入Face set,用于后续的识别对比等操作。
然后,软件对用户输入的人脸照片进行处理,调用Search API在Face set中找出与目标人脸匹配的一张或多张照片。
最后,软件检查人脸与照片的相似度,如果相似度大于80%,认为匹配成功,向用户返回照片信息。软件的核心功能代码如图1所示。
本软件示例中使用了三张公众人物的照片作为匹配的照片库,对用户放在软件运行目录下的输入图像face_search_img.jpg进行匹配,如果匹配成功,软件会显示匹配成功的照片的人名等信息,否则,软件会反馈失败信息。
软件运行的过程包括创建人脸特征库faceSet,分析照片库的照片并将特征添加到faceSet中,使用输入的照片搜索相似人脸信息,对搜索结果进行比对和输出。需要注意的是,由于采用由旷视公司提供的Face++ APIs,因此在使用这些APIs之前,用户首先需要在旷视开放平台上申请试用的账号,然后在应用管理中可以看到平台分配的API key和密码,接着下载Face++的Python SDK,按照使用文档的说明在SDK中配置API key和密码,就可以开始调用Face++ APIs了。
目前该软件是市面上使用的人像监控识别系统的一个雏形,在此基础上再增加图像获取模块和识别成功后的处理模块,即可形成一个完整的人像监控识别软件。
如何将人脸识别软件在树莓派的平台上进行实现和应用,并通过树莓派提供的摄像头模块来增强本软件的功能?我做了以下尝试。
二、在树莓派上对软件进行演示验证
首先,要对树莓派的开发板进行操作系统安装和配置,还需连接电源模块、数据输入输出模块和摄像头模块等。可以查找相关的教程进行学习,也可以购买市面上的开发套件。
本文使用了亚博智能科技公司开发的视觉云台套件,已经完成了摄像头模块的安装,平台结构如图2所示。操作系统使用的是树莓派官方系统raspbian,系统预装了Python和C编译器等软件。
可直接用显示器进入系统桌面,也可以通过远程桌面进入系统,或者使用putty软件SSH。本设计以远程桌面登录为例。登录路由器查询分配给树莓派的IP地址。打开电脑的远程桌面软件,输入树莓派的IP地址,本次设计中树莓派的IP是192.168.1.55。用户名为pi,密码为raspberry。进入远程桌面系统后还可以连接本地Wi-Fi信号。
在树莓派上运行人脸识别软件的重点是使用树莓派的摄像头模块拍照,将拍摄的照片与照片库进行匹配。我使用picamera库来完成摄像头拍照的工作。具体代码如图3所示。
这段代码完成的功能包括对摄像头进行初始化,取得摄像头的控制权;设定摄像头的拍摄参数,包括感光度、拍照速度、曝光模式、白平衡等;控制摄像头连续拍照,将十张照片都保存为imageXX.jpg的格式(XX指照片的编号)。
这段代码使用了树莓派系统支持的picamera库来完成对摄像头的控制,那么如何在树莓派平台上安装picamera以实现对摄像头的控制?
树莓派的摄像头模块是由内核进行驱动,随着版本的更迭,修复了大量的漏洞,并且扩展了摄像头模块的相关功能,虽然picamera支持固件向后兼容,但在最新版发布时,picamera都是参照最新的固件进行测试,所以在安装库之前推荐进行固件升级,并使用最新的固件进行开发。
在安装之前,要先在树莓派的命令行下执行sudo apt-get update和sudo apt-get upgrade这两条语句,将树莓派更新到最新固件,然后运行sudo apt-get install python-picamera语句来安装picamera。
我开发的人脸识别软件的工作流程是:用户按下开关,软件开始控制树莓派对用户进行拍照,并保存十张照片,软件将十张用户的照片存储到软件所在目录,执行程序时,调用Face++的detectAPI将照片中的人脸信息存储在faceSet中,然后执行search的API对程序过程中拍摄的照片进行处理。
檢测照片中的人脸信息与之前上传的人脸信息对比,如果相似度达到80%以上,返回相似度最高的人脸信息,即完成人脸识别功能。