如何判断OpenCV库是否在Windows 7计算机上使用TBB或CUDA或QT编译?我应该使用依赖性walker,如果是,那怎么办?还是有另一种方法可以找到答案吗?
答案 0 :(得分:1)
跟随dpetrini的回答,您可以在其中添加任何想要进行正则表达式搜索的支持,以漂亮地显示输出,而不是在build-info输出中进行搜索。
import cv2
import re
cv_info = [re.sub('\s+', ' ', ci.strip()) for ci in cv2.getBuildInformation().strip().split('\n')
if len(ci) > 0 and re.search(r'(nvidia*:?)|(cuda*:)|(cudnn*:)', ci.lower()) is not None]
print(cv_info)
['NVIDIA CUDA: YES (ver 10.0, CUFFT CUBLAS FAST_MATH)', 'NVIDIA GPU arch: 75', 'NVIDIA PTX archs:', 'cuDNN: YES (ver 7.6.5)']
答案 1 :(得分:0)
对于CUDA支持,您可以检查gpu模块大小。如果在没有CUDA支持的情况下编译OpenCV,opencv_gpu.dll将具有小尺寸(<1 MB),它将是一个虚拟包。对于一种计算能力,使用CUDA支持构建的gpu模块的实际大小约为70 MB。
答案 2 :(得分:0)
如果使用CUDA功能编译OpenCV,则它将为getCudaEnabledDeviceCount函数返回非零值(确保已安装CUDA)。另一种非常简单的方法是尝试在OpenCV中使用GPU功能并使用try-catch。如果抛出异常,则表示尚未使用CUDA编译它。
答案 3 :(得分:0)
bool _cudaSupported = false;
...
// Obtain information from the OpenCV compilation
// Here is a lot of information.
const cv::String str = cv::getBuildInformation();
// Parse looking for "Use Cuda" or the option you are looking for.
std::istringstream strStream(str);
std::string line;
while (std::getline(strStream, line))
{
// Enable this to see all the options. (Remember to remove the break)
//std::cout << line << std::endl;
if(line.find("Use Cuda") != std::string::npos)
{
// Trim from elft.
line.erase(line.begin(), std::find_if(line.begin(), line.end(),
std::not1(std::ptr_fun<int, int>(std::isspace))));
// Trim from right.
line.erase(line.begin(), std::find_if(line.begin(), line.end(),
std::not1(std::ptr_fun<int, int>(std::isspace))));
// Convert to lowercase may not be necessary.
std::transform(line.begin(), line.end(), line.begin(), ::tolower);
if (line.find("yes") != std::string::npos)
{
std::cout << "USE CUDA = YES" << std::endl;
_cudaSupported = true;
break;
}
}
}
答案 4 :(得分:0)
您可以通过在cmdline中打开python3 REPL来了解它:
python3
然后导入opencv:
import cv2
然后打印构建信息:
print(cv2.getBuildInformation())
并查找CUDA和相关的GPU信息。