linux下OPENCV编译安装指定python接口
1,安装依赖库
#更新一下ubuntu下的包
sudo apt-get update
sudo apt-get upgrade
#移除之前x264
sudo apt-get remove x264 libx264-dev
#依赖库安装
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
sudo apt-get install build-essential libgtk2.0-dev libgtk-3-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev
sudo apt-get update
2,解压OPENCV-.zip和OPENCV_contr*.zip
unzip opencv***.zip
unzip opencv-co****.zip -d opencv**
cd opencv-4.6.0
mkdir build
cd build
3,CMake编译安装时的参数指定
-
首先进入你的conda环境里面
-
conda activate py38
-
找一下该虚拟环境里python的一些包的路径
-
python#进入python import sys sys.path ['', '/home/chen/miniconda3/envs/py38/lib/python38.zip', '/home/chen/miniconda3/envs/py38/lib/python3.8', '/home/chen/miniconda3/envs/py38/lib/python3.8/lib-dynload', '/home/chen/miniconda3/envs/py38/lib/python3.8/site-packages'] #记下以下路径 #python3.8包的安装路径: /home/chen/miniconda3/envs/py38/lib/python3.8/site-packages #python3.8的动态库路径(libpython3.8.so) sudo find / -name libpython3.8.so #找到这个动态库: /home/chen/miniconda3/pkgs/python-3.8.0-h0371630_2/lib/libpython3.8.so #python3.8的头文件 sudo find / -name Python.h /home/chen/miniconda3/pkgs/python-3.10.10-h7a1cb2a_2/include/python3.10/Python.h /home/chen/miniconda3/pkgs/python-3.8.0-h0371630_2/include/python3.8/Python.h /home/chen/miniconda3/envs/py38/include/python3.8/Python.h #是这个哦,要找你当前python环境的 /home/chen/miniconda3/include/python3.10/Python.h #numpy的include路径 #没有的话先安装一下 pip install numpy sudo find / -type d -name numpy /home/chen/miniconda3/envs/py38/lib/python3.8/site-packages/numpy /home/chen/miniconda3/envs/py38/lib/python3.8/site-packages/numpy/core/include/numpy#这个***********
-
整理一下得到以下路径
-
#python3.8包的安装路径: /home/chen/miniconda3/envs/py38/lib/python3.8/site-packages #python3.8的动态库路径(libpython3.8.so) /home/chen/miniconda3/pkgs/python-3.8.0-h0371630_2/lib/libpython3.8.so #python3.8的头文件 /home/chen/miniconda3/envs/py38/include/python3.8/Python.h #numpy的include路径 /home/chen/miniconda3/envs/py38/lib/python3.8/site-packages/numpy/core/include/numpy
-
改一下CMake编译时的参数
-
cmake -D CMAKE_BUILD_TYPE=RELEASE \ #编译类型 -D CMAKE_INSTALL_PREFIX=/usr/local \ #依赖库安装的根目录,这个是默认值 -D INSTALL_PYTHON_EXAMPLES=ON \ #python的example -D INSTALL_C_EXAMPLES=OFF \ -D WITH_TBB=ON \ -D WITH_V4L=ON \ -D WITH_QT=OFF \ -D WITH_OPENGL=ON \ -D PYTHON3_EXECUTABLE=$(which python3) \ #指定你想要安装cv2这个包的python编译器路径 -D BUILD_opencv_python3=ON \ #开启python3的cv2 -D PYTHON3_LIBRARY=/opt/conda/pkgs/python-3.8.5-h7579374_1/lib/libpython3.8.so \# python3.8的动态库的路径 -D PYTHON3_INCLUDE_DIR=/opt/conda/pkgs/python-3.8.5-h7579374_1/include/python3.8/Python.h \#python3.8的头文件 -D PYTHON3_NUMPY_INCLUDE_DIRS=/home/chen/miniconda3/envs/py38/lib/python3.8/site-packages/numpy/core/include/numpy \ #numpy的include路径 -D PYTHON3_PACKAGES_PATH=/opt/conda/lib/python3.8/site-packages/ #python3.8包的安装路径../
修改后得到
#在build目录下运行下面这段 cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D INSTALL_C_EXAMPLES=OFF \ -D WITH_TBB=ON \ -D WITH_V4L=ON \ -D WITH_QT=OFF \ -D WITH_OPENGL=ON \ -D PYTHON3_EXECUTABLE=$(which python3) \ -D BUILD_opencv_python3=ON \ -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.6.0/modules \ -D PYTHON3_LIBRARY=/home/chen/miniconda3/pkgs/python-3.8.0-h0371630_2/lib \ -D PYTHON3_INCLUDE_DIR=/home/chen/miniconda3/envs/py38/include/python3.8 \ -D PYTHON3_NUMPY_INCLUDE_DIRS=/home/chen/miniconda3/envs/py38/lib/python3.8/site-packages/numpy/core/include \ -D PYTHON3_PACKAGES_PATH=/home/chen/miniconda3/envs/py38/lib/python3.8/site-packages ../
预处理后得到如下说明安装python的cv2指定成功
Python 3: -- Interpreter: /home/chen/miniconda3/envs/py38/bin/python3 (ver 3.8) -- Libraries: /home/chen/miniconda3/pkgs/python-3.8.0-h0371630_2/lib/libpython3.8.so -- numpy: /home/chen/miniconda3/envs/py38/lib/python3.8/site-packages/numpy/core/include/numpy (ver 1.24.3) -- install path: /home/chen/miniconda3/envs/py38/lib/python3.8/site-packages/cv2/python-3.8 -- -- Python (for build): /home/chen/miniconda3/envs/py38/bin/python3
编译OPENCV与python链接
make -j8 #j*指定编译使用的线程数,根据自己的处理器指定,一般8就行了,多了任意报错 #这是个漫长的等待过程
转为汇编可执行文件链接动态库
sudo make install #也是一个漫长的过程
检验是否安装成功
#进入python python import cv2 #回车没报错就说明编译链接成功
问题总结:
1、下载不了IPPICV
# 1,cd到~/Desktop/opencv/opencv-4.6.0/3rdparty/ippicv$下面来
#修改它的.cmake配置文件的下载方式
# 将47行的
"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}ippicv/"
# 改为步骤1中手动下载的文件的本地路径(也就是将网络下载的模式改为本地文件下载的模式):
"file:///home/chen/Desktop/opencv/opencv-4.6.0/3rdparty/ippicv/" #(仅供参考,根据自己的路径填写)
#还要将下面设定的文件名,把你下载的ippvic文件名改成和他一样
#ippicv_2020_lnx_intel64_20191018_general.tgz
function(download_ippicv root_var)
set(${root_var} "" PARENT_SCOPE)
# Commit SHA in the opencv_3rdparty repo
set(IPPICV_COMMIT "a56b6ac6f030c312b2dce17430eef13aed9af274")
# Define actual ICV versions
if(APPLE)
set(OPENCV_ICV_PLATFORM "macosx")
set(OPENCV_ICV_PACKAGE_SUBDIR "ippicv_mac")
set(OPENCV_ICV_NAME "ippicv_2020_mac_intel64_20191018_general.tgz")
set(OPENCV_ICV_HASH "1c3d675c2a2395d094d523024896e01b")
elseif((UNIX AND NOT ANDROID) OR (UNIX AND ANDROID_ABI MATCHES "x86"))
set(OPENCV_ICV_PLATFORM "linux")
set(OPENCV_ICV_PACKAGE_SUBDIR "ippicv_lnx")
if(X86_64)
set(OPENCV_ICV_NAME "ippicv_2020_lnx_intel64_20191018_general.tgz")
set(OPENCV_ICV_HASH "7421de0095c7a39162ae13a6098782f9")
else()
set(OPENCV_ICV_NAME "ippicv_2020_lnx_ia32_20191018_general.tgz")
set(OPENCV_ICV_HASH "ad189a940fb60eb71f291321322fe3e8")
endif()
elseif(WIN32 AND NOT ARM)
set(OPENCV_ICV_PLATFORM "windows")
set(OPENCV_ICV_PACKAGE_SUBDIR "ippicv_win")
if(X86_64)
set(OPENCV_ICV_NAME "ippicv_2020_win_intel64_20191018_general.zip")
set(OPENCV_ICV_HASH "879741a7946b814455eee6c6ffde2984")
else()
set(OPENCV_ICV_NAME "ippicv_2020_win_ia32_20191018_general.zip")
set(OPENCV_ICV_HASH "cd39bdf0c2e1cac9a61101dad7a2413e")
endif()
else()
return()
endif()
set(THE_ROOT "${OpenCV_BINARY_DIR}/3rdparty/ippicv")
ocv_download(FILENAME ${OPENCV_ICV_NAME}
HASH ${OPENCV_ICV_HASH}
URL
"${OPENCV_IPPICV_URL}"
"$ENV{OPENCV_IPPICV_URL}"
"file:///home/chen/Desktop/opencv/opencv-4.6.0/3rdparty/ippicv/"
DESTINATION_DIR "${THE_ROOT}"
ID IPPICV
STATUS res
UNPACK RELATIVE_URL)
if(res)
set(${root_var} "${THE_ROOT}/${OPENCV_ICV_PACKAGE_SUBDIR}" PARENT_SCOPE)
endif()
endfunction()
C++版本
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D WITH_TBB=ON \
-D WITH_V4L=ON \
-D WITH_QT=ON \
-D WITH_OPENGL=ON \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
-D BUILD_EXAMPLES=ON ..
配置路径,执行下面命令配置环境变量,注意如果你当前使用的是fish shell,或者别的shell,请退出到bash,不然配置会出问题。
sudo vim /etc/ld.so.conf.d/opencv.conf
这个时候你可能打开文件可能是空白的,没有关系,在文件末尾添加保存并退出
/usr/local/lib
执行生效命令:
sudo ldconfig
继续打开:
sudo vim /etc/bash.bashrc
在文件末尾添加写入:
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
保存退出。
执行更新命令:
source /etc/bash.bashrc
sudo updatedb
**
- 总结:
在yolo等深度学习模型1的时候,建议都用编译安装依赖,很多时候pip会疯狂报错!**