最近买了一个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