Skip to content

Instantly share code, notes, and snippets.

@meisa233
Last active April 18, 2024 02:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save meisa233/83014ea27917e36fdb673d7a2a5185b1 to your computer and use it in GitHub Desktop.
Save meisa233/83014ea27917e36fdb673d7a2a5185b1 to your computer and use it in GitHub Desktop.

如何编译支持ffmpeg和自编译的python的OpenCV

从源编译Python3

1.更新apt

建议换成国内源

sudo apt update
sudo apt upgrade

安装依赖

sudo apt-get install zlib1g-dev libbz2-dev libssl-dev libncurses5-dev libsqlite3-dev libreadline-dev tk-dev libgdbm-dev libdb-dev libpcap-dev xz-utils libexpat1-dev liblzma-dev libffi-dev libc6-dev

2.解压与安装

tar zxvf Python-3.7.9.tgz #解压
cd Python-3.7.9
sudo mkdir -p /usr/local/python3.7 #建立安装目录

#后面加上 --enable-optimizations 会自动安装pip3及优化配置
#--enable-shared 用于生成libpython库
./configure --prefix=/usr/local/python3.7  --enable-optimizations --enable-shared
make -j8 # -j8会加速,但测试可能会很慢推荐下面这个
make -C ~/Python-3.7.9(Python安装包解压后的根目录) -j8 build_all
sudo make install

3.新建软连接

注意最后一个参数不要与系统本身存在的软连接名字相同!
#添加python3的软链接
sudo ln -s /usr/local/python3.7/bin/python3.7 /usr/bin/python3.7
#添加 pip3 的软链接
sudo ln -s /usr/local/python3.7/bin/pip3.7 /usr/bin/pip3.7
#如果直接运行python3.7可能会出现bug
#python3.7: error while loading shared libraries: libpython3.7m.so.1.0: cannot open shared object file: No such file or directory
#那么请完成以下操作
cp /usr/local/python3.7/lib/libpython3.7m.so.1.0 /usr/lib/

4.检测版本

python3.7 -V
pip3.7 -V

编译OpenCV

参考:https://www.jianshu.com/p/8fd19e45e01b

1.安装依赖

sudo apt update
sudo apt install build-essential cmake pkg-config
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev
sudo apt-get install libatlas-base-dev gfortran
sudo apt-get install libjpeg8-dev libtiff5-dev libjasper-dev libpng12-dev
sudo apt-get install libgtk-3-dev
sudo apt-get install libatlas-base-dev gfortran

2.编译

参考:https://stackoverflow.com/questions/42638342/cannot-install-opencv-3-1-0-with-python3-cmake-not-including-or-linking-python

cd OpenCV所在目录
mkdir build
cd build

然后是cmake的配置命令

cmake -D CMAKE_BUILD_TYPE=Release \
-D BUILD_NEW_PYTHON_SUPPORT=ON \
-D BUILD_opencv_python3=ON \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_FFMPEG=ON \
-D PYTHON_DEFAULT_EXECUTABLE="/usr/local/python3.7/bin/python3.7" \ 
-D PYTHON3_EXECUTABLE=$(which python3.7) \
-D PYTHON3_INCLUDE_DIR=$(python3.7 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \
-D PYTHON3_INCLUDE_DIR2=$(python3.7 -c "from os.path import dirname; from distutils.sysconfig import get_config_h_filename; print(dirname(get_config_h_filename()))") \
-D PYTHON3_LIBRARY=/usr/local/python3.7/lib/python3.7/config-3.7m-x86_64-linux-gnu/libpython3.7m.a \
-D PYTHON3_NUMPY_INCLUDE_DIRS=$(python3.7 -c "import numpy; print(numpy.get_include())") \
-D PYTHON3_PACKAGES_PATH=$(python3.7 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") ..

上述命令需要在build文件夹中运行。
注意上述命令中,需在建立了python3.7的软连接之后进行。
PYTHON3_LIBRARY后面的目录需是python3.7的安装目录。
如果出问题请直接删除build文件夹然后重新建build文件夹。

make -j8 #多线程编译 加速
sudo make install
sudo ldconfig

cmake -D CMAKE_BUILD_TYPE=Release -D WITH_CUBLAS=0 -D WITH_CUDA=OFF -D BUILD_opencv_python3=ON -D BUILD_opencv_python2=OFF -D PYTHON_VERSION=309 -D PYTHON_DEFAULT_EXECUTABLE=/home/nvidia/Practical-RIFE-new-main/venv/bin/python -D PYTHON3_PACKAGES_PATH=/home/nvidia/Practical-RIFE-new-main/venv/lib/python3.9/site-packages -D PYTHON3_INCLUDE_DIR=$(python -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") -D PYTHON3_INCLUDE_DIR2=$(python -c "from os.path import dirname; from distutils.sysconfig import get_config_h_filename; print(dirname(get_config_h_filename()))") -D PYTHON3_LIBRARY=/usr/lib/libpython3.9.so.1.0 -D PYTHON3_NUMPY_INCLUDE_DIRS=$(python -c "import numpy; print(numpy.get_include())") -D BUILD_EXAMPLES=OFF -D INSTALL_PYTHON_EXAMPLES=OFF -D INSTALL_C_EXMAPLES=OFF -D WITH_LIBV4L=OFF -D OPENCV_EXTRA_MODULES_PATH=/home/nvidia/Practical-RIFE-new-main/opencv-4.9.0/opencv_contrib-4.9.0/modules/ -D WITH_OPENGL=OFF ..
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment