编译OpenCV4 + Python3 笔记

主要参考
https://www.pyimagesearch.com/2018/08/15/how-to-install-opencv-4-on-ubuntu/

Update: 20190513

在Ubuntu 16.04系统上,默认的gcc和g++已经升级到5.5,该版本的g++/gcc与OpenCV4.0.0+CUDA9.1的兼容性并不好,编译时会包类似于下方所列的错误

/usr/lib/gcc/x86_64-linux-gnu/4/include/avx512fintrin.h(xxxx): error: argument of type “const void *” is incompatible with parameter of type “const float *”

更改CMake的配置,使用更新版本的g++/gcc似乎解决了这个问题。

Ubuntu 16.04安装g++6的方法请参考:https://askubuntu.com/questions/746369/how-can-i-install-and-use-gcc-6-on-xenial
(sudo add-apt-repository ppa:ubuntu-toolchain-r/test && sudo apt-get update && sudo apt-get install gcc-6 g+±6)
配置CMake使用特定g++/gcc的方法请参考:https://gitlab.kitware.com/cmake/community/wikis/FAQ
(在CMake 命令行上增加 -D CMAKE_C_COMPILER=gcc-6 -D CMAKE_CXX_COMPILER=g+±6)

编译时CUDA部分会报较多的warning,还未检测CUDA部分代码工作是否正常。

是时候升级到Ubuntu18 + CUDA10了吧。

另外,目前使用的是OpenCV 4.1.0, 此时不必再手工复制编译好的文件到python的目录内了。

更新CMake

OpenCV4要求使用cmake 3.5.1以上版本,更新cmake使用的命令为

sudo apt-get install software-properties-common
sudo add-apt-repository ppa:george-edison55/cmake-3.x
sudo apt-get update
sudo apt-get install cmake3 cmake3-data

CMake指令

Enable对CUDA的支持,最终的cmake指令为

cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_INSTALL_PREFIX=/home/yaoyu/Libraries/OpenCV4/install \
-DINSTALL_PYTHON_EXAMPLES=ON \
-DINSTALL_C_EXAMPLES=OFF \
-DOPENCV_EXTRA_MODULES_PATH=/home/yaoyu/Libraries/OpenCV4/opencv_contrib/modules \
-DOPENCV_PYTHON3_VERSION=3.5 \
-DPYTHON3_EXECUTABLE=/home/yaoyu/p3cv4/bin/python \
-DPYTHON3_INCLUDE_DIR=/home/yaoyu/p3cv4/include/python3.5m \
-DPYTHON3_LIBRARY=/home/yaoyu/p3cv4/lib/python3.5/config-3.5m-x86_64-linux-gnu/libpython3.5m.so \
-DPYTHON3_NUMPY_INCLUDE_DIRS=/home/yaoyu/p3cv4/lib/python3.5/site-packages/numpy/core/include \
-DPYTHON3_PACKAGES_PATH=/home/yaoyu/p3cv4/lib/python3.5/site-packages \
-DBUILD_opencv_python3=ON -DBUILD_opencv_python2=OFF \
-DBUILD_EXAMPLES=ON \
-DWITH_CUDA=ON \
-DENABLE_FAST_MATH=1 \
-DCUDA_FAST_MATH=1 \
-DWITH_CUBLAS=1 \
-DOPENCV_ENABLE_NONFREE=ON \
-DWITH_TBB=ON ../opencv

After compilation and installation. the cv2.so does not show up in the site-packages directory of the virtual environment. The compiled library is located at
/home/yaoyu/Libraries/OpenCV4/build/lib/python3/cv2.cpython-35m-x86_64-linux-gnu.so
Manually copy this .so file to /home/yaoyu/p3cv4/lib/python3.5/site-packages as cv2.so

使用p3cv4的ipython进行测试
(p3cv4) yyhu@yyhuvb:~/p3cv4$ ipython
Python 3.4.3 (default, Nov 28 2017, 16:41:13)
Type ‘copyright’, ‘credits’ or ‘license’ for more information
IPython 6.5.0 – An enhanced Interactive Python. Type ‘?’ for help.

In [1]: import cv2

In [2]: cv2.version
Out[2]: ‘4.0.0-pre’

In [3]: cv2.file
Out[3]: ‘/home/yyhu/p3cv4/lib/python3.4/site-packages/cv2.so’

20190720更新

在Ubuntu18.04和CUDA10.1上进行了测试。CMake命令中发生变化的有
-DPYTHON3_LIBRARY=/usr/lib/python3.6/config-3.6m-x86_64-linux-gnu/libpython3.6m.so
-DEIGEN_INCLUDE_PATH=/usr/include/eigen3

20191016更新

在Ubuntu18.04LTS,CUDA10.1,cmake 3.15.3,g++7.4.0 上编译OpenCV 4.1.2遇到sfm module错误。make报错信息如下

/usr/bin/ld: /usr/local/lib/libgflags.a(gflags.cc.o): relocation R_X86_64_PC32 against symbol `stderr@@GLIBC_2.2.5’ can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status
modules/sfm/CMakeFiles/opencv_sfm.dir/build.make:247: recipe for target ‘lib/libopencv_sfm.so.4.1.2’ failed
make[2]: *** [lib/libopencv_sfm.so.4.1.2] Error 1
CMakeFiles/Makefile2:6611: recipe for target ‘modules/sfm/CMakeFiles/opencv_sfm.dir/all’ failed
make[1]: *** [modules/sfm/CMakeFiles/opencv_sfm.dir/all] Error 2

目前认为可能是sfm module本身有一些兼容性的问题。发生这个问题的前提是系统安装了sfm module的dependency,此时cmake会自动配置使能sfm的编译。最可能的情形是系统曾安装Ceres solver。Ceres solver的dependency包括glog和gflags,这些都是sfm的dependency。回避这个问题的方法是绕过sfm编译。实测使用cmake的 -DBUILD_LIST 能够回避sfm的编译,但是opencv_python3将会报错,找不到sfm相关的头文件。最后采用的方案是临时卸载sfm的dependency中的一个,例如gflags,编译OpenCV,然后再复原gflags。

References

https://www.life2coding.com/install-opencv-3-4-0-python-3-raspberry-pi-3/
https://dzone.com/articles/compile-opencv3-with-python35-conda-environment-on
https://github.com/opencv/opencv/issues/14868

发布了73 篇原创文章 · 获赞 24 · 访问量 13万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览