本文主要参考了一个外国人写的博客:http://www./2016/04/18/install-guide-raspberry-pi-3-raspbian-jessie-opencv-3/ 其他系统或平台可以根据下面这个地址对号入座:http://www./opencv-tutorials-resources-guides/ 感觉外国人写的东西还是比较清楚的,step by step。这篇文章还把每一步所需要的时间也拿出来了,非常贴心。避免在一些要很长时间的步骤傻等在那的尴尬。本文根据第一个网址在装有Raspbian Jessie 的树莓派3上编译openCV。但是还是遇到了一些问题或者与作者描述不同的现象,现在把它记录下来,针对一些时间超过五分钟的步骤,笔者也把它标记一下。下面的内容已经默认已经有了一个装有Raspbian Jessie的树莓派3,且可以通过SSH或者其他方式可以访问到树莓派。 一 查看树莓派版本 如果不确定树莓派的系统版本,可以使用 lsb_release -a 命令。 注意,有的网友说使用 uname -a 命令。但是得到的却不是这里需要的信息。 二 扩张文件系统 使用下面命令打开配置项: sudo raspi-config 并没有找到原文作者写的“Expand File System”这一项,并且使用 df -h 命令查看了一下可用空间,由于作者用的8GSD卡,笔者用的是16G的,故大胆猜测,跳过这一步,应该不会有太大问题。 至于原文作者提到为了节省空间,删除wolfram-engine,可以节省600多兆的空间。wolfram-engine用于支持wolfram语言,被捆绑在树莓派的操作系统中。百度了一把wolfram感觉不明觉厉。 三 安装依赖文件 1. 更新数据源 sudo apt-get update sudo apt-get upgrade 这一步实际上才是正式开始的第一步,但是笔者一上来更新数据源就出师不利,第二个命令就出错了,非常影响心情。 具体的报错 当时忘了记录下来,但反正就是更新数据源失败之类的错误,主要问题还是在树莓派更新景象地址上。树莓派的镜像地址存放在 /etc/apt/sources.list 文件中(里面总共三行内容,后两行被注释掉)。当然换个国内的源应该没有问题,但笔者是按照当时网上的一种做法:将该文件第一、二行注释掉,第三行放出来,如下图: 这个做法是可以解决上面的报错问题的。 笔者后面也搜到了一些源,不过担心安全问题,就没有用。可能是笔者多虑了! 2. 安装依赖文件 这一步和原文的描述出入最大,很多库文件都安装不了,可能还是和上一步的数据源有关。这里仅仅罗列了需要 sudo apt-get 来安装的库,没有或者报"can't locate module XXX"的库,则直接忽略: build-essential cmake pkg-config libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libgtk2.0-dev libatlas-base-dev fortran python2.7-dev python3-dev 四 下载openCV源码 wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.1.0.zip unzip opencv.zip wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.1.0.zip unzip opencv_contrib.zip 这一步下载了opencv 和 opencv_contrib的源文件。opencv_contrib中存放了一些opencv中不太稳定的内容。但最好保证opencv_contrib和opencv的版本要保持一致。 五 安装python及虚拟环境 在Mac上默认安装了python2.7和python3.6。这里就涉及一个问题:到底是选择python2 还是python3。由于树莓派默认是已经安装了python2.7,当时就想用python2.但是python2 会有一个坑,就是不支持中文编码,而python3已经支持了中文编码,所以这里建议还是安装python3,也可 以都装一遍。但是如果在一台机器上,同时安装了python2 和python3 很容易搞混,所以这里建议使用virtualenv。有点虚拟机的意思,就是提供了一套独立的python环境。比如有两个项目分别要用到不同的环境,而我们可以根据各自项目需求来配置不同环境,不用都全局安装。 1. 安装pip wget https://bootstrap.pypa.io/get-pip.py sudo python get-pip.py 如果已经安装了就可跳过这一步,笔者这里就直接跳过了。 2.安装virtualenv和virtualenvwrapper sudo pip install virtualenv virtualenvwrapper sudo rm -rf ~/.cache/pip 第二个命令不知道为什么要执行,但笔者并没有找到这个路径,反正也是要删除,略过。 3. 配置virtualenv环境 # virtualenv and virtualenvwrapper export WORKON_HOME=$HOME/.virtualenvs source /usr/local/bin/virtualenvwrapper.sh 在~/.profile文件的末尾添加上面的内容,此时重新打开终端,就可以执行virtualenv相关的命令。如果想在当前终端中生效,也可以执行 source ~/.profile 命令。 4. 创建virtualenv工作环境 mkvirtualenv cv -p python2 mkvirtualenv ovforp3 -p python3 上面分别创建了使用python2 和 python3 的环境,实际使用时 根据需求选择其中一个命令执 行即可。笔者这里选择了第二条命令执行。 执行完后,如果在前面可以看到类似上图红框中的字段,则证明当前处于创建的virtualenv工作环境中。上面的创建命令只用使用一次,即创建该工作环境时。之后,如果需要重新进入该虚拟 环境,可以使用下面的workon命令: workon ovforp3 这时就可以得到类似上图的现象。 5. 安装Numpy pip install numpy 这里没什么可讲,记录一下,之前在python2环境中编译时,这里一直安装失败;换成python3环境后,就没有问题。 六. 编译 安装 OpenCV 1. 配置编译项 编译前确定当前是处于虚拟工作环境中,然后执行下面的命令: cd ~/opencv-3.1.0/ $ mkdir build $ cd build $ cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.1.0/modules \ -D BUILD_EXAMPLES=ON .. 这里首先创建了一个build的目录,进入该目录,并执行后面的cmake命令。这个build不知道有什么用,反正从头到最后 也没看到里面有什么内容。但是如果不在这里执行cmake命令,又会报错。姑且这么干吧! 可以看见Cmake命令后面跟了长串参数。大家可以根据名字猜测用处。其中OPENCV_EXTRA_MODULES_PATH的值可以根据实际的路径进行修改。其他的保持不变。 其次 BUILD_EXAMPLES的值后面 有一个“..”(表示上一级),不要忘了。忘了也会出错。 按照原文多说法,这里会得到类似下面的结果: 笔者也确实得到了,但其中的Interpreter一栏并没有指向像上图中的虚拟环境中的地址,而是直接指向了本机的实际地址。这种现象,原文的解释是当前的工作环境没有切到对应的虚拟环境中,所以使用workon命令做一下切换就可以了。但笔者试了好几次,仍然不行。这让人很纳闷,只能先忽略这个问题。 2. 执行编译 先退回到opencv源代码的根目录,然后执行 make 命令即可。正如原文作者所说,使用 make -j4 执行一段时间后 由于争抢内核场景的原因会报错。那么老老实实用make命令吧。 执行这个编译命令非常耗时。笔者编过三次,每次的时间至少都在一个小时以上,所以,大家可以干点其他事,再来看结果。 上面也说了,笔者编了三次,肯定不会没事闲的慌,编三次。说明上面的命令有问题。真是坑呀。编了一个小时多,然后就编不过了。看看出错信息: stitching_detailed.cpp:(.text+0x188c): undefined reference to `cv::detail::SurfFeaturesFinderGpu::SurfFeaturesFinderGpu(double, int, int, int, int)' 这就让人蒙了,突然来一个找不到函数。搜了好久,发现了一个帖子,很有启发: https://devtalk./default/topic/766474/opencv4tegra-sourcecode-anyone-/ 总结一下,就是这里在编译 example目录时,由于缺少了opencv4tegra类库。两种方法:要么安装缺少的类库,要么在编译选项时不编译这部分内容。 考虑到上面的帖子的描述并不是针对树莓派环境,且这部分内容只是example,不影响openCV核心功能,所以决定使用第二种方法。这里需要退到上一步重新执行cmake命令,修改后的cmake命令如下: cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.1.0/modules \ -D BUILD_EXAMPLES=OFF .. 再次执行make问题,就不会报错了。 3. 安装 sudo make install sudo ldconfig 4.验证 在/usr/local/lib/python3.4/site-packages/或者/usr/local/lib/python3.4/dist-packages路径下(二选一)中可以找到cv2.cpython-34m.so文件(在python2中是cv2.so文件)。将它的名字改回cv2.so,并在当前的虚拟工作环境中建立软连接。 sudo mv cv2.cpython-34m.so cv2.so cd ~/.virtualenvs/cv/lib/python3.4/site-packages/ ln -s /usr/local/lib/python3.4/site-packages/cv2.so cv2.so 此时,在终端输入python,进入python交互式命令行,看能否打印出cv2的版本号,如下图: 大功告成。
|
|