如何确定 OpenCV 库是否在 Windows 7 机器上使用 TBB 或 CUDA 或 QT 编译?我应该使用依赖walker,如果是,如何使用?或者有其他方法可以查到吗?
问问题
13424 次
5 回答
8
您可以通过在 cmdline 中打开 python3 REPL 来了解它:
python3
然后导入opencv:
import cv2
然后打印构建信息:
print(cv2.getBuildInformation())
并查找 CUDA 和相关的 GPU 信息。
于 2019-12-18T14:13:44.597 回答
2
跟进 dpetrini 的回答,您可以添加任何支持以在其中进行正则表达式搜索以完善输出,而不是在构建信息输出中搜索它。
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)']
于 2020-05-09T14:42:33.823 回答
1
如果 OpenCV 使用 CUDA 功能编译,它将为 getCudaEnabledDeviceCount 函数返回非零值(确保已安装 CUDA)。另一种非常简单的方法是尝试在 OpenCV 中使用 GPU 函数并使用 try-catch。如果抛出异常,则说明您尚未使用 CUDA 编译它。
于 2013-06-30T18:30:45.937 回答
0
对于 CUDA 支持,您可以检查 gpu 模块大小。如果 OpenCV 在没有 CUDA 支持的情况下编译,opencv_gpu.dll 的大小会很小(< 1 MB),它将是一个虚拟包。使用 CUDA 支持构建的 gpu 模块的实际大小约为 70 MB,用于一种计算能力。
于 2013-06-28T07:25:17.237 回答
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;
}
}
}
于 2018-03-24T18:09:53.570 回答