ubuntu20.04手动编译opencv 4.9.0遇到的问题汇总
编译流程
以4.9.0版本为例,可参考:
- https://docs.opencv.org/4.9.0/d2/de6/tutorial_py_setup_in_ubuntu.html
- https://linuxize.com/post/how-to-install-opencv-on-ubuntu-20-04/
- https://blog.youkuaiyun.com/weixin_44003563/article/details/90404745
- https://www.mintimate.cn/2021/11/07/installOpenCV/#%E5%AF%BC%E5%85%A5Python
- https://blog.youkuaiyun.com/qq_25005909/article/details/78554469(主要参考)
- opencv联合编译ffmpeg_opencv ffmpeg编译-优快云博客
分享下我的命令:
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git
cd opencv
mkdir build
cd build
sudo cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/opencv -D CUDA_GENERATION=Auto OPENCV_EXTRA_MODULES_PATH=/home/user/yuanjinmin/opencv_contrib/modules/ -D BUILD_opencv_python3=ON -D PYTHON_DEFAULT_EXECUTABLE=/home/user/anaconda3/envs/yjm_slowfast/bin/python3.9 -D PYTHON3_LIBRARIES=/home/user/anaconda3/lib/libpython3.9.so -D PYTHON3_NUMPY_INCLUDE_DIRS=/home/user/anaconda3/envs/yjm_slowfast/lib/python3.9/site-packages/numpy/core/include -D PYTHON3_EXECUTABLE=/home/user/anaconda3/envs/yjm_slowfast/bin/python3.9 -D WITH_FFMPEG=ON ..
sudo make -j8 # 结合自己服务器线程
sudo make install
sudo ldconfig
export PYTHONPATH="$PYTHONPATH:/usr/local/opencv/lib/python3.9/site-packages" # 好像可以手动将其中的cv2复制到对应虚拟环境中的`site-packages`文件夹,也可以使用
python3 -c "import cv2; print(cv2.__version__)"
编译加速
https://blog.youkuaiyun.com/tfb760/article/details/104030841
ippicv_2021.10.0_lnx_intel64_20230919_general.tgz下载慢
可参考:https://blog.youkuaiyun.com/orDream/article/details/84311697
face_landmark_model.dat下载
可参考:https://blog.youkuaiyun.com/pzb19841116/article/details/115519158#comments_32285782
ubuntu20.04下编译opencv4.9.0时报错
/usr/bin/ld: /lib/x86_64-linux-gnu/libwayland-client.so.0: undefined reference to ffi_type_uint32@LIBFFI_BASE_7.0' /usr/bin/ld: /lib/x86_64-linux-gnu/libwayland-client.so.0: undefined reference to
ffi_type_sint32@LIBFFI_BASE_7.0’
/usr/bin/ld: /lib/x86_64-linux-gnu/libwayland-client.so.0: undefined reference to ffi_type_pointer@LIBFFI_BASE_7.0' /usr/bin/ld: /lib/x86_64-linux-gnu/libwayland-client.so.0: undefined reference to
ffi_type_void@LIBFFI_BASE_7.0’
/usr/bin/ld: /lib/x86_64-linux-gnu/libwayland-client.so.0: undefined reference to ffi_prep_cif@LIBFFI_BASE_7.0' /usr/bin/ld: /lib/x86_64-linux-gnu/libwayland-client.so.0: undefined reference to
ffi_call@LIBFFI_BASE_7.0’
可参考:https://blog.youkuaiyun.com/special00/article/details/135100639
2.
Cannot generate a safe runtime search path for target opencv_imgcodecs
because files in some directories may conflict with libraries in implicit
参考:https://blog.youkuaiyun.com/cunyizhang/article/details/124968204
ImportError:libgobject-2.0.so.0: undefined symbol: ffi_type_uint32, version
使用export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libffi.so.7
之后在此窗口运行python项目可以解决(每个新命令行中都要设置,除非放入.bashrc
中,或在IDE中配置路径)
The imported target “openjp2_static” references the file “/usr/lib/x86_64-linux-gnu/libopenjp2.a” but this file does not exist. Possible reasons include: …
报类似于https://github.com/opencv/opencv/issues/18090这样的错误,不用管
fatal error: numpy/ndarrayobject.h: No such file or directory · Issue #11709 · opencv/opencv (github.com)
pip install numpy
忘记装numpy了
ffmpeg支持
- 使用ffmpeg -version查看是否安装ffmpeg;
- 在编译opencv时加入
-D WITH_FFMPEG=ON
的cmake参数 - 执行cmake命令后可以查看,也可以安装pip库后查看
VideoCapture can’t open RTSP stream [FIXED] - Python - OpenCV
gstreamer支持
sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
- 正确示范
- 错误示范
Todo(未验证)
gpu加速
命令
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git
cd opencv
mkdir build
cd build
sudo cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local/opencv \
-D CUDA_GENERATION=Auto \
-D OPENCV_EXTRA_MODULES_PATH=/home/user/yuanjinmin/opencv_contrib/modules/ \
-D BUILD_opencv_python3=ON \
-D PYTHON_DEFAULT_EXECUTABLE=/home/user/anaconda3/envs/yjm_CAIP/bin/python3.9 \
-D PYTHON3_LIBRARIES=/home/user/anaconda3/lib/libpython3.9.so \
-D PYTHON3_NUMPY_INCLUDE_DIRS=/home/user/anaconda3/envs/yjm_CAIP/lib/python3.9/site-packages/numpy/core/include \
-D HAVE_opencv_python3=ON \
-D PYTHON3_EXECUTABLE=/home/user/anaconda3/envs/yjm_CAIP/bin/python3.9 \
-D INSTALL_C_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_ENABLE_NONFREE=ON \
-D WITH_CUDA=ON \
-D WITH_CUDNN=ON \
-D OPENCV_DNN_CUDA=ON \
-D ENABLE_FAST_MATH=1 \
-D CUDA_FAST_MATH=1 \
-D CUDA_ARCH_BIN=8.6 \
-D WITH_CUBLAS=1 \
-D BUILD_EXAMPLES=ON \
-D BUILD_opencv_world=ON \
-D BUILD_CUDA_STUBS=ON \
-D WITH_FFMPEG=ON ..
sudo make -j8 # 结合自己服务器线程
sudo make install
sudo ldconfig
export PYTHONPATH="$PYTHONPATH:/usr/local/opencv/lib/python3.9/site-packages" # 好像可以手动将其中的cv2复制到对应虚拟环境中的`site-packages`文件夹,也可以使用
python3 -c "import cv2; print(cv2.getBuildInformation())"
说明
opencv 4.9.0
好像不支持cuDNN 9.0
以上的版本:Built target opencv_cudafilters make error · Issue #25929 · opencv/opencv。但我好像用opencv 4.11.0
还是会报错:CUDA backend requires cuDNN.
。