Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enable nvidia-optical-flow-sdk when building opencv4 with cuda #81922

Merged
merged 2 commits into from Mar 22, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
28 changes: 28 additions & 0 deletions pkgs/development/libraries/nvidia-optical-flow-sdk/default.nix
@@ -0,0 +1,28 @@
{ stdenv, fetchFromGitHub }:

stdenv.mkDerivation {
pname = "nvidia-optical-flow-sdk";
version = "1.0";

src = fetchFromGitHub {
owner = "NVIDIA";
repo = "NVIDIAOpticalFlowSDK";
rev = "79c6cee80a2df9a196f20afd6b598a9810964c32";
sha256 = "1y6igwv75v1ynqm7j6la3ky0f15mgnj1jyyak82yvhcsx1aax0a1";
};

# # We only need the header files. The library files are
# # in the nvidia_x11 driver.
installPhase = ''
mkdir -p $out/include
cp -R * $out/include
'';

meta = with stdenv.lib; {
description = "Nvidia optical flow headers for computing the relative motion of pixels between images";
homepage = "https://developer.nvidia.com/opticalflow-sdk";
license = licenses.bsd3; # applies to the header files only
platforms = platforms.all;
};
mjlbach marked this conversation as resolved.
Show resolved Hide resolved
}

6 changes: 4 additions & 2 deletions pkgs/development/libraries/opencv/4.x.nix
Expand Up @@ -15,7 +15,7 @@
, enableContrib ? true

, enableCuda ? (config.cudaSupport or false) &&
stdenv.hostPlatform.isx86_64, cudatoolkit
stdenv.hostPlatform.isx86_64, cudatoolkit, nvidia-optical-flow-sdk

, enableUnfree ? false
, enableIpp ? false
Expand Down Expand Up @@ -166,6 +166,7 @@ stdenv.mkDerivation {
# Also, work around https://github.com/NixOS/nixpkgs/issues/26304 with
# what appears to be some stray headers in dnn/misc/tensorflow
# in contrib when generating the Python bindings:
patches = lib.optional enableCuda ./cuda_opt_flow.patch;
postPatch = ''
sed -i '/Add these standard paths to the search paths for FIND_LIBRARY/,/^\s*$/{d}' CMakeLists.txt
sed -i -e 's|if len(decls) == 0:|if len(decls) == 0 or "opencv2/" not in hdr:|' ./modules/python/src2/gen2.py
Expand Down Expand Up @@ -213,7 +214,7 @@ stdenv.mkDerivation {
# tesseract & leptonica.
++ lib.optionals enableTesseract [ tesseract leptonica ]
++ lib.optional enableTbb tbb
++ lib.optional enableCuda cudatoolkit
++ lib.optionals enableCuda [ cudatoolkit nvidia-optical-flow-sdk ]
++ lib.optionals stdenv.isDarwin [ bzip2 AVFoundation Cocoa VideoDecodeAcceleration ]
++ lib.optionals enableDocs [ doxygen graphviz-nox ];

Expand Down Expand Up @@ -249,6 +250,7 @@ stdenv.mkDerivation {
"-DCUDA_FAST_MATH=ON"
"-DCUDA_HOST_COMPILER=${cudatoolkit.cc}/bin/cc"
"-DCUDA_NVCC_FLAGS=--expt-relaxed-constexpr"
"-DNVIDIA_OPTICAL_FLOW_1_0_HEADERS_PATH=${nvidia-optical-flow-sdk}"
] ++ lib.optionals stdenv.isDarwin [
"-DWITH_OPENCL=OFF"
"-DWITH_LAPACK=OFF"
Expand Down
26 changes: 26 additions & 0 deletions pkgs/development/libraries/opencv/cuda_opt_flow.patch
@@ -0,0 +1,26 @@
diff --git a/opencv_contrib/cudaoptflow/CMakeLists.txt b/opencv_contrib/cudaoptflow/CMakeLists.txt
index e5b823ab4a..a728060d0b 100644
--- a/opencv_contrib/cudaoptflow/CMakeLists.txt
+++ b/opencv_contrib/cudaoptflow/CMakeLists.txt
@@ -11,18 +11,6 @@ ocv_define_module(cudaoptflow opencv_video opencv_optflow opencv_cudaarithm open
set(NVIDIA_OPTICAL_FLOW_1_0_HEADERS_COMMIT "79c6cee80a2df9a196f20afd6b598a9810964c32")
set(NVIDIA_OPTICAL_FLOW_1_0_HEADERS_MD5 "ca5acedee6cb45d0ec610a6732de5c15")
set(NVIDIA_OPTICAL_FLOW_1_0_HEADERS_PATH "${OpenCV_BINARY_DIR}/3rdparty/NVIDIAOpticalFlowSDK_1_0_Headers")
-ocv_download(FILENAME "${NVIDIA_OPTICAL_FLOW_1_0_HEADERS_COMMIT}.zip"
- HASH ${NVIDIA_OPTICAL_FLOW_1_0_HEADERS_MD5}
- URL
- "https://github.com/NVIDIA/NVIDIAOpticalFlowSDK/archive/"
- DESTINATION_DIR "${NVIDIA_OPTICAL_FLOW_1_0_HEADERS_PATH}"
- STATUS NVIDIA_OPTICAL_FLOW_1_0_HEADERS_DOWNLOAD_SUCCESS
- ID "NVIDIA_OPTICAL_FLOW"
- UNPACK RELATIVE_URL)

-if(NOT NVIDIA_OPTICAL_FLOW_1_0_HEADERS_DOWNLOAD_SUCCESS)
- message(STATUS "Failed to download NVIDIA_Optical_Flow_1_0 Headers")
-else()
- add_definitions(-DHAVE_NVIDIA_OPTFLOW=1)
- ocv_include_directories(SYSTEM "${NVIDIA_OPTICAL_FLOW_1_0_HEADERS_PATH}/NVIDIAOpticalFlowSDK-${NVIDIA_OPTICAL_FLOW_1_0_HEADERS_COMMIT}")
-endif()
\ No newline at end of file
+add_definitions(-DHAVE_NVIDIA_OPTFLOW=1)
+ocv_include_directories(SYSTEM "${NVIDIA_OPTICAL_FLOW_1_0_HEADERS_PATH}")
2 changes: 2 additions & 0 deletions pkgs/top-level/all-packages.nix
Expand Up @@ -13585,6 +13585,8 @@ in

nvidia-video-sdk = callPackage ../development/libraries/nvidia-video-sdk { };

nvidia-optical-flow-sdk = callPackage ../development/libraries/nvidia-optical-flow-sdk { };

nvtop = callPackage ../tools/system/nvtop {
nvidia_x11 = linuxPackages.nvidia_x11.override { libsOnly = true; };
};
Expand Down