基于树莓派opencv的人脸识别

基于树莓派opencv的人脸识别

目录

  • 一、 实验目的
  • 二、 摄像头配置
    • 1. 硬件安装步骤
    • 2. 软件安装步骤
  • 三、 OpenCV安装
    • 1. OpenCV介绍
    • 2. Python3上OpenCV安装步骤
  • 四、运行人脸识别项目
    • 1. 硬件准备
    • 2. 环境准备
    • 3. 程序代码
      • (1)人脸数据收集
      • (2)训练识别器
      • (3)人脸识别
  • 五、总结

一、 实验目的

要实现图像识别,首先就是要获取图像,所以懂得如何安装及使用树莓派CSI摄像头就非常重要。

  1. 了解摄像头基本工作原理,安装及使用
  2. 了解opencv,配置人脸识别相关环境
  3. 收集人脸信息
  4. 训练收集到的人脸信息
  5. 将要分析的面部的捕获部分作为参数,并返回其可能的所有者,指示其ID以及识别器对此匹配的信任程度实现人脸的识别。

二、 摄像头配置

图.树莓派CSI摄像头

1. 硬件安装步骤

  1. 找到 CSI 接口(CSI接口在以太网接口旁边),掀起深色胶带。
  2. 拉起 CSI 接口挡板。
  3. 拿起摄像头模块,将贴在镜头上的塑料保护膜撕掉。确保黄色部分的PCB(有字的一面)是安装完美的(可以轻轻按一下黄色的部分来保证安装完美)。
  4. 将排线插入CSI接口。记住,有蓝色胶带的一面应该面向以太网接口方向。同样,这时也确认一下排线安装好了之后,将挡板拉下。

2. 软件安装步骤

(1) 进入树莓派终端系统,输入以下指令进行下载并安装最新的内核,GPU 固件及应用程序

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>sudo apt-get update
sudo apt-get upgrade
</code></span></span>

(2) 运行以下命令树莓派配置工具来激活摄像头模块

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>sudo raspi-config
</code></span></span>

 

依次选择Interfacing Options——>Camera——>Enable——>tab——>Finish

(3)重启树莓派

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>sudo reboot
</code></span></span>

(4)测试摄像头

输入命令行,如果得到下面的结果,则证明摄像头连接成功

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>vcgencmd get_camera
</code></span></span>

 
输入命令,在桌面会显示一张命名为image1.jpg的图片

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>raspistill -o Desktop/image1.jpg
</code></span></span>

 
(5)至此,树莓派摄像头软硬件配置到此完成

三、 OpenCV安装

1. OpenCV介绍

OpenCV是开源计算机视觉库,拥有强大的内置函数和开源社群。OpenCV配合便携开源廉价的树莓派,可以直接读取来自树莓派摄像头PiCamera的视频,进行人脸识别、边缘检测、语义分割、自动驾驶、图像识别等各种计算机视觉开发。

2. Python3上OpenCV安装步骤

(1)更新树莓派

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>sudo apt-get update
sudo apt-get upgrade
</code></span></span>

(2)安装依赖

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>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
</code></span></span>

(3)安装python3

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>sudo apt-get install python3 python3-setuptools python3-dev
</code></span></span>

(4)设置pip工具

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>wget https://bootstrap.pypa.io/get-pip.py
sudo python3 get-pip.py
</code></span></span>

 

(5)增大swap空间
找到CONF_SWAPSIZE这个变量,将100改成1024,表示swap大小从100MB增加到1024MB,可以方便OpenCV使用4核编译ctrl+o保存,ctrl+d退出

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>sudo nano /etc/dphys-swapfile
</code></span></span>

 

(6)重启swapfile文件

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start
</code></span></span>

(7)下载OpenCV3.4.1和OpenCV-contrib

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.4.1.zip
wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.4.1.zip
</code></span></span>

(8)解压OpenCV安装包

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>unzip opencv.zip
unzip opencv_contrib.zip
</code></span></span>

(9)安装numpy

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>sudo pip3 install numpy
</code></span></span>

(10)设置Cmake编译参数,注意参数名、等号和参数值之间不能有空格,但每行末尾“\”之前有空格,参数值最后是两个英文的点

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>cd /home/pi
cd ~/opencv-3.4.1/
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D INSTALL_C_EXAMPLES=ON \
      -D INSTALL_PYTHON_EXAMPLES=ON \
      -D OPENCV_EXTRA_MODULES_PATH=~/opencv/opencv_contrib-3.4.1/modules \
      -D ENABLE_PRECOMPILED_HEADERS=OFF \
      -D BUILD_EXAMPLES=ON ..
</code></span></span>

(11)编译并安装OpenCV

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>sudo make install
</code></span></span>

(12)更新动态链接库

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>sudo ldconfig
</code></span></span>

(13)安装完毕,测试OpenCV版本

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>python3
import cv2
cv2.__version__
</code></span></span>

 
出现opencv版本3.4.1代表安装完毕!
(14)恢复swap空间

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>sudo nano /etc/dphys-swapfile
</code></span></span>

将CONF_SWAPSIZE这个变量由1024改成100

(15)重启swapfile文件

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start
</code></span></span>

四、运行人脸识别项目

介绍如何在树莓派上,使用 OpenCV 和 Python 完成人脸检测项目

1. 硬件准备

  1. 树莓派4B
  2. 树莓派piCam
     
    请确保摄像头如上安装步骤进行安装,以免后期摄像头无法运行检测

2. 环境准备

1. OpenCV库准备
2. Python3语言准备
3. 人脸识别代码下载

(1) 进入网址 https://github.com/Mjrovai/OpenCV-Face-Recognition
 
(2) 下载zip代码压缩包,将文件存放至树莓派/home/pi目录下解压缩

3. 程序代码

OpenCV 具备很强的计算效率,且专门用于实时应用,它非常适合使用摄像头的实时人脸识别,要创建完整的人脸识别项目,我们必须完成3个阶段:
 

(1)人脸数据收集

人脸识别的最基础任务是人脸检测。你必须首先搜集人脸信息(第 1 阶段)才能在未来与捕捉到的新人脸对比时(第 3 阶段)识别它,具体步骤如下:
a)打开终端,进入目录/home/pi/OpenCV-Face-Recognition-master/FacialRecognition

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>cd /home/pi/OpenCV-Face-Recognition-master/FacialRecognition
</code></span></span>

b)创建dataset文件夹储存人脸样本,和trainer文件夹储存训练数据

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>mkdir dataset
mkdir trainer
</code></span></span>

c)打开01_face_dataset.py
 
d) 运行代码Run,输入用户ID(可以是1、2、3、4等整数)随后看到弹出image视频框,此时在收集人脸信息,对准人脸耐心等待

e) 打开dataset文件夹,可以看到搜集到的人脸图像,搜集到的图片阅读,人脸检测越准确

Tips:
如果人脸颠倒了,可以加#注释掉如下代码

(2)训练识别器

在第 2 阶段中,我们需要从数据集中抽取所有的用户数据,并训练 OpenCV 识别器,这一过程可由特定的 OpenCV 函数直接完成。这一步将在「trainer/」目录中保存为.yml 文件。
a)确定在 Rpi 中已经安装了 PIL 库,如果没有的话,在终端运行以下命令:

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>pip install pillow
</code></span></span>

b) 打开02_face_training.py ,运行
c) 等待运行完成
 

(3)人脸识别

b) 打开03_face_recognition.py ,运行,可以看到如下结果,人脸识别成功,其他具体功能自行探索。

 

五、总结

此次在完成人脸识别项目的过程中,遇到了许多的小困难,具体错误及收获如下:

  1. 一开始对摄像头进行安装时候,测试摄像头的时候一直弹出timeout的错误信息,后边经过排查确认了是摄像头不稳定造成的,拆下摄像头的排线,重新安装后即可正常工作。
  2. 安装OpenCV时,编译过程比较久,我安装的时候单编译就花费了四五个小时,后边通过网上查找资料,发现可以四核编译,才扩展了树莓派的swap空间,加快了编译速度,此外编译的过程中也有一些错误:

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>错误信息1:
fatal error: boostdesc_bgm.i: 没有那个文件或目录
           #include "boostdesc_bgm.i"
</code></span></span>

解决方法:
树莓派安装opencv时丢失的文件:
链接:百度网盘 请输入提取码
提取码:mbsj

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>将这些文件复制到/home/pi/opencv/opencv_contrib-3.4.1/modules/xfeatures2d/src目录即可继续编译。建议大家直接用xftp的方式将文件复制到该目录下即可。
</code></span></span>

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>错误信息2:
 /home/pi/opencv/opencv-3.4.1/modules/stitching/include/opencv2/stitching/detail
 /matchers.hpp:52:12: fatal error: opencv2/xfeatures2d/cuda.hpp: 没有那个文件或目录
</code></span></span>

解决方法:

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>错误的原因是缺少cuda.hpp文件,这些文件在opencv_contrib-3.4.1/modules/xfeatures2d/include/opencv2目录下,所以直接将这个目录下的文件拷贝到opencv-3.4.1/modules/stitching/include/opencv2/即可
</code></span></span>

通过此次的实验学习,初步掌握了识别人脸所需要的具体步骤,还知道了很多拓展知识,运行的代码主要是开源的python代码,python是一门高集成度的语言,我们在学习的时候看不到它的底层,用的时候就是直接调函数即可,这或许是python流行的一大原因。通过此次实验也使我们小组对树莓派有了一定的了解。

基于树莓派opencv的人脸识别

目录

  • 一、 实验目的
  • 二、 摄像头配置
    • 1. 硬件安装步骤
    • 2. 软件安装步骤
  • 三、 OpenCV安装
    • 1. OpenCV介绍
    • 2. Python3上OpenCV安装步骤
  • 四、运行人脸识别项目
    • 1. 硬件准备
    • 2. 环境准备
    • 3. 程序代码
      • (1)人脸数据收集
      • (2)训练识别器
      • (3)人脸识别
  • 五、总结

一、 实验目的

要实现图像识别,首先就是要获取图像,所以懂得如何安装及使用树莓派CSI摄像头就非常重要。

  1. 了解摄像头基本工作原理,安装及使用
  2. 了解opencv,配置人脸识别相关环境
  3. 收集人脸信息
  4. 训练收集到的人脸信息
  5. 将要分析的面部的捕获部分作为参数,并返回其可能的所有者,指示其ID以及识别器对此匹配的信任程度实现人脸的识别。

二、 摄像头配置

图.树莓派CSI摄像头

1. 硬件安装步骤

  1. 找到 CSI 接口(CSI接口在以太网接口旁边),掀起深色胶带。
  2. 拉起 CSI 接口挡板。
  3. 拿起摄像头模块,将贴在镜头上的塑料保护膜撕掉。确保黄色部分的PCB(有字的一面)是安装完美的(可以轻轻按一下黄色的部分来保证安装完美)。
  4. 将排线插入CSI接口。记住,有蓝色胶带的一面应该面向以太网接口方向。同样,这时也确认一下排线安装好了之后,将挡板拉下。

2. 软件安装步骤

(1) 进入树莓派终端系统,输入以下指令进行下载并安装最新的内核,GPU 固件及应用程序

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>sudo apt-get update
sudo apt-get upgrade
</code></span></span>

(2) 运行以下命令树莓派配置工具来激活摄像头模块

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>sudo raspi-config
</code></span></span>

 

依次选择Interfacing Options——>Camera——>Enable——>tab——>Finish

(3)重启树莓派

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>sudo reboot
</code></span></span>

(4)测试摄像头

输入命令行,如果得到下面的结果,则证明摄像头连接成功

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>vcgencmd get_camera
</code></span></span>

 
输入命令,在桌面会显示一张命名为image1.jpg的图片

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>raspistill -o Desktop/image1.jpg
</code></span></span>

 
(5)至此,树莓派摄像头软硬件配置到此完成

三、 OpenCV安装

1. OpenCV介绍

OpenCV是开源计算机视觉库,拥有强大的内置函数和开源社群。OpenCV配合便携开源廉价的树莓派,可以直接读取来自树莓派摄像头PiCamera的视频,进行人脸识别、边缘检测、语义分割、自动驾驶、图像识别等各种计算机视觉开发。

2. Python3上OpenCV安装步骤

(1)更新树莓派

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>sudo apt-get update
sudo apt-get upgrade
</code></span></span>

(2)安装依赖

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>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
</code></span></span>

(3)安装python3

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>sudo apt-get install python3 python3-setuptools python3-dev
</code></span></span>

(4)设置pip工具

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>wget https://bootstrap.pypa.io/get-pip.py
sudo python3 get-pip.py
</code></span></span>

 

(5)增大swap空间
找到CONF_SWAPSIZE这个变量,将100改成1024,表示swap大小从100MB增加到1024MB,可以方便OpenCV使用4核编译ctrl+o保存,ctrl+d退出

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>sudo nano /etc/dphys-swapfile
</code></span></span>

 

(6)重启swapfile文件

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start
</code></span></span>

(7)下载OpenCV3.4.1和OpenCV-contrib

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.4.1.zip
wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.4.1.zip
</code></span></span>

(8)解压OpenCV安装包

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>unzip opencv.zip
unzip opencv_contrib.zip
</code></span></span>

(9)安装numpy

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>sudo pip3 install numpy
</code></span></span>

(10)设置Cmake编译参数,注意参数名、等号和参数值之间不能有空格,但每行末尾“\”之前有空格,参数值最后是两个英文的点

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>cd /home/pi
cd ~/opencv-3.4.1/
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D INSTALL_C_EXAMPLES=ON \
      -D INSTALL_PYTHON_EXAMPLES=ON \
      -D OPENCV_EXTRA_MODULES_PATH=~/opencv/opencv_contrib-3.4.1/modules \
      -D ENABLE_PRECOMPILED_HEADERS=OFF \
      -D BUILD_EXAMPLES=ON ..
</code></span></span>

(11)编译并安装OpenCV

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>sudo make install
</code></span></span>

(12)更新动态链接库

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>sudo ldconfig
</code></span></span>

(13)安装完毕,测试OpenCV版本

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>python3
import cv2
cv2.__version__
</code></span></span>

 
出现opencv版本3.4.1代表安装完毕!
(14)恢复swap空间

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>sudo nano /etc/dphys-swapfile
</code></span></span>

将CONF_SWAPSIZE这个变量由1024改成100

(15)重启swapfile文件

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start
</code></span></span>

四、运行人脸识别项目

介绍如何在树莓派上,使用 OpenCV 和 Python 完成人脸检测项目

1. 硬件准备

  1. 树莓派4B
  2. 树莓派piCam
     
    请确保摄像头如上安装步骤进行安装,以免后期摄像头无法运行检测

2. 环境准备

1. OpenCV库准备
2. Python3语言准备
3. 人脸识别代码下载

(1) 进入网址 https://github.com/Mjrovai/OpenCV-Face-Recognition
 
(2) 下载zip代码压缩包,将文件存放至树莓派/home/pi目录下解压缩

3. 程序代码

OpenCV 具备很强的计算效率,且专门用于实时应用,它非常适合使用摄像头的实时人脸识别,要创建完整的人脸识别项目,我们必须完成3个阶段:
 

(1)人脸数据收集

人脸识别的最基础任务是人脸检测。你必须首先搜集人脸信息(第 1 阶段)才能在未来与捕捉到的新人脸对比时(第 3 阶段)识别它,具体步骤如下:
a)打开终端,进入目录/home/pi/OpenCV-Face-Recognition-master/FacialRecognition

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>cd /home/pi/OpenCV-Face-Recognition-master/FacialRecognition
</code></span></span>

b)创建dataset文件夹储存人脸样本,和trainer文件夹储存训练数据

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>mkdir dataset
mkdir trainer
</code></span></span>

c)打开01_face_dataset.py
 
d) 运行代码Run,输入用户ID(可以是1、2、3、4等整数)随后看到弹出image视频框,此时在收集人脸信息,对准人脸耐心等待

e) 打开dataset文件夹,可以看到搜集到的人脸图像,搜集到的图片阅读,人脸检测越准确

Tips:
如果人脸颠倒了,可以加#注释掉如下代码

(2)训练识别器

在第 2 阶段中,我们需要从数据集中抽取所有的用户数据,并训练 OpenCV 识别器,这一过程可由特定的 OpenCV 函数直接完成。这一步将在「trainer/」目录中保存为.yml 文件。
a)确定在 Rpi 中已经安装了 PIL 库,如果没有的话,在终端运行以下命令:

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>pip install pillow
</code></span></span>

b) 打开02_face_training.py ,运行
c) 等待运行完成
 

(3)人脸识别

b) 打开03_face_recognition.py ,运行,可以看到如下结果,人脸识别成功,其他具体功能自行探索。

 

五、总结

此次在完成人脸识别项目的过程中,遇到了许多的小困难,具体错误及收获如下:

  1. 一开始对摄像头进行安装时候,测试摄像头的时候一直弹出timeout的错误信息,后边经过排查确认了是摄像头不稳定造成的,拆下摄像头的排线,重新安装后即可正常工作。
  2. 安装OpenCV时,编译过程比较久,我安装的时候单编译就花费了四五个小时,后边通过网上查找资料,发现可以四核编译,才扩展了树莓派的swap空间,加快了编译速度,此外编译的过程中也有一些错误:

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>错误信息1:
fatal error: boostdesc_bgm.i: 没有那个文件或目录
           #include "boostdesc_bgm.i"
</code></span></span>

解决方法:
树莓派安装opencv时丢失的文件:
链接:百度网盘 请输入提取码
提取码:mbsj

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>将这些文件复制到/home/pi/opencv/opencv_contrib-3.4.1/modules/xfeatures2d/src目录即可继续编译。建议大家直接用xftp的方式将文件复制到该目录下即可。
</code></span></span>

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>错误信息2:
 /home/pi/opencv/opencv-3.4.1/modules/stitching/include/opencv2/stitching/detail
 /matchers.hpp:52:12: fatal error: opencv2/xfeatures2d/cuda.hpp: 没有那个文件或目录
</code></span></span>

解决方法:

<span style="background-color:#f5f5f5"><span style="color:#333333"><code>错误的原因是缺少cuda.hpp文件,这些文件在opencv_contrib-3.4.1/modules/xfeatures2d/include/opencv2目录下,所以直接将这个目录下的文件拷贝到opencv-3.4.1/modules/stitching/include/opencv2/即可
</code></span></span>

通过此次的实验学习,初步掌握了识别人脸所需要的具体步骤,还知道了很多拓展知识,运行的代码主要是开源的python代码,python是一门高集成度的语言,我们在学习的时候看不到它的底层,用的时候就是直接调函数即可,这或许是python流行的一大原因。通过此次实验也使我们小组对树莓派有了一定的了解。

Guess you like

Origin blog.csdn.net/weixin_42065767/article/details/121454919