我必须承认我是站在巨人的肩膀上,为了在树莓派上配置Opencv读了好多博客废了好多精力(也有很大一部分因为我太菜太笨了),踩了不少坑慢慢的学习才终于配置上了。本教程主要目的教你如何解决报错(不是替换文件而是修改源文件)报错原因多半是因为路径问题,每个人问题都不一样这也是折磨我这么久的原因。这也是我第一次写博客有问题可以评论及时告诉我会修改问题的。
相关网址:
树莓派初始化:
子豪兄:第3讲:一劳永逸配置树莓派.md
清华大学开源软件镜像站
Opencv配置:
子豪兄教你在树莓派上安装OpenCV
树莓派3和4B安装OpenCV教程(编译源码,一次成功)提供安装好OpenCV的系统镜像(必须谢谢这个老哥的博客帮助巨大)
树莓派4的opencv4.1.0–python3.7的开发环境安装
Opencv下载地址(一定要一个版本!!):
https://opencv.org/releases/page/2/(选Sources)
https://github.com/opencv/opencv_contrib/releases(选zip)
先扩容(我用的16G的卡,8G的就别看了买16G+的卡去,装完占用13G):
sudo raspi-config
网址:
清华大学源(最新的系统镜像应该都是Debian10,ps:子豪兄的那个有点老重做一下)
老规矩用’ # '备注以前的最后加新的然后 ctrl+o ctrl+x
sudo nano /etc/apt/sources.list
sudo nano /etc/apt/sources.list.d/raspi.list
sudo apt-get install build-essential cmake git pkg-config
sudo apt-get install libjpeg8-dev
sudo apt-get install libtiff5-dev
sudo apt-get install libjasper-dev
sudo apt-get install libpng12-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libgtk2.0-dev
sudo apt-get install libatlas-base-dev gfortran
下载Opencv文件与缺失文件
Opencv下载地址(一定要一个版本!!原网站链接有迅雷会员的可以用迅雷):
https://opencv.org/releases/page/2/(选Sources)
https://github.com/opencv/opencv_contrib/releases(选zip)
3.4.6与4.1.0含有缺失文件(有百度云会员的可以用这个)
链接: https://pan.baidu.com/s/1MMssaWZESNPeyeTTirF_Bw
提取码: qemx
只要缺失文件(我不会别的方法给你们了,只能这样了)
链接: https://pan.baidu.com/s/1f_k6d5DrPt6twfB5ao7x-Q
提取码: 5u76
// 下载OpenCV
wget -O opencv-3.4.3.zip https://github.com/Itseez/opencv/archive/3.4.3.zip
// 解压OpenCV
unzip opencv-3.4.3.zip
// 下载OpenCV_contrib库:
wget -O opencv_contrib-3.4.3.zip https://github.com/Itseez/opencv_contrib/archive/3.4.3.zip
// 解压OpenCV_contrib库:
unzip opencv_contrib-3.4.3.zip
我这里用3.4.6因为问题比4.1.0的多,都是大同小异的(具体两个版本区别在哪我也不知道)
解压
opencv-3.4.6.zip
opencv_contrib-3.4.6.zip
还有那个缺失文件
然后(注意路径我自己建了一个Opencv的文件夹,别憨憨的复制粘贴,开个记事本粘记事本上改一下路径,再复制粘贴)
cd ~/Opencv/opencv-3.4.6
新建release文件夹
mkdir release
进入release文件夹
cd release
不要憨憨的复制!!!
先粘在记事本上
也是要改改第五行要修改一下路径(别忘了把我打的提示删了,别把‘ \ ’也删了)
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=/home/pi/Opencv/opencv_contrib-3.4.6/modules \#这一行
-D BUILD_EXAMPLES=ON \
-D WITH_LIBV4L=ON \
-D PYTHON3_EXECUTABLE=/usr/bin/python3.7 \
-D PYTHON_INCLUDE_DIR=/usr/include/python3.7 \
-D PYTHON_LIBRARY=/usr/lib/arm-linux-gnueabihf/libpython3.7m.so \
-D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3/dist-packages/numpy/core/include \
..
不要以为不重要,你知道83%的时候他死机了,重启以后他报错文件受损只能重来的苦么还好我当时有备份可以少做一个配置cmake
cd ..
cp -r release ./release1
cd release/
把文件夹 boostdesc_bgm.i,vgg_generated_48.i等 里的所有文件都拷贝到(4.1.0一样免的缺失报错)
opencv_contrib-3.4.6/modules/xfeatures2d/src/
sudo make -j4 2>&1 | tee make.log
然后就可以等错误了
通常都是这一个错误因为头文件路径不对
解决方法就是找到有错误引用的源文件进行修改
找到这个源文件进行修改
问题来了这个头文件在什么位置,这个编译流程就是opencv源文件与opencv_contrib互调的过程,在引用头文件的过程特别容易因为路径原因报错(有更懂的大佬可以说一下,我就是在装opencv的时候略懂了一些)xfeatures2d这个文件是在opencv_contrib中的
opencv_contrib-3.4.6/modules/xfeatures2d/
在这个文件夹里的include文件夹里顺着这个"opencv2/xfeatures2d/cuda.hpp"路径走就可以看见cuda.hpp
下一步就是把那个引用改成绝对路径,特别小心别改错了home前面的 ‘ / ’ 总之要非常的小心,确定系统可以顺着路径找过去(也有xfeatures2d文件夹里调用自己文件夹里的头文件出错的情况,方法相同)
保存,回去按方向键上键倒出那个语句回车继续
有时候报几次错,原因可能相同,但是文件不同就说明之前改的文件没问题了,看懂他每次报错,再去找再去改,建议就是两个文件夹都打开分开找。
如果出现错误但是不说原因像这样
你就不管继续开始再跑还没有就再跑 sudo make -j4 2>&1 | tee make.log
他还是不报错但是错误的位置不同了就说明还是没有报出错来再跑 sudo make -j4 2>&1 | tee make.log
第三次出来问题了先找到错误的调用,再去xfeatures2d文件夹的include文件夹里找就可以找到xfeatures2d.hpp修改路径即可
漫长的等待过后,成功。
sudo make install
我建议直接实现人脸识别
树莓派
参考网址:
【跟子豪兄趣学python】十行Python代码实现人脸识别
级联分类器路径(我的解决办法就是绝对路径调用)
opencv-3.4.6/data/haarcascades
就在最开始解压的那个opencv-3.4.6里面找(如果有更好的调用方法可以跟我说一下我也是才接触不久)
import cv2
#找一个图片重命名为img,与程序文件放在一个文件夹下(要有人脸啊)
img = cv2.imread('img.jpg',1)
#这里要改用你的绝对路径
face_engine = cv2.CascadeClassifier('/home/pi/Opencv/opencv-3.4.6/data/haarcascades/haarcascade_frontalface_default.xml')
faces = face_engine.detectMultiScale(img,scaleFactor=1.3,minNeighbors=5)
for (x,y,w,h) in faces:
img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
再次感谢那些巨人的肩膀!!