最近买了一个raspberry Pi Camera v2,刚好有一个树莓派4b,心血来潮就想利用树莓派做一个人脸识别。

然后开始倒腾Opencv了,记录一下肝出来的过程。

一.首先我用的是最新的Raspbian Buster系统,可以到官网(https://www.raspberrypi.org/downloads/raspberry-pi-os/)下载。

用的是python3.7。

1.安装之前先更新一下环境

sudo apt-get update
sudo apt-get upgrade
sudo rpi-update

2.安装一下必要的依赖

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

3.安装开发工具(python3和pip)

sudo apt-get install python3 python3-setuptools python3-dev
wget https://bootstrap.pypa.io/get-pip.py
sudo python3 get-pip.py
 

4.下载OpenCV3.4.1和OpenCV-contrib的包

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
unzip opencv.zip
unzip opencv_contrib.zip 

下载完直接解压,如果这样下载比较慢的话,可以到网站直接下载。

 

5.安装opencv需要的库

sudo pip3 install numpy

6.开始进行编译Opencv,一般编译都是基于cmake

cd ~                # ~:指家目录,一般是/home/pi
mkdir opencv
cd opencv   # 将下载好的opencv
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 ..

增加swap空间

将swap大小从100MB增加到1024MB,可以方便OpenCV使用Pi的4个核进行编译

vim /etc/dphys-swapfile

找到 CONF_SWAPSIZE 这个变量,将100改成1024,然后保存退出。使用如下命令重启:

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

7.编译安装opencv

这个过程比较漫长,而且碰到了很多错误,我大概编译安装了两个多小时,编译的过程还是很快乐的看着一直在编译着。

make -j4
sudo make install
sudo ldconfig  

 编译完成后记得 ,将swap大小从1024MB改回100MB

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

8.编译完成测试

在命令行下输入:python3,然后import cv2导入,如果导入成功不会有提示信息。接下来可以用cv2.__version__测试当前opencv的版本

 进入目录opencv-3.4.1--samples--cpp--example_camke(编译一下先cmke .. 再make )

最后./opencv_example

这样你就成功了

   

错误记录

1.fatal error: boostdesc_bgm.i: 没有那个文件或目录 #include "boostdesc_bgm.i"

查阅资料是因为少了一些文件,如下

boostdesc_bgm.i
boostdesc_bgm_bi.i
boostdesc_bgm_hd.i
boostdesc_lbgm.i
boostdesc_binboost_064.i
boostdesc_binboost_128.i
boostdesc_binboost_256.i
vgg_generated_120.i
vgg_generated_64.i
vgg_generated_80.i
vgg_generated_48.i

下载这些文件,将这些文件放在相应的目录下(/home/pi/opencv/opencv_contrib-3.4.1/modules/xfeatures2d/src)

资源下载

链接: https://pan.baidu.com/s/1XrQeLb5O2Kt1gA-QwCtPGg 

密码: jpwp

 

2./home/pi/opencv/opencv-3.4.1/modules/stitching/include/opencv2/stitching/detail

  /matchers.hpp:52:12: fatal error: opencv2/xfeatures2d/cuda.hpp: 没有那个文件或目录

错误的原因是缺少cuda.hpp文件,这些文件在opencv_contrib-3.4.1/modules/xfeatures2d/include/opencv2目录下,所以直接将这个目录下的文件拷贝到opencv-3.4.1/modules/stitching/include/opencv2/即可

cp ~/opencv/opencv_contrib-3.4.1/modules/xfeatures2d/include/opencv2/* ~/opencv-3.4.1/modules/stitching/include/opencv2/

 这个过程中注意你自己的路径,按照你自己的路径去拷贝。

 

3.编译到99%又死了,最后一个错误。

[modules/python2/CMakeFiles/opencv_python2.dir/__src2/cv2.cpp.o] Error 1

/home/pi/opencv/opencv-3.4.1/modules/python/src2/cv2.cpp:889:34: error: invalid conversion from ‘const char*’ to ‘char*’ [-fpermissive]

出错是应为const char不能转换为char。解决这个问题很简单,就是将const char强制类型转换为char,可是因为没找到出错的地方,所以几次编译都死在了这里了。

解决方法

vim ~/opencv/opencv-3.4.1/modules/python/src2/cv2.cpp

 原文链接:https://blog.csdn.net/simonforfuture/article/details/101716181