Opencv和python3实现人脸识别(树莓派)

Opencv和python3实现人脸识别

.
.

硬件设备

树莓3、usb摄像头.

语言和库

Opencv、python3.

第一步:在树莓派上安装opencv和python(用时:约10小时)

分别按顺序输入以下的命令,等待安装完成:
展开文件系统:

$ sudo raspi-config

Opencv和python3实现人脸识别(树莓派)_第1张图片
Opencv和python3实现人脸识别(树莓派)_第2张图片

$ sudo reboot
$ sudo apt-get purge wolfram-engine
$ sudo apt-get purge libreoffice*
$ sudo apt-get clean
$ sudo apt-get autoremove

安装依赖关系:

$ sudo apt-get update && sudo apt-get upgrade
$ sudo apt-get install build-essential cmake pkg-config
$ sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
$ sudo apt-get install libxvidcore-dev libx264-dev
$ sudo apt-get install libgtk2.0-dev libgtk-3-dev
$ sudo apt-get install libatlas-base-dev gfortran
$ sudo apt-get install python2.7-dev python3-dev

下载opencv源代码:

$ cd ~
$ wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.3.0.zip
$ unzip opencv.zip
$ wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.3.0.zip
$ unzip opencv_contrib.zip
$ wget https://bootstrap.pypa.io/get-pip.py
$ sudo python get-pip.py
$ sudo python3 get-pip.py
$ sudo pip install virtualenv virtualenvwrapper
$ sudo rm -rf ~/.cache/pip
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
$ echo -e "\n# virtualenv and virtualenvwrapper" >> ~/.profile
$ echo "export WORKON_HOME=$HOME/.virtualenvs" >> ~/.profile
$ echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.profile
$ source ~/.profile

创建python虚拟环境:

$ mkvirtualenv cv -p python3
$ source ~/.profile
$ workon cv

在这里插入图片描述

在树莓派上安装numpy:

$ pip install numpy

编译并安装opencv:

$ workon cv
$ cd ~/opencv-3.3.0/
$ mkdir build
$ cd build
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.3.0/modules \
    -D BUILD_EXAMPLES=ON ..

python3显示如下:
Opencv和python3实现人脸识别(树莓派)_第3张图片

$ sudo  nano /etc/dphys-swapfile

编辑变量:

#set size to absolute value, leaving empty (default) then uses computed value
#you most likely don’t want this, unless you have an special disk situation
#CONF_SWAPSIZE=100 CONF_SWAPSIZE=1024

$ sudo /etc/init.d/dphys-swapfile stop
$ sudo /etc/init.d/dphys-swapfile start

编译opencv(此过程大约需要一到两小时)

$ make -j4

编译完成的样子:
Opencv和python3实现人脸识别(树莓派)_第4张图片

安装opencv3:

$ sudo make install
$ sudo ldconfig

收尾工作:

$ ls -l /usr/local/lib/python3.5/site-packages/
total 1852
-rw-r--r-- 1 root staff 1895932 Mar 20 21:51 cv2.cpython-34m.so

发现文件名为cv2.cpython-35m-arm-linux-gnueabihf.so cv2.so,需将其修改成cv2.so

$ cd /usr/local/lib/python3.5/site-packages/
$ sudo mv cv2.cpython-35m-arm-linux-gnueabihf.so cv2.so

将我们的OpenCV绑定对应到Python 3.5 的 cv虚拟环境中
$ cd ~/.virtualenvs/cv/lib/python3.5/site-packages/
$ ln -s /usr/local/lib/python3.5/site-packages/cv2.so cv2.so

测试opencv3安装是否成功:

$ source ~/.profile 
$ workon cv
$ python
>>> import cv2
>>> cv2.__version__

在这里插入图片描述

证明opencv安装成功!

编辑变量:

$ sudo  nano /etc/dphys-swapfile

#set size to absolute value, leaving empty (default) then uses computed value
#you most likely don’t want this, unless you have an special disk situation CONF_SWAPSIZE=100
#CONF_SWAPSIZE=1024

$ sudo /etc/init.d/dphys-swapfile stop
$ sudo /etc/init.d/dphys-swapfile start

此时,python3和opencv环境已安装完成。

第二步:测试摄像头是否正常运行(用时:3小时)

在笔记本电脑上远程连接树莓派3,登录我的树莓派,在远端进行linux命令的操作。

每次都要运行source ~/.profile命令,否则无法进入opencv虚拟环境
接下来输入 workon cv,出现

(cv) pi@raspberry:~$

证明已经进入cv虚拟环境。

运行python simpleCamTest.py 命令,可看到一个正常和一个灰色共两个摄像窗口。说明可以正常通过python和cv调用摄像头。

第三步:人脸检测 (用时:1小时)

新建一个存放本次实验的代码目录,并在此目录下新建一个名为Cascades的子目录,用来存放对象分类器,本实验主要是用来存放有关人脸的训练分类器。将haarcascade_frontalface_default.xml文件放于Cascades目录下。

运行 faceDetection.py,出现如下图的蓝色检测到人脸的方框。
Opencv和python3实现人脸识别(树莓派)_第5张图片

如果需要实现不仅检测脸部,还要检测眼睛、嘴巴等功能,可以分别在指定目录下放置不同的py件和xml文件。

如下图,是同时检测出脸部、眼部和嘴部的效果图:

Opencv和python3实现人脸识别(树莓派)_第6张图片

第四步:脸部数据收集(用时:1小时)

这一步的主要目的是创建一个简单的数据集,该数据集将储存每张人脸的 ID 和一组用于人脸检测的灰度图,当摄像头检测出人脸时能够显示本人的id。

新建一个名为FacialRecognitionProject的文件,用来储存python代码和人脸分类器。再新建一个名为dataset的子目录,用来存储人脸数据。

运行 01_face_dataset.py 代码,输入我的id为1,摄像头会自动为我拍摄30张照片作为训练样本。
Opencv和python3实现人脸识别(树莓派)_第7张图片

Opencv和python3实现人脸识别(树莓派)_第8张图片

第五步:训练(用时:约半小时)

这一步我们需要从数据集中抽取所有的用户数据,并训练 OpenCV 识别器,这一过程可由特定的 OpenCV 函数直接完成。

在FacialRecognitionProject目录下新建名为trainer的子目录,保存yml文件。用时,也要将haarcascade_frontalface_default.xml放在FacialRecognitionProject目录下。

运行代码 02_face_training.py,接下来一个名为trainer.yml的文件会保存在trainer目录下。

在这里插入图片描述

第六步:识别人脸(用时:约半小时)

运行 03_face_recognition.py 代码。在运行代码之前,需要修改数组中的字符串,names = [‘None’, ‘Marcelo’, ‘Paula’, ‘Ilza’, ‘Z’, ‘W’],分别对应id为0,1,2,3,4,5的名字。我在此将Marcelo修改成我的英文名See。最后,运行代码效果如下:
Opencv和python3实现人脸识别(树莓派)_第9张图片
Opencv和python3实现人脸识别(树莓派)_第10张图片

参考
来自树莓派实验室,http://shumeipai.nxez.com/2018/03/09/real-time-face-recognition-an-end-to-end-project-with-raspberry-pi.html.

你可能感兴趣的:(Opencv和python3实现人脸识别(树莓派))