树莓派通过OpenCV来进行人脸识别

katekate 发布于 2022-10-26 477 次阅读


说明:本文章来源于https://blog.csdn.net/weixin_45880057/article/details/113925609,本人根据实际经验加以改动。

一、安装系统和部署环境

1.检查硬件

笔者使用的是树莓派4B 2G版本,系统是官方32位系统,16G内存卡,树莓派v1.3CSI摄像头,提前测试好摄像头是否能够正常使用:

摄像头使用方法,先在raspi-config里面打开对于摄像头的支持:

sudo raspi-config

选择interface options

选择legacy camera并打开,重启系统。

使用树莓派系统自带的拍照软件进行测试:

raspistill -o imageTest.jpg

拍照得到的照片在命令行的工作目录里面。

2.环境部署

请先更换软件源,否则下载速度会很慢:可以参考中科大镜像源的帮助:https://mirrors.ustc.edu.cn/help/raspbian.html

首先确保树莓派默认的python环境是python3,如何确定,在命令行直接输入

python

观察python命令提示符是否是python3.x.x(新装系统一般都是)如果不是,请参考这位博主的文章:https://blog.csdn.net/weixin_45880057/article/details/113926491

安装所需包体

sudo apt-get install build-essential cmake unzip pkg-config
sudo apt-get install libjpeg-dev libpng-dev libtiff-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 libcanberra-gtk*

请每行单独输入。

安装pip:(大多数的系统应该是自带了pip,无需下载)

wget https://bootstrap.pypa.io/get-pip.py
sudo python3 get-pip.py

下载python包:

sudo pip install virtualenv virtualenvwrapper numpy
sudo rm -rf ~/get-pip.py ~/.cache/pip

编辑profile文件:

sudo nano ~/.profile

在该文件的最后面添加如下内容:

export WORKON_HOME=/home/pi/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv
source /usr/local/bin/virtualenvwrapper.sh
export VIRTUALENVWRAPPER_ENV_BIN_DIR=bin

重新编译:

source ~/.profile

3.下载OpenCV

注意:本步骤你的下载速度可能会比较慢(我这里速度还挺快),如果比较慢请考虑使用特殊方法加速下载。

命令行的下载方法:

cd ~
wget -O opencv.zip https://github.com/opencv/opencv/archive/4.3.0.zip
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.3.0.zip

下载的文件保存在/home/pi,解压文件(请先安装unzip)

unzip opencv.zip
mv opencv-4.3.0 opencv
unzip opencv_contrib.zip

二、编译OpenCV和安装

1.编译OpenCV

首先安装编译程序cmake(应当已经预装)

sudo apt-get install cmake

创建编译文件夹:

cd ~/opencv
mkdir build
cd build

进行编译检查:(这一步可能需要耗时5分钟,如果你的网络好的情况下)

cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-4.3.0/modules \
    -D ENABLE_NEON=ON \
    -D ENABLE_VFPV3=ON \
    -D BUILD_TESTS=OFF \
    -D OPENCV_ENABLE_NONFREE=ON \
    -D INSTALL_PYTHON_EXAMPLES=ON  \
    -D BUILD_EXAMPLES=ON  ..

注意:在此过程中,cmake需要从网络上下载文件,同理由于国内网络问题下载可能很慢(但是可以耐心等待)因此建议您使用特殊方法进行下载。

准备完成以后,会显示两个done:(直接借用原文章图片)

确认完毕以后,就可以进行编译:

sudo make -j4

根据本人亲身实践,这一步大约耗时1-1.5个小时(树莓派4B 2G内存)在执行编译过程中,建议不要操作树莓派,因为观察系统性能可以发现CPU均处于100%状态,因此多余操作会影响系统性能。编译命令后面加的j4是使用的处理器核心数,当然越多越好,根据你的需求来定(树莓派4B一共有4个核心)。

关于原作者所说的在编译过程中出现的错误,我没有遇到,出现错误的原因可能是上一步准备编译下载文件的时候超时,导致编译的时候没有可用文件报错。如果你的上一步文件下载都是正常的话,应该不会出现问题的。

2.安装OpenCV

sudo make install

这一步的命令执行应当较快。

执行完毕以后,可以打开python,输入import cv2如果没有报错安装就完成了。

三、使用OpenCV

首先测试摄像头:使用luvcview

sudo apt-get install luvcview
luvcview -s 640x480

640x480可以根据自己的摄像头的性能进行更改,我的摄像头是CSI摄像头v1.3不带夜视功能,使用较高分辨率会画面不正常,请根据你自己的摄像头的情况测试。使用Ctrl+C退出。

下载人脸检测程序:

cd
git clone https://gitee.com/jeebus/Facial_Recognition.git
cd Facial_Recognition

运行检测程序:

python3 simpleCamTest.py

会弹出两个摄像头窗口,一个是彩色一个是灰度。先检测摄像头是否颠倒,如果颠倒那么每一次执行下一步操作之前都要修改程序(更改一次保存后面就不用改了)Ctrl+C退出

更改文件

cd FaceDetection
nano faceDetection.py

找到While(true)部分,找到img=cv2.filp(img,-1)将-1改成1,使用Ctrl+O保存,Ctrl+X退出。这样摄像头应当是正向的。

采集人脸信息:

创建文件夹:

cd …/FacialRecognition
mkdir dataset

摄像头倒置先修改代码:

nano 01_face_dataset.py

找到同样的位置进行修改,保存。(这里也可以修改拍照次数,默认是30,可以增加以提高正确率,但是同样也会增加系统负载)

运行采集程序:

python3 01_face_dataset.py

首先要求输入用户ID,这里只能输入数字,然后面对摄像头,会弹出一个摄像窗口并拍照,一直面对摄像头等到窗口消失即可。

训练人脸:

mkdir trainer

python3 02_face_training.py

识别人脸:

摄像头倒置的先修改代码:

nano 03_face_recognition.py

同样位置修改即可。

运行程序:

python3 03_face_recognition.py

即可进行识别及辨别正确度。

此作者没有提供个人介绍
最后更新于 2022-10-26