OpenCV 错误:初始化 OpenCLDevices 中的 GPU API 调用 (-1001)

OpenCV Error: Gpu API call (-1001) in initializeOpenCLDevices

本文关键字:调用 API -1001 GPU 中的 错误 初始化 OpenCLDevices OpenCV      更新时间:2023-10-16

几周前,我在Ubuntu 14.04 LTS下使用Opencv 2.4.9和OpenCL的C++构建了一个计算机视觉程序。它运行良好,然后上周我尝试使用新发布的 OpenCV 3.0 更新一些功能,但由于某些 API 已更改而失败,所以我卸载了 Opencv 3.0 并重新安装了 Opencv 2.4.9。从那时起,每当调用来自Opencv的ocl模块的函数时,都会出现一个错误,显示"OpenCV错误:初始化OpenCLDevices中的Gpu API调用(-1001)"。

显示的整个错误是:

OpenCV 错误:初始化中的 GPU API 调用 (-1001),文件/home/mmcom/opencv-2.4.9/modules/ocl/src/cl_context.cpp,第 455 行OpenCV 错误:未知错误代码 -221(OpenCL 不可用),在 getContext,文件/home/mmcom/opencv-2.4.9/modules/ocl/src/cl_context.cpp,第 677 行在抛出"cv::异常"实例后终止调用 what():/home/mmcom/opencv-2.4.9/modules/ocl/src/cl_context.cpp:677: 错误: (-221) OpenCL 在函数 getContext 中不可用

然后我重新安装了整个 Ubuntu 14.04 操作系统和驱动程序,发生了同样的错误。

下面列出了重新安装 Ubuntu 14.04 操作系统后我所做的所有事情:

  1. 安装时移(首次备份)
  2. 安装新立得(第二次备份)
  3. 按照以下指南安装 OpenCV 2.4.9:http://www.samontab.com/web/2014/06/installing-opencv-2-4-9-in-ubuntu-14-04-lts/
  4. 对于 OpenCL,由于我使用的是 nVidia GPU,因此我使用以下命令安装了 OpenCL:
    sudo apt-get install nvidia-opencl-dev

我使用的计算机是戴尔精密M6800移动工作站,配备英特尔酷睿i7博锐和nVIDIA四重K4100M GPU。

更多信息和顾虑:

1.我认为核心问题是OpenCV的ocl模块由于某种原因无法识别nVIDIA GPU。但我不确定这是 ocl 模块的问题还是 nVIDIA GPU 及其驱动程序的问题。有没有简单的方法可以分辨?

1.My 项目包含使用OpenCV的ocl加速模块和我自己的OpenCL函数的函数。如前所述,它们已被证明可以在实验室中使用AMD GPU在桌面上成功运行,上周它们也在当前的移动工作站上成功运行。

2.在我尝试使用新发布的OpenCV 3优化代码之前,发生了来自Ubuntu软件更新程序的错误,该错误是关于nvidia 331更新问题,该问题已被多次报告为错误。由于我忽略了该错误并直接安装了OpenCV 3,因此我无法判断之前指示的OpenCV错误是由安装OpenCV 3还是nvidia 331更新问题引起的。是由驱动程序冲突引起的还是其他原因?在项目运行良好之前,我不记得驱动程序的版本是 331 还是 340 或其他什么。

3.我使用 CmakeList 来构建项目,通过键入 cmake . 命令,它清楚地写着 Found OpenCL:/usr/lib/x86_64-linux-gnu/libOpenCL.so 在 etc/OpenCL/vendors/nvidia.icd 中还有 nVIDIA icd 和 libnvidia-opencl.so.1。

4.我对 nVIDIA GPU 所做的只是使用上面的命令为其安装 OpenCL,我认为该命令还包括安装与 nVIDIA GPU 相关的其他软件包。从突触中,它显示安装了以下软件包:

nvidia-331-uvm NVIDIA 統一記憶體核心模組

用于配置 NVIDIA 图形驱动程序的 nvidia 设置工具

nvidia-opencl-icd-331 NVIDIA OpenCL ICD

libcuda1-331 NVIDIA CUDA 运行时库

nvidia-opencl-dev NVIDIA OpenCL 开发文件

nvidia-libopencl1-331 NVIDIA OpenCL Driver and ICD Loader Library

nvidia-331 NVIDIA 二进制驱动程序 - 版本 331.113

这是否意味着安装了所有相关软件包,包括GPU驱动程序,CUDA和OpenCL?我应该从nVIDIA安装其他模块或工具吗?

总之,我很困惑 Opencv 的 ocl 模块在我更新 Opencv 3 之前运行良好,现在即使我尝试重新安装所有内容并尝试恢复旧环境,它也没有工作。

有什么建议吗?

谢谢大家。

编辑:有些人建议我应该通过nVIDIA卸载openCL库,我这样做了,错误变成了:OpenCV 错误:未知错误代码 -6(OpenCL 函数不可用:[clGetPlatformIDs]),在 opencl_check_fn,文件/home/mmcom/opencv-2.4.9/modules/ocl/src/cl_runtime/cl_runtime.cpp,第 83 行OpenCV 错误:未知错误代码 -221(OpenCL 不可用),在 getContext,文件/home/mmcom/opencv-2.4.9/modules/ocl/src/cl_context.cpp,第 677 行在抛出"cv::异常"实例后终止调用 what():/home/mmcom/opencv-2.4.9/modules/ocl/src/cl_context.cpp:677: 错误: (-221) OpenCL 在函数 getContext 中不可用

在格式化后,我今天遇到了完全相同的问题。我尝试运行的任何 OpenCV-OpenCL 代码都失败了,并出现了您在问题中给出的错误。对我来说修复它的 - 信不信由你 - 只是一次性运行这样的可执行文件作为root。此后,所有其他项目中的 OpenCL 功能恢复正常。

我从这个答案的最后一句话中得到了这个想法。不确定这些问题有多相关。