利用Python+OpenCV在树莓派上轻松实现人脸识别

2018-10-03 19:45:35 57点赞 410收藏 21评论

上次在什么值得买发布了一篇关于人工智能认知服务的初级文章,是关于如何利用微软的云平台打造自己的QnA/FAQ自动应答聊天机器人,其实实现功能还是挺简单,如果对于流程熟悉的话,基本上十分钟就可以搭建完成了。

人工智能实例:十分钟无需代码打造自己的自动应答机器人小编注:此篇文章来自#全民分享季#原创征稿活动,成功参与活动将获得额外100金币奖励,还有最新款iPhoneXs和最新款AppleWatch!戳此链接了解活动详情。2015年,当微软CEO萨提亚∙纳德拉第一次提出“构建微软智能云”的远见时,很多人在问,微软智能云Azure究竟智能在什么地方?如今,人LifeIsKillingMe| 16 评论8 收藏161查看详情

这回想实现一个相对复杂一些的功能,就是基本的人脸识别。

认知服务——人脸识别技术综述

人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像机摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部识别的一系列相关技术,通常也叫做人像识别、面部识别。目前这项技术已经全面应用在人们的日常生活、出行、安防当中,带来了许多便利。

目前有很多平台可以实现人脸识别的技术,比如微软的Microsoft Azure上的人脸

利用Python+OpenCV在树莓派上轻松实现人脸识别

我们可以在程序中调用微软的人脸API,通过返回的JSON信息判断人脸特征、表情等等。其实调用的过程并不是复杂,微软提供了详细的文档,Github上也有各种官方示例。

调用人脸API首先需要Azure账号并且申请Subscription Key,试用过后需要按调用次数购买套餐。

当然除了微软的人脸API,也有很多本地的应用可以实现类似的功能,比如本文中调用的OpenCV应用。

人脸识别的过程基本上可以总结如下:

1 人脸图像采集及检测

2 人脸图像预处理

3 人脸图像特征提取以及匹配与识别

OpenCV提供了本地的分类训练器,可以在没有网络连接的情况下,实现基本的人脸识别功能。

树莓派的开箱和准备工作

这个示例准备通过树莓派来实现。我之前也没有树莓派的把玩经验,但是之前也安装过Debian的系统,之前还曾经获取过RHCE的认证,不过因为工作中较少接触Linux系统,基本上都还给老师了。

要实现人脸识别,除了要有树莓派,还有要配套的摄像头,最好还有个液晶屏。

还在大淘宝上啥都有,我就按照“树莓派+人脸识别”的关键字进行搜索,就找到了合适的套餐,省了我不少事情。

整个套件的内容包括:

  • 树莓派3代B型号主板板载蓝牙无线

  • 系统16G闪迪卡

  • 高清HDMI触摸屏幕3.5寸最大支持1920像素,送触摸笔

  • 高清摄像头500万像素

  • 散热片两铜一铝

  • 电源和开关线1.5米

  • 3D打印定制精美外壳

下面开箱看看:

利用Python+OpenCV在树莓派上轻松实现人脸识别

实物深灰色的外观有点丑,略显粗糙,要是提供多种颜色的彩壳可选就好了。树莓派开发板上GPIO口上接了HDMI的显示屏和迷你摄像头,通过热熔胶组合。外壳基本上还算是严丝合缝。如果是需要自己拆卸的,也可以和店家说先不要粘合起来。右上角的摄像头位置可以稍微调整方位。

一侧是网口和四个USB接口,可以接驳普通的USB设备如键盘鼠标等等。

利用Python+OpenCV在树莓派上轻松实现人脸识别

另一端有音频输入输出口和电源口。

利用Python+OpenCV在树莓派上轻松实现人脸识别

下图可见16GB迷你SD卡已经接上去了,外壳还有散热口。

利用Python+OpenCV在树莓派上轻松实现人脸识别

电源线有独立的开关按钮,使用还是挺方便的。

利用Python+OpenCV在树莓派上轻松实现人脸识别

然后做一些树莓派上的准备工作:

首先当然是安装树莓派的操作系统了,淘宝卖家已经在树莓派上预装好了系统。如果想要自己安装,可以通过Win32 Disk Imager这款软件将img文件烧录至SD卡内。

利用Python+OpenCV在树莓派上轻松实现人脸识别

成功开机,桌面会提示一个警告,因为账号pi的密码未修改 。

利用Python+OpenCV在树莓派上轻松实现人脸识别

不过,3.5寸的显示屏实在是太小了,接上了键盘鼠标也不容易操作,所以我们还是利用传统的远程连接吧。

当然,首先要保证网络连接正常。可以ping一下确认连接成功。

利用Python+OpenCV在树莓派上轻松实现人脸识别

通过PuTTY连接这个IP地址的22端口。

利用Python+OpenCV在树莓派上轻松实现人脸识别

出现登录界面。

利用Python+OpenCV在树莓派上轻松实现人脸识别

树莓派的默认管理员账号是pi,密码是raspberry。

利用Python+OpenCV在树莓派上轻松实现人脸识别

如果习惯使用root账号的话,也可按照如下方法设置root账号。

利用Python+OpenCV在树莓派上轻松实现人脸识别

人脸识别Python程序实现

下面就是要准备Python程序了,这里我不会深入探讨程序中的每个Python语句,因为这里不是技术论坛,再说我对Python也不熟......淘宝卖家提供了程序文件,打包放到了百度云盘上。不过再问一些技术细节就不回复了,我只好自己搜索到了github上的源代码

其实,卖家已经在售出的树莓派上做好了所有的准备工作,如果你要重新开始的话,也可以按照github上的流程一步步实现。

sudo apt-get install build-essential cmake pkg-config python-dev libgtk2.0-dev libgtk2.0 zlib1g-dev libpng-dev libjpeg-dev libtiff-dev libjasper-dev libavcodec-dev swig unzip

1. 启用v4l2

sudo nano /etc/modules

# 增加一行记录

bcm2835-v4l2

# 重启后可以找到/dev/video0

# 编译v4l2-util

apt-get install autoconf gettext libtool libjpeg8 libjpeg8-dev

git clone git://git.linuxtv.org/v4l-utils.git

cd v4l-utils/

sudo ./bootstrap.sh

./configure

make

sudo make install

2. 编译OpenCV 2.4.9

wget https://jaist.dl.sourceforge.net/project/opencvlibrary/opencv-unix/2.4.9/opencv-2.4.9.zip

unzip opencv-2.4.9.zip

cd opencv-2.4.9/

cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local -DBUILD_PERF_TESTS=OFF -DBUILD_opencv_gpu=OFF -DBUILD_opencv_ocl=OFF

# 要使OpenCV开启对v4l2的支持 cmake之后要有以下输出

# V4L/V4L2: Using libv4l (ver 1.13.0)

sudo make

sudo make install

3. 安装PyQt4

sudo apt-get install python-qt4

准备工作完毕,将程序代码上传到树莓派上。方法有很多,这里我是使用SFTP协议的软件WinSCP。

使用非常方便,输入IP地址,用户名和密码连接。

利用Python+OpenCV在树莓派上轻松实现人脸识别

第一次使用会有一个警告,直接忽略即可。

利用Python+OpenCV在树莓派上轻松实现人脸识别

将程序文件夹拷贝至右侧目录下,注意,不要放在/tmp下面,重启之后文件会被删除。放在用户的home目录下即可。(截图中的目录不正确,大家注意哦~)

利用Python+OpenCV在树莓派上轻松实现人脸识别

通过CD命令切换到Python程序所在的文件夹,然后运行sudo python main.py

利用Python+OpenCV在树莓派上轻松实现人脸识别

结果收到了cannot connect to X server的错误。仔细想想就知道原因了,程序是有UI界面的,而Putty是纯命令行界面。

利用Python+OpenCV在树莓派上轻松实现人脸识别

所以呢,我准备安装一个VNC以继续我的实验。

命令是sudo apt-get install realvnc-vnc-server

利用Python+OpenCV在树莓派上轻松实现人脸识别

然后我们在配置界面将VNC启用,方法是首先输入sudo raspi-config

利用Python+OpenCV在树莓派上轻松实现人脸识别

然后依次选择Interfacing Options

利用Python+OpenCV在树莓派上轻松实现人脸识别

VNC点击Select,选择Yes启用。

利用Python+OpenCV在树莓派上轻松实现人脸识别

利用Python+OpenCV在树莓派上轻松实现人脸识别

然后在命令行中输入systemctl enable vncserver-virtuald.service确保服务开机自动运行

利用Python+OpenCV在树莓派上轻松实现人脸识别

然后在另一台Window的电脑中打开VNC Viewer尝试连接。

利用Python+OpenCV在树莓派上轻松实现人脸识别

输入pi用户名和密码

利用Python+OpenCV在树莓派上轻松实现人脸识别

可以看到已经可以在VNC中看到树莓派的桌面了,显示效果比那个迷你屏要清晰多了。

利用Python+OpenCV在树莓派上轻松实现人脸识别

对了,还有一步要做,示例程序的运行分辨率是竖屏的480x800,而树莓派的默认界面是横屏,不做修改的话程序的按钮是不能正常显示的。所以我们要修改树莓派的分辨率,方法是到/boot/config.txt,添加以下内容。

hdmi_cvt=800 480 60 6
hdmi_group=2
hdmi_mode=87# 设置屏幕旋转角度display_rotate=3

重启树莓派,可以看到变化。

利用Python+OpenCV在树莓派上轻松实现人脸识别

再次运行main.py,程序就可以正常运行了。(我发现摄像头保持在原来的位置拍出来的视频是反的,所以拆下来重新安装了下)

利用Python+OpenCV在树莓派上轻松实现人脸识别

点击人脸录入按钮,可以输入人名

利用Python+OpenCV在树莓派上轻松实现人脸识别

然后程序会自动开始连拍,直至进度变成100%。

利用Python+OpenCV在树莓派上轻松实现人脸识别

随后会跳出连拍的照片,可以选择面部特征明显不模糊的照片,并且将其他的照片删除,我发觉如果保留太多照片的情况下,程序运行时间会比较长,如果只是作为实验目的,保留一张照片即可。

利用Python+OpenCV在树莓派上轻松实现人脸识别

点击返回,并且点击主界面的人脸识别按钮,将人脸对准摄像头,可以看到系统已经识别出了我的人脸,显示出了我的名字(user:XXX)和准确率(confidence:XXX)。

利用Python+OpenCV在树莓派上轻松实现人脸识别

程序的改进建议

功能已经实现,我们还可以对程序做一些改进。比如我想让程序在识别出人脸之后,自动发邮件给我。

直接在ui.py文件中添加以下代码。目前主流Internet邮箱供应商都提供SMTP协议邮件发送方式,具体可以参见网站的使用说明。

利用Python+OpenCV在树莓派上轻松实现人脸识别

然后当程序识别出人脸的时候通过smtp协议发送邮件。

利用Python+OpenCV在树莓派上轻松实现人脸识别

测试了一下,效果还不错。这样我就可以将这个设备放在一个实际的应用场景中,比如公司的机房门口,我就可以知道哪些员工进出过机房,并且给我发送邮件通知。

利用Python+OpenCV在树莓派上轻松实现人脸识别

还有就是现在需要手工运行main.py打开人脸识别程序,如果遇到断电或者树莓派重启程序就关闭了。所以,现在我希望能够让树莓派开机之后自动运行这个Python程序。

这也有很多种方法,一种是在/etc/rc.local中添加一条命令,不过我没有成功...不知道原因

利用Python+OpenCV在树莓派上轻松实现人脸识别

还有一个方法是创建启动器(.Desktop文件):具体方法为到/home/pi/.config/autostart下创建一个任意命名的.desktop文件

利用Python+OpenCV在树莓派上轻松实现人脸识别

然后利用vi或者nano等文本编辑器输入以下格式的文本命令行。这里最关键的一行是Exec=sh /home/pi/shell/facerec.sh,其他内容无所谓。

利用Python+OpenCV在树莓派上轻松实现人脸识别

发张动图给大家看一下完整的启动流程。

利用Python+OpenCV在树莓派上轻松实现人脸识别

因为这个程序还是几年前的OpenCV+Python范例,所以功能上还有不少可以改进的空间,通过这个实例,我也第一次上手接触了树莓派,了解到了人脸识别这一看似高大上的功能其实可以轻松地在树莓派上实现;下次准备做个环境监测的树莓派,用于检测环境温湿度信息,下次再和大家分享。

展开 收起
21评论

  • 精彩
  • 最新
  • 太喜欢这个外壳了!有没有链接hhh

    校验提示文案

    提交
    店名得芯电子商城,可以搜索看看

    校验提示文案

    提交
    能分享一下代码吗,

    校验提示文案

    提交
    收起所有回复
  • 我一个文科生居然在一个购物折扣推荐网站上看树莓派!

    校验提示文案

    提交
  • 楼主能发一下百度盘的程序吗?我最后一步make 通不过

    校验提示文案

    提交
    我也是,make通不过,48行,没有那个文件

    校验提示文案

    提交
    遇到同样的问题,请问你解决了吗

    校验提示文案

    提交
    收起所有回复
  • @LifeIsKillingMe,能发我一个百度上的链接吗?

    校验提示文案

    提交
  • 真心期待楼主提供一份《基于人工智能的老板检测及报警系统》方案…… [大妈三宝]

    校验提示文案

    提交
  • 上周单位试了百度离线库+香蕉派Android6做人脸识别,超过2000张时速度降为3秒以上,不能接受,目前还在找可用的离线人脸识别板子。

    校验提示文案

    提交
    你的香蕉派用的什么摄像头,500张照片速度怎么样?能留个联系方式么?

    校验提示文案

    提交
    收起所有回复
  • 淘宝卖楼上的完美版解决方案,肯定大赚

    校验提示文案

    提交
  • 楼主可以发一个百度云盘的链接吗 在线急等!!

    校验提示文案

    提交
  • 照片会蒙混过关吗

    校验提示文案

    提交
  • 楼主你这个人数上限怎么改啊

    校验提示文案

    提交
  • 能不能请楼主帮我看看是什么问题,我想加楼主私聊

    校验提示文案

    提交
  • 能百度网盘发一下程序吗

    校验提示文案

    提交
  • 人脸识别离线库

    校验提示文案

    提交
  • 一定要编译安装opencv才可以吗,直接装opencv-python可以不

    校验提示文案

    提交
  • 我没编译试了过了

    校验提示文案

    提交
  • 能分享一下代码吗

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
410
扫一下,分享更方便,购买更轻松