欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

手把手教你python人脸识别自动开机

程序员文章站 2022-04-17 17:01:20
...

演示视频:

Python+树莓派 人脸识别开机

是不是厌烦了每次回家都要点击按钮打开电脑的操作?

你如果有看过我以前的推送,是不是厌烦了每次回家都要喊“echo,turn on my pc”,让智能音箱打开电脑的操作?

现在,我们有一个全新的操作,坐到椅子上就能让电脑开机!

(避免你跟我一样,拥有一口蹩脚的英语,让echo听不懂的尴尬)

本教程所需要的工具及应用:

1.一个树莓派3
2.一个可在树莓派3上运行的摄像头(我用的是罗技C270,树莓派官方摄像头也可以)
3.Python3
4.路由器一台,及支持WakeOnLan的主机(大部分都支持)

如果你只是想在windows/macos上尝试一下人脸识别而不需要进行自动开机,则需要:

1.Python3
2.一个可运行的摄像头

自动开机效果演示:

1. 安装必要的python组件

windows/macOS:

pip install opencv-python

非常简单,和树莓派的安装复杂度不是一个级别的。

树莓派

树莓派上的安装过程比较复杂,需要耐心折腾,分为以下步骤:

1.1 安装Cmake等编译openCV源码的工具
sudo apt-get install build-essential cmake pkg-config
1.2 安装几种常见格式的图像操作的包
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
1.3 安装视频操作的包
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev  
sudo apt-get install libxvidcore-dev libx264-dev
1.4 openCV用于图像/GUI展示的功能依赖highgui模块,为了编译它我们需要安装libgtk2.0-dev
sudo apt-get install libgtk2.0-dev
1.5 额外依赖
sudo apt-get install libatlas-base-dev gfortran
1.6 当然,还要安装构建Python扩展所需要的头文件
sudo apt-get install python2.7-dev python3-dev
1.7 下载并编译opencv和opencv_contrib的源码

下载并解压:

cd ~
wget -O opencv.zip https://github.com/opencv/opencv/archive/4.1.0.zip
unzip opencv.zip 
wget -O opencv\_contrib.zip https://github.com/Itseez/opencv\_contrib/archive/4.1.0.zip
unzip opencv\_contrib.zip

编译:

cd ~/opencv-4.1.0/
mkdir build & cd build 
cmake -D ENABLE\_PRECOMPILED\_HEADERS=OFF \\ -D CMAKE\_BUILD\_TYPE=RELEASE \\ -D CMAKE\_INSTALL\_PREFIX=/usr/local \\ -D INSTALL\_PYTHON\_EXAMPLES=ON \\ -D OPENCV\_EXTRA\_MODULES\_PATH=~/opencv\_contrib-4.1.0/modules \\ -D BUILD\_EXAMPLES=ON ..
make -j4 
make install 
make ldconfig

PS:请注意你自己放置的目录和版本的区别,make -j4 是四线程进行编译,过程大约需要2-3个小时,如果说j4编译失败,请去掉-j4这个参数,直接make (单线程,这样大约需要6-9个小时).

2. 测试你的摄像头

编写如下的Python文件,test.py:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZPs8KJJm-1587692902817)(https://pythondict.com/wp-content/uploads/2020/03/2020030217243485.png)]

运行本程序:

python test.py

如果成功,你将会看到你的摄像头灯亮起(如果有灯的话),屏幕出现两个窗口,一个是彩色的,一个是灰色的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-teRRaWho-1587692902819)(https://pythondict.com/wp-content/uploads/2020/03/2020030217245927.png)]

你还可以在读取到frame后对frame进行操作,如

frame = cv2.flip(frame, -1) # 垂直反转摄像头图形

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2lRdkFgt-1587692902820)(https://pythondict.com/wp-content/uploads/2020/03/2020030217251454.png)]

对摄像头进行垂直翻转。

2. 人脸识别

人脸识别模块我们将使用Haar级联分类器,我们自己搜集人脸图片然后进行训练是比较麻烦的,好在openCV已经提供了相关的人脸识别XML文件,使用这些文件我们就能直接进行人脸或笑脸的识别,下载地址:

https://github.com/opencv/opencv/tree/master/data/haarcascades

我们代码需要用到里面的 haarcascade_frontalface_default.xml ,当然,如果你想尝试别的识别也可以进行下载。

编写如下的Python文件,test2.py:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-unZNXDWh-1587692902822)(https://pythondict.com/wp-content/uploads/2020/03/2020030217252942.png)]

运行本程序:

python test2.py

如果成功,当有人脸出现在摄像头范围内,则会被用蓝色框框画起来。如图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BoIEWU9y-1587692902824)(https://pythondict.com/wp-content/uploads/2020/03/2020030217254839.png)]

3. 获取你的人脸数据作为训练集

好了,我们刚刚成功识别了人脸,现在我们需要识别出某个人脸是某个人,比如当我出现在镜头中,它要识别出这个人就是“幻象客”。

新建文件夹train_data,用于保存拍摄下来的人脸,一共拍摄五十张人脸图片,get_train_data.py:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hhVCO0Bc-1587692902825)(https://pythondict.com/wp-content/uploads/2020/03/2020030217260114.png)]

4. 训练刚刚得到的数据

拍摄完我们的图像后,我们还需要对这些图片进行训练,train.py:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9He1IUTH-1587692902826)(https://pythondict.com/wp-content/uploads/2020/03/2020030217261834.png)]

训练完成后,当前文件夹会出现trainer.yml文件,这就是我们所需要的模型文件。

5.实体对象并通知设备自动开机

现在我们就可以使用刚刚训练出来的模型文件,对人脸进行检测,以识别出该人脸的实体对象。

recognize.py 代码如下:
如果你只是在windows或者macOS上运行,直接把wake_on_lan函数调用去掉即可。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v1fESzmd-1587692902827)(https://pythondict.com/wp-content/uploads/2020/03/2020030217270242.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uk6I5UkP-1587692902828)(https://pythondict.com/wp-content/uploads/2020/03/2020030217271329.png)]

其中,在标记人脸部分,由于我们的训练集数量少,我把识别到的人脸然后开机的阈值调到了40,避免无法自动开机的尴尬之处,当识别到的人脸的信度大于40,这个人脸对应的名字是我的时候,才会进行开机操作。

这么低的信度也不需要担心识别到别人的脸也开机,经过测试,陌生人的脸大约只有10~20的信度。当然,如果你还是担心,可以把训练集增加,然后调高该判断的信度阈值。

wake_on_lan()函数中的参数,是你需要自动开机的电脑的mac地址。wake on lan 简称WOL,它能让你使用路由器通过LAN端口对某个设备进行开机的操作。本推送中的自动开机使用到的功能就是这个。你需要在路由器的管理页面中,看到本机的mac地址,并送入这个函数中。

树莓派上运行这个Python文件,将脸凑到摄像机前,就会将mac地址对应的设备开机(当然,这个设备要连着路由器才行)。

===========================================

思考一下,其实当训练集够多的时候,准度是相当高的,如果你的照片已经保存在某些数据中,比如尝试过人脸识别通过火车站。那么通过监控摄像头获取你每天的日常路线将轻而易举。这是一件比较可怕的事,我们需要认真思考新时代的人脸识别技术的应用范围了

欢迎查看本系列的其他教程:

系列教程一, 本文章用到了该文章中提到的wake on lan.

1. 利用智能音箱语音控制电脑开关机

系列教程二

2. 语音控制 - 改造普通风扇

系列教程三

3. 语音控制 - 改造普通台灯

我们的文章到此就结束啦,如果你希望我们今天的Python 教程,请持续关注我们,如果对你有帮助,麻烦在下面点一个赞/在看哦。

有任何问题都可以在下方留言区留言,我们都会耐心解答的!


​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

手把手教你python人脸识别自动开机

相关标签: Python 教程