说到这个opencv,真的是装的我想吐血。本来还记录了挺多错的,结果重装系统一下子都没了。不过还好,只是ubuntu没了。我之前装cuda装不好的时候由此还一不小心把windows干掉了,还好因为新电脑没多少东西在里面。所以啊,重要的东西不要放在桌面,也不要丢在C盘,ubuntu下的文件也不要放在它自己的computer里,直接放在windows的盘里。然后磁盘分区还有格式化这种事情,如果有可能,新手还是不要自己作死的尝试了,我是没办法...
caffe官方的配置文档上又说,opencv需要>=2.4 包括3.0,好像这个配置下选3.0的比较多,所以我就选了3。我也是参考了特别多版本,最后成功的是参照(ref:http://embedonix.com/articles/image-processing/installing-opencv-3-1-0-on-ubuntu/),大部分是一样的,有一些报错的我自己修正了。
先要装一些依赖项,好像挺多人写的不一样的。我看过很多版本的教程,基本上所有教程一上来就都是这个,我应该都装过一遍了。所以,那个上面教程里写的那些依赖项会不会有缺少我也不是很清楚...
ref:http://docs.opencv.org/3.1.0/d7/d9f/tutorial_linux_install.html
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
然后就是下载opencv了,这里有个很大的坑。
如果你出现了这样的错误:
error: ‘NppiGraphcutState’ has not been declared
你的opencv下错了...传说中好像opencv3不支持cuda8.0,所以要改。
1.有人是这么写的(ref: http://stackoverflow.com/questions/40051573/opencv-3-1-0-with-python-3-5):
mkdir ~/git
cd ~/git
git clone https://github.com/opencv/opencv.git
cd ./opencv
git checkout 3.1.0
cd ~/git
git clone https://github.com/Itseez/opencv_contrib.git
cd ./opencv_contrib
git checkout 3.1.0
2.也有人这么写(ref: http://embedonix.com/articles/image-processing/installing-opencv-3-1-0-on-ubuntu/):当然,这里面他是自己建了一个opt的文件夹,然后cd到了那个文件夹下。
/opt$ cd opencv
/opt/opencv$ git checkout 3.1.0
/opt/opencv$ cd /opt/opencv_contrib
/opt/opencv_contrib$ git checkout 3.1.0
/opt/opencv_contrib$ cd /opt/opencv
但是我比较奇怪,就是我的git checkout 3.1.0老是给我报错。就大概是说找不到文件路径之类的,截的图也找不到了。于是找了另外的方法,可以解决这个兼容问题(ref: http://www.linuxidc.com/Linux/2016-07/132860.htm)。
在path/to/opencv/modules/cudalegacy/src/graphcuts.cpp中,把
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)
改为
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION>=8000)
往下走。
/opt/opencv$ mkdir release
/opt/opencv$ cd release
/opt/opencv/release$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=/opt/opencv_contrib/modules /opt/opencv/
这个地方要注意的是,他的路径载/opt/opencv所以才这么写的。像我的是载/home/aem/Downloads/opencv,我就用这个
/opt/opencv/release$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=/home/aem/Downloads/opencv_contrib/modules /home/aem/Downloads/opencv/
然后,在这里要注意了。cd到你的release文件夹下面,执行
sudo gedit CmakeCache.txt ,看一下 (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION>=8000) 有没有后面那个。有的话再再release文件夹下执行:
/opt/opencv/release$ make
/opt/opencv/release$ sudo make install
这个地方有个问题,就是第一句,make。有人会写在后面加东西,比如 make -j8。我加了,跑的特别快,但是就没跑通过。今早起来脑子有点晕晕乎乎,就忘记加了,直接走的make,然后走了大半个小时,从家里回来之后就跑通了。
有人说gcc的问题,说版本太高。但是我没有改过gcc,有次改了报错,我也没生成软连接。但是不知道以后会不会有错...还有一个hdf5报错的问题.(ref: https://github.com/NVIDIA/DIGITS/issues/156)
cd /usr/lib/x86_64-linux-gnu
sudo ln -s libhdf5_serial.so.8.0.2 libhdf5.so
sudo ln -s libhdf5_serial_hl.so.8.0.2 libhdf5_hl.so
还是不行的话,再改一下MakeFile.config的尾巴后面加这个
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/ and
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial/
再不行,试试这个
$ sudo ln -s /usr/lib/x86_64-linux-gnu/libhdf5_serial.so.10 /usr/lib/x86_64-linux-gnu/libhdf5.so
$ sudo ln -s /usr/lib/x86_64-linux-gnu/libhdf5_serial_hl.so.10 /usr/lib/x86_64-linux-gnu/libhdf5_hl.so
刚写到最后还有一丢丢赶去上课了,之前Part A 跟 Part B老师一个说自己的课very easy 和really simple我还不信。这个Part C的老师一来,真的是,飞的冲出外太空了。哎,要坚强。