zoukankan      html  css  js  c++  java
  • Ubuntu安装opencv 为调用gpu模块

    也真够折腾的。

    事件背景:为了一个光流的提取处理,本来是3.1的opencv在include一些模块上出错,原因是opencv3.0以上的版本对模块进行了再分离,要contribute,但是contribute后还是解决不了,所以,选了2.4.11(因为之前在Windows下用过,知道哪些函数能调用).

    这时在make的时候出现了类似nvcc warning : 的问题,然后就按照(http://blog.csdn.net/wang4959520/article/details/51392804)或者在cmake时加上参数-D BUILD_opencv_gpu=OFF,以为能成功了,可是又有 error: ‘NppiGraphcutState’ 类似的错误,这时,找到http://blog.csdn.net/caozhantao/article/details/51479172这篇博客,按它的说法,卸载2.4.11,改用2.4.13,在cmake的时候,用了

    cmake -D CMAKE_BUILD_TYPE=RELEASE -D BUILD_opencv_gpu=OFF -D CMAKE_INSTALL_PREFIX=/usr/local ..

    这下,都圆满编译通过了,而且nonfree等头文件也能include成功了。

    但是在调用gpu头文件的时候又报错说没有#include <opencv2/gpu/gpu.hpp>,好吧,只能又重新编译,又按照http://www.cnblogs.com/CarryPotMan/p/5377921.html这个博客重新对2.3.13编译一遍,还是没解决。

    最后想到可能是cuda不支持,就决定卸掉2.4.12,用2.4.12,还是按这个博客,编译,还是不行,好吧,结合了http://blog.csdn.net/xuezhisdc/article/details/48691797和http://blog.csdn.net/allyli0022/article/details/62859290来,用了:

    CMAKE_INSTALL_PREFIX=/usr/local -D WITH_CUDA=ON -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D CUDA_GENERATION=Fermi .. 

    并且将graphcuts.cpp中

    将 #if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)

    改为

    #if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION >= 8000)

    最后就解决了gpu模块调用的问题。

    -----------------------------------------17年5月4号-------------------------------------------------

    后来,又一次编译,为了解决:

    OpenCV Error: Gpu API call (invalid device function) in call_resize_linear_glob, file /home/dog/opencv-2.4.12/modules/gpu/src/cuda/resize.cu, line 233
    terminate called after throwing an instance of 'cv::Exception'
    what(): /home/dog/opencv-2.4.12/modules/gpu/src/cuda/resize.cu:233: error: (-217) invalid device function in function call_resize_linear_glob

    Aborted (core dumped)

    根据:https://github.com/opencv/opencv/issues/6580 和 https://github.com/opencv/opencv/issues/6577 最终确定用了:

    cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -DCUDA_CUDA_LIBRARY=/usr/local/cuda/lib64/stubs/libcuda.so -D CUDA_ARCH_BIN=5.2 -D CUDA_ARCH_PTX="" -D WITH_CUDA=ON -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D WITH_NVCUVID:BOOL="1" .

    这里的5 2是这样确定的:

    根据:http://www.centoscn.com/CentOS/help/2015/0307/4816.html 用命令:

    # nvidia-smi

    得到我的GPU是:Tesla M40  

    然后在:https://developer.nvidia.com/cuda-gpus  中查找,发现:

    Tesla Data Center Products

    GPUCompute Capability
    Tesla P100 6.0
    Tesla P40 6.1
    Tesla P4 6.1
    Tesla M60 5.2
    Tesla M40 5.2
    Tesla K80 3.7
    Tesla K40 3.5
    Tesla K20 3.5
    Tesla K10 3.0

    然后,就成功啦。

    opencv最后还要:make -j8 和 sudo make install 不要忘了啊!

  • 相关阅读:
    题解 CF702F 【T-Shirts】
    题解 CF914G 【Sum the Fibonacci】
    CF258D 【Little Elephant and Broken Sorting】
    socket 私有服务端验证方法
    Gateway + Oauth2 + Security认证与授权 [更新中]
    串并转换和并串转换
    序列检测机【转】
    浮点数的定点化
    Verilog实现同步FIFO和异步FIFO
    频率检测计
  • 原文地址:https://www.cnblogs.com/beihaidao/p/6773595.html
Copyright © 2011-2022 走看看