【问题标题】:How to build OpenCV for both python versions 2 and 3?如何为 python 版本 2 和 3 构建 OpenCV?
【发布时间】:2017-08-15 13:47:46
【问题描述】:

OpenCV linux install docBuilding OpenCV from Source Using CMake 部分据说运行类似命令

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

同时还有给python的参数:

[optional] Building python. Set the following python parameters:
PYTHON2(3)_EXECUTABLE = <path to python>
PYTHON_INCLUDE_DIR = /usr/include/python<version>
PYTHON_INCLUDE_DIR2 = /usr/include/x86_64-linux-gnu/python<version>
PYTHON_LIBRARY = /usr/lib/x86_64-linux-gnu/libpython<version>.so
PYTHON2(3)_NUMPY_INCLUDE_DIRS = /usr/lib/python<version>/dist-packages/numpy/core/include/

其中一些参数可以很容易地为两个版本的 Python 设置:

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D PYTHON2_EXECUTABLE=/usr/bin/python -D PYTHON3_EXECUTABLE=/usr/bin/python3  ..

但另一个是模棱两可的

PYTHON_INCLUDE_DIR = /usr/include/python<version>

是否可以同时为两个版本的 Python 构建?

【问题讨论】:

  • 您可能想看看底部附近的cmake/OpenCVDetectPython.cmake...。这些变量有两套完整的集,一套以PYTHON2 为前缀,另一套以PYTHON3 为前缀。 (例如,我在那里看到了 PYTHON2_INCLUDE_DIRPYTHON3_INCLUDE_DIR)。
  • @DanMašek 它在哪里,没看到?
  • 这是什么?我有 Python 3.5

标签: python linux opencv build cmake


【解决方案1】:

我会推荐这个guide 作为安装参考。

但总的来说,您所要做的就是安装两个版本的 python,然后运行安装脚本。无需手动指定python路径,cmake会找到。

附上最近 OpenCV 安装输出的截图:

【讨论】:

    【解决方案2】:

    截至 2018 年 12 月,我能够在我的 Ubuntu16.04 机器上用 CUDA、FFMpeg 和 TIFF 编译最新的 OpenCV 版本(对 Caffe 也很有用),并在 Python2.7 和 3.5 中运行它。该构建在 this post 中受到了极大的启发,因此向他们致敬!

    克隆最新的 repos:

    请注意,两者必须在同一个版本中,否则 cmake 会报错。确保同时克隆两者:

    git clone https://github.com/opencv/opencv.git
    git clone https://github.com/opencv/opencv_contrib.git
    

    配置和构建:

    首先,创建标准的构建环境:

    cd opencv
    mkdir build
    cd build
    

    然后,以下 cmake 命令对我有用:

    cmake -D CMAKE_BUILD_TYPE=RELEASE \
                 -D CMAKE_INSTALL_PREFIX=/usr/local \
                 -D INSTALL_C_EXAMPLES=ON \
                 -D OPENCV_EXTRA_MODULES_PATH=<LOCATION_OF_YOUR_OPENCV_CONTRIB>/modules \
                 -D BUILD_EXAMPLES=ON \
                 -D BUILD_opencv_python2=ON \
                 -D WITH_FFMPEG=1 \
                 -D WITH_TIFF=ON \
                 -D WITH_CUDA=ON \
                 -D CUDA_GENERATION=Pascal \
                 -D ENABLE_FAST_MATH=1 \
                 -D CUDA_FAST_MATH=1 \
                 -D WITH_CUBLAS=1 \
                 -D WITH_LAPACK=OFF \
                 -D PYTHON2_EXECUTABLE=/usr/bin/python \
                 -D PYTHON2_INCLUDE_DIR=/usr/include/python2.7 \
                 -D PYTHON2_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython2.7.so \
                 -D PYTHON2_NUMPY_INCLUDE_DIRS=/usr/local/lib/python2.7/dist-packages/numpy/core/include \
                 -D PYTHON3_EXECUTABLE=/usr/bin/python3 \
                 -D PYTHON3_INCLUDE_DIR=/usr/include/python3.5 \
                 -D PYTHON3_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.5m.so \
                 -D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/local/lib/python3.5/dist-packages/numpy/core/include \
                 -D INSTALL_PYTHON_EXAMPLES=ON ..
    

    请注意,您必须设置 &lt;LOCATION_OF_YOUR_OPENCV_CONTRIB&gt;(您克隆它的位置),并且您可能需要调整您的 PYTHON2PYTHON3flags 以适应系统的配置。

    我收到了一些警告(不确定这有多糟糕),但它通过了:一段时间后你应该会看到类似的东西

    --   Install to:                    /usr/local
    -- -----------------------------------------------------------------
    -- 
    -- Configuring done
    

    制作和安装

    同样,标准make -j&lt;NUM_CORES&gt; &amp;&amp; sudo make install 在这里有效。确保将 -j 调整为您的 CPU 内核数以加快编译过程。之后,python命令

    import cv2
    

    在 Python 2 和 3 中都工作过。希望这会有所帮助!
    安德烈斯

    【讨论】:

      【解决方案3】:

      不,Python 2 和 Python 3 对二进制模块(从 C 编译)的绑定是不同的。不能在 Python 2 和 Python 3 中使用相同的构建库。

      但您可以运行 Python 2 的构建指令,然后使用不同的 CMAKE_INSTALL_PREFIX 值运行 Python 3。

      【讨论】:

      • @Dims,是的,但似乎没有其他解决方案。从 C 编译的 Python 模块不能同时用于 Python 2 和 Python 3。
      • 不是只有两组python模块,其他代码共享吗?
      • @Dims "Yes" 但这会在源包中涉及很多容易出错的自定义更改(自己做)。就个人而言,我宁愿在便宜的硬盘驱动器中损失一些 Mb,也不愿因收入不确定而失去工作天数。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-04
      • 1970-01-01
      • 1970-01-01
      • 2018-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多