Description of problem: The Fedora spec for OpenCV currently disables the OpenCV gpu module by default, and only enables it when the with_cuda condition is true. The gpu module can be built without cuda being present (as not everyone has nvidia gpus), and it allows for detection of gpu support. From the OpenCV documentation[1]: > To enable CUDA support, configure OpenCV using CMake with WITH_CUDA=ON . When the flag is set and if CUDA is installed, the full-featured OpenCV GPU module is built. Otherwise, the module is still built but at runtime all functions from the module throw Exception with CV_GpuNotSupported error code, except for gpu::getCudaEnabledDeviceCount(). The latter function returns zero GPU count in this case. Building OpenCV without CUDA support does not perform device code compilation, so it does not require the CUDA Toolkit installed. Therefore, using the gpu::getCudaEnabledDeviceCount() function, you can implement a high-level algorithm that will detect GPU presence at runtime and choose an appropriate implementation (CPU or GPU) accordingly. h I'm trying to build a third-party library that uses the OpenCV gpu module[2]. It currently fails as opencv/gpu/gpu.hpp isn't packaged. The library does try to do run-time detection of the OpenCV gpu features, so if the gpu module were enabled the library would build, detect that there is no gpu support, and fall back to cpu-based functions. tl;dr: the opencv gpu module is designed to degrade gracefully when cuda isn't present, so there's no real reason for fedora to disable it. Version-Release number of selected component (if applicable): opencv-2.4.11-3.fc22 How reproducible: Build a program that uses opencv's GPU support Steps to Reproduce: 1. 2. 3. Actual results: Compilation fails, gpu headers missing Expected results: Compilation successful, and run-time detection of GPU support is active. Additional info: [1] http://docs.opencv.org/modules/gpu/doc/introduction.html [2] https://github.com/introlab/rtabmap/blob/jade-devel/corelib/src/VWDictionary.cpp
We cannot enable cuda support within fedora as this is non-free item that been said, there is an option that will allow to enable cuda when the package is rebuilt. rpmbuild -bb opencv*.src.rpm --with cuda if it doesnt work for you and if you use the cuda packaged toolkit provided by nvidia, please send patch to fix that, but we cannot hold the bug here.
An alternative would be to submit an opencv-cuda package in a 3rd party repository (with only the missing cuda enabled library).
I'm not asking for cuda support to be enabled, I'm asking for the gpu module to be built. The gpu module can be built without cuda support. The result is a library where one function actually works (getCudaEnabledDeviceCount), and the rest of the functions throw exceptions when called. This is by design, since not all PCs have nvidia cards, and it allows the library users to detect at runtime whether the GPU features are supported and fall back to alternate code when they're not.
Created attachment 1044123 [details] Patch to enable gpu module This patch contains the changes needed to enable the gpu module. It works without the nvidia cuda sdk installed
Hi I'm looking right now to opencv.spec [1] we don't need add -DBUILD_opencv_gpu=1 ? yeah o delete the line : -%{!?_with_cuda:-DBUILD_opencv_gpu=0} this compile without rpmfusion modules ? and licenses are acceptable for Fedora ? Thanks, [1] http://pkgs.fedoraproject.org/cgit/opencv.git/tree/opencv.spec
The OpenCV GPU code itself looks to be licensed under the same terms as opencv. since it's not linking against cuda, there's no license issues. I have an example of the intended fallback mechanisms that will happen if we enable the gpu module. Test Program: #include <iostream> #include <opencv2/gpu/gpu.hpp> int main (int argc, char *argv[]) { int count = cv::gpu::getCudaEnabledDeviceCount(); std::cout << count << " Cuda Devices" << std::endl; try { cv::gpu::setDevice(0); } catch (std::exception& e) { std::cerr << "Caught Exception: " << e.what() << std::endl; } return 0; } Before attached patch is applied: $ g++ -o ocv_gpu `pkg-config --cflags --libs opencv` ocv_gpu.cc ocv_gpu.cc:2:31: fatal error: opencv2/gpu/gpu.hpp: No such file or directory After attached patch is applied: $ g++ -o ocv_gpu `pkg-config --cflags --libs opencv` ocv_gpu.cc $ ./ocv_gpu 0 Cuda Devices OpenCV Error: No GPU support (The library is compiled without CUDA support) in setDevice, file /home/rich/fedora/opencv/opencv-2.4.11/modules/dynamicuda/include/opencv2/dynamicuda/dynamicuda.hpp, line 84 Caught Exception: /home/rich/fedora/opencv/opencv-2.4.11/modules/dynamicuda/include/opencv2/dynamicuda/dynamicuda.hpp:84: error: (-216) The library is compiled without CUDA support in function setDevice
OK , it seems to me reasonable. Any thing that block this update ? if not I will proceed soon , just waiting a little bit for an answer. Thanks,
opencv-2.4.11-4.fc22 has been submitted as an update for Fedora 22. https://admin.fedoraproject.org/updates/opencv-2.4.11-4.fc22
Package opencv-2.4.11-4.fc22: * should fix your issue, * was pushed to the Fedora 22 testing repository, * should be available at your local mirror within two days. Update it with: # su -c 'yum update --enablerepo=updates-testing opencv-2.4.11-4.fc22' as soon as you are able to. Please go to the following url: https://admin.fedoraproject.org/updates/FEDORA-2015-11339/opencv-2.4.11-4.fc22 then log in and leave karma (feedback).
opencv-2.4.11-5.fc22 has been submitted as an update for Fedora 22. https://admin.fedoraproject.org/updates/opencv-2.4.11-5.fc22
This bug appears to have been reported against 'rawhide' during the Fedora 23 development cycle. Changing version to '23'. (As we did not run this process for some time, it could affect also pre-Fedora 23 development cycle bugs. We are very sorry. It will help us with cleanup during Fedora 23 End Of Life. Thank you.) More information and reason for this action is here: https://fedoraproject.org/wiki/BugZappers/HouseKeeping/Fedora23
opencv-2.4.11-5.fc22 has been pushed to the Fedora 22 stable repository. If problems still persist, please make note of it in this bug report.