OpenCV错误:initializeOpenCLDevices

时间:2015-06-16 20:19:18

标签: c++ opencv ubuntu opencl nvidia

几周前,我在Ubuntu 14.04 LTS下使用C ++与Opencv 2.4.9和OpenCL建立了一个计算机视觉程序。它运行良好,然后上周我尝试使用新发布的OpenCV 3.0更新一些功能但由于一些API已更改失败,所以我卸载了Opencv 3.0并重新安装了Opencv 2.4.9。因此,每当调用Opencv的ocl模块中的函数时,就会出现“initializeOpenCLDevices”中出现“OpenCV Error:Gpu API call(-1001)”的错误。

显示的整个错误是:

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

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

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

  1. 安装timeshift(首次备份)
  2. 安装Synaptic(第二次备份)
  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
  5. 我使用的计算机是配备Intel Core i7 vPro和nVIDIA Quadro K4100M GPU的Dell Precision M6800移动工作站。

    更多信息和关注点:

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

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

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

    3.我使用CmakeList通过输入cmake来构建项目。命令,它清楚地说找到了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相关的其他软件包。从synaptic,它显示安装了以下包:

    nvidia-331-uvm NVIDIA统一内存内核模块

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

    nvidia-opencl-icd-331 NVIDIA OpenCL ICD

    libcuda1-331 NVIDIA CUDA运行时库

    nvidia-opencl-dev NVIDIA OpenCL开发文件

    nvidia-libopencl1-331 NVIDIA OpenCL驱动程序和ICD加载程序库

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

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

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

    有什么建议吗?

    谢谢大家。

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

1 个答案:

答案 0 :(得分:0)

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

我从this回答的最后一句中得到了这个想法。不知道问题的相关性如何。