本文没有一步一步教你如何安装,具体步骤可从参照中获得
已装软件
cuda7.5
prubuf (libprotoc) 3.0.0(自己从github上下载安装)
boost_1_59_0
参照
1.http://blog.csdn.net/hwl56789/article/details/46927395
2.http://blog.csdn.net/tingyue_/article/details/4561974(主要)
注意点
- opencv_默认不支持Cuda必须自己重新编译,opecv默认安装运行cuda会出现一下错误
会出现
Opencv Error: no GPU support (library is compiled without CUDA support)
- opencv_支持cuda编译流程
下载好opencv-2.4.12.zip 解压为opencv-2.4.12 网上说更高的版本也可以
再说一次注意opencv版本
用2.4.9大约会在65%时报错
- 编译opencv命令如下:
cd opencv-2.4.12
mkdir release
cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D CUDA_ARCH_BIN="x.x" ..
make
make install
x.x根据/usr/local/cuda-7.5/samples/bin/x86_64/linux/release/deviceQuery 所执行的结果填写
CUDA Device Query (Runtime API) version (CUDART static linking)
Detected 1 CUDA Capable device(s)
Device 0: "GeForce GT 650M"
CUDA Driver Version / Runtime Version 8.0 / 7.5
CUDA Capability Major/Minor version number: 3.0
...
...
...
CUDA Capability Major/Minor version number: 3.0就填3.0
测试了objects_detection
- 按readme执行命令如下,配好会出现一段视屏展示行人检测
cd rodrigob-doppia/src/objects_detection
cmake . && make -j2 && OMP_NUM_THREADS=4 ./objects_detection -c cvpr2012_very_fast_over_bahnhof.config.ini --gui.disable false
- 问题1
/usr/local/include/boost/variant/get.hpp:178:5: error: invalid application of
‘sizeof’ to incomplete type ‘boost::STATIC_ASSERTION_FAILURE<false>’
解决方法:
将common_settings.cmake中的
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall ")
改成
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -DBOOST_VARIANT_USE_RELAXED_GET_BY_DEFAULT=1")
参考[https://bitbucket.org/rodrigob/doppia/issues/84/the-problem-while-compiling]
- 问题2
rodrigob-doppia/src/applications/objects_detection/../../../libs/cudatemplates/include
/cudatemplates/error.hpp:44:26: fatal error: cuda_runtime.h: 没有那个文件或目录
解决方法:
把common_settings.cmake,MakeLists.txt(具体哪个记不清了)文件中的cuda目录改成自己安装cuda的目录
- 问题3
在DataSequence.hpp报参数ReadLittleEndian64 的uint64_t参数不匹配错误,感觉是protobuf版本的问题
解决方法:
打开DataSequence.hpp
- boost::uint64_t size;
+ google::protobuf::uint64 size;
-问题4
src/objects_detection/SoftCascadeOverIntegralChannelsFastFractionalStage.cpp:24:9:
error: ‘swap’ is not a member of ‘std’ std::swap(weak_classifier.level2_true_node,
weak_classifier.level2_false_node);
解决方法:
在出错文件中加入#include<iostream>