zizmor: 1.0.0 -> 1.0.1 (#371951)
[NixPkgs.git] / pkgs / development / libraries / opencv / 4.x.nix
blob0a48e4da8563322e5a283081b1c40cdcebd3696b
1 { lib
2 , stdenv
3 , fetchurl
4 , fetchFromGitHub
5 , cmake
6 , pkg-config
7 , unzip
8 , zlib
9 , pcre2
10 , hdf5
11 , boost
12 , glib
13 , gflags
14 , protobuf_21
15 , config
16 , ocl-icd
17 , buildPackages
18 , qimgv
19 , opencv4
21 , enableJPEG ? true
22 , libjpeg
23 , enablePNG ? true
24 , libpng
25 , enableTIFF ? true
26 , libtiff
27 , enableWebP ? true
28 , libwebp
29 , enableEXR ? !stdenv.hostPlatform.isDarwin
30 , openexr
31 , ilmbase
32 , enableJPEG2000 ? true
33 , openjpeg
34 , enableEigen ? true
35 , eigen
36 , enableBlas ? true
37 , blas
38 , enableVA ? !stdenv.hostPlatform.isDarwin
39 , libva
40 , enableContrib ? true
42 , enableCuda ? config.cudaSupport
43 , enableCublas ? enableCuda
44 , enableCudnn ? false # NOTE: CUDNN has a large impact on closure size so we disable it by default
45 , enableCufft ? enableCuda
46 , cudaPackages ? {}
47 , nvidia-optical-flow-sdk
49 , enableLto ? true
50 , enableUnfree ? false
51 , enableIpp ? false
52 , enablePython ? false
53 , pythonPackages
54 , enableGtk2 ? false
55 , gtk2
56 , enableGtk3 ? false
57 , gtk3
58 , enableVtk ? false
59 , vtk
60 , enableFfmpeg ? true
61 , ffmpeg
62 , enableGStreamer ? true
63 , elfutils
64 , gst_all_1
65 , orc
66 , libunwind
67 , zstd
68 , enableTesseract ? false
69 , tesseract
70 , leptonica
71 , enableTbb ? false
72 , tbb
73 , enableOvis ? false
74 , ogre
75 , enableGPhoto2 ? false
76 , libgphoto2
77 , enableDC1394 ? false
78 , libdc1394
79 , enableDocs ? false
80 , doxygen
81 , graphviz-nox
83 , runAccuracyTests ? true
84 , runPerformanceTests ? false
85 # Modules to enable via BUILD_LIST to build a customized opencv.
86 # An empty lists means this setting is ommited which matches upstreams default.
87 , enabledModules ? [ ]
89 , AVFoundation
90 , Cocoa
91 , VideoDecodeAcceleration
92 , CoreMedia
93 , MediaToolbox
94 , Accelerate
95 , bzip2
96 , callPackage
97 }@inputs:
99 let
100   inherit (lib.attrsets) mapAttrsToList optionalAttrs;
101   inherit (lib.lists) last optionals;
102   inherit (lib.meta) getExe;
103   inherit (lib.strings) cmakeBool cmakeFeature cmakeOptionType concatStrings concatStringsSep optionalString;
104   inherit (lib.trivial) flip;
106   version = "4.9.0";
108   # It's necessary to consistently use backendStdenv when building with CUDA
109   # support, otherwise we get libstdc++ errors downstream
110   stdenv = throw "Use effectiveStdenv instead";
111   effectiveStdenv = if enableCuda then cudaPackages.backendStdenv else inputs.stdenv;
113   src = fetchFromGitHub {
114     owner = "opencv";
115     repo = "opencv";
116     rev = version;
117     hash = "sha256-3qqu4xlRyMbPKHHTIT+iRRGtpFlcv0NU8GNZpgjdi6k=";
118   };
120   contribSrc = fetchFromGitHub {
121     owner = "opencv";
122     repo = "opencv_contrib";
123     rev = version;
124     hash = "sha256-K74Ghk4uDqj4OWEzDxT2R3ERi+jkAWZszzezRenfuZ8=";
125   };
127   testDataSrc = fetchFromGitHub {
128     owner = "opencv";
129     repo = "opencv_extra";
130     rev = version;
131     hash = "sha256-pActKi7aN5EOZq2Fpf5mALnZq71c037/R3Q6wJ4uCfQ=";
132   };
134   # Contrib must be built in order to enable Tesseract support:
135   buildContrib = enableContrib || enableTesseract || enableOvis;
137   # See opencv/3rdparty/ippicv/ippicv.cmake
138   ippicv = {
139     src = fetchFromGitHub {
140       owner = "opencv";
141       repo = "opencv_3rdparty";
142       rev = "0cc4aa06bf2bef4b05d237c69a5a96b9cd0cb85a";
143       hash = "sha256-/kHivOgCkY9YdcRRaVgytXal3ChE9xFfGAB0CfFO5ec=";
144     } + "/ippicv";
145     files = let name = platform: "ippicv_2021.10.0_${platform}_20230919_general.tgz"; in
146       if effectiveStdenv.hostPlatform.system == "x86_64-linux" then
147         { ${name "lnx_intel64"} = "606a19b207ebedfe42d59fd916cc4850"; }
148       else if effectiveStdenv.hostPlatform.system == "i686-linux" then
149         { ${name "lnx_ia32"} = "ea08487b810baad2f68aca87b74a2db9"; }
150       else if effectiveStdenv.hostPlatform.system == "x86_64-darwin" then
151         { ${name "mac_intel64"} = "14f01c5a4780bfae9dde9b0aaf5e56fc"; }
152       else
153         throw "ICV is not available for this platform (or not yet supported by this package)";
154     dst = ".cache/ippicv";
155   };
157   # See opencv_contrib/modules/xfeatures2d/cmake/download_vgg.cmake
158   vgg = {
159     src = fetchFromGitHub {
160       owner = "opencv";
161       repo = "opencv_3rdparty";
162       rev = "fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d";
163       hash = "sha256-fjdGM+CxV1QX7zmF2AiR9NDknrP2PjyaxtjT21BVLmU=";
164     };
165     files = {
166       "vgg_generated_48.i" = "e8d0dcd54d1bcfdc29203d011a797179";
167       "vgg_generated_64.i" = "7126a5d9a8884ebca5aea5d63d677225";
168       "vgg_generated_80.i" = "7cd47228edec52b6d82f46511af325c5";
169       "vgg_generated_120.i" = "151805e03568c9f490a5e3a872777b75";
170     };
171     dst = ".cache/xfeatures2d/vgg";
172   };
174   # See opencv_contrib/modules/xfeatures2d/cmake/download_boostdesc.cmake
175   boostdesc = {
176     src = fetchFromGitHub {
177       owner = "opencv";
178       repo = "opencv_3rdparty";
179       rev = "34e4206aef44d50e6bbcd0ab06354b52e7466d26";
180       sha256 = "13yig1xhvgghvxspxmdidss5lqiikpjr0ddm83jsi0k85j92sn62";
181     };
182     files = {
183       "boostdesc_bgm.i" = "0ea90e7a8f3f7876d450e4149c97c74f";
184       "boostdesc_bgm_bi.i" = "232c966b13651bd0e46a1497b0852191";
185       "boostdesc_bgm_hd.i" = "324426a24fa56ad9c5b8e3e0b3e5303e";
186       "boostdesc_binboost_064.i" = "202e1b3e9fec871b04da31f7f016679f";
187       "boostdesc_binboost_128.i" = "98ea99d399965c03d555cef3ea502a0b";
188       "boostdesc_binboost_256.i" = "e6dcfa9f647779eb1ce446a8d759b6ea";
189       "boostdesc_lbgm.i" = "0ae0675534aa318d9668f2a179c2a052";
190     };
191     dst = ".cache/xfeatures2d/boostdesc";
192   };
194   # See opencv_contrib/modules/face/CMakeLists.txt
195   face = {
196     src = fetchFromGitHub {
197       owner = "opencv";
198       repo = "opencv_3rdparty";
199       rev = "8afa57abc8229d611c4937165d20e2a2d9fc5a12";
200       hash = "sha256-m9yF4kfmpRJybohdRwUTmboeU+SbZQ6F6gm32PDWNBg=";
201     };
202     files = {
203       "face_landmark_model.dat" = "7505c44ca4eb54b4ab1e4777cb96ac05";
204     };
205     dst = ".cache/data";
206   };
208   # See opencv/modules/gapi/cmake/DownloadADE.cmake
209   ade = rec {
210     src = fetchurl {
211       url = "https://github.com/opencv/ade/archive/${name}";
212       hash = "sha256-WG/GudVpkO10kOJhoKXFMj672kggvyRYCIpezal3wcE=";
213     };
214     name = "v0.1.2d.zip";
215     md5 = "dbb095a8bf3008e91edbbf45d8d34885";
216     dst = ".cache/ade";
217   };
219   # See opencv_contrib/modules/wechat_qrcode/CMakeLists.txt
220   wechat_qrcode = {
221     src = fetchFromGitHub {
222       owner = "opencv";
223       repo = "opencv_3rdparty";
224       rev = "a8b69ccc738421293254aec5ddb38bd523503252";
225       hash = "sha256-/n6zHwf0Rdc4v9o4rmETzow/HTv+81DnHP+nL56XiTY=";
226     };
227     files = {
228       "detect.caffemodel" = "238e2b2d6f3c18d6c3a30de0c31e23cf";
229       "detect.prototxt" = "6fb4976b32695f9f5c6305c19f12537d";
230       "sr.caffemodel" = "cbfcd60361a73beb8c583eea7e8e6664";
231       "sr.prototxt" = "69db99927a70df953b471daaba03fbef";
232     };
233     dst = ".cache/wechat_qrcode";
234   };
236   # See opencv/cmake/OpenCVDownload.cmake
237   installExtraFiles = {dst, files, src, ...}: ''
238     mkdir -p "${dst}"
239   '' + concatStrings (flip mapAttrsToList files (name: md5: ''
240     ln -s "${src}/${name}" "${dst}/${md5}-${name}"
241   ''));
242   installExtraFile = {dst, md5, name, src, ...}: ''
243     mkdir -p "${dst}"
244     ln -s "${src}" "${dst}/${md5}-${name}"
245   '';
247   withOpenblas = (enableBlas && blas.provider.pname == "openblas");
248   #multithreaded openblas conflicts with opencv multithreading, which manifest itself in hung tests
249   #https://github.com/OpenMathLib/OpenBLAS/wiki/Faq/4bded95e8dc8aadc70ce65267d1093ca7bdefc4c#multi-threaded
250   openblas_ = blas.provider.override { singleThreaded = true; };
252   inherit (cudaPackages) cudaFlags;
253   inherit (cudaFlags) cmakeCudaArchitecturesString cudaCapabilities;
257 effectiveStdenv.mkDerivation {
258   pname = "opencv";
259   inherit version src;
261   outputs = [
262     "out"
263     "cxxdev"
264   ] ++ optionals (runAccuracyTests || runPerformanceTests) [
265     "package_tests"
266   ];
267   cudaPropagateToOutput = "cxxdev";
269   postUnpack = optionalString buildContrib ''
270     cp --no-preserve=mode -r "${contribSrc}/modules" "$NIX_BUILD_TOP/source/opencv_contrib"
271   '';
273   # Ensures that we use the system OpenEXR rather than the vendored copy of the source included with OpenCV.
274   patches = [
275     ./cmake-don-t-use-OpenCVFindOpenEXR.patch
276   ] ++ optionals enableCuda [
277     ./cuda_opt_flow.patch
278   ];
280   # This prevents cmake from using libraries in impure paths (which
281   # causes build failure on non NixOS)
282   postPatch = ''
283     sed -i '/Add these standard paths to the search paths for FIND_LIBRARY/,/^\s*$/{d}' CMakeLists.txt
284   '';
286   preConfigure =
287     installExtraFile ade +
288     optionalString enableIpp (installExtraFiles ippicv) + (
289       optionalString buildContrib ''
290         cmakeFlagsArray+=("-DOPENCV_EXTRA_MODULES_PATH=$NIX_BUILD_TOP/source/opencv_contrib")
292         ${installExtraFiles vgg}
293         ${installExtraFiles boostdesc}
294         ${installExtraFiles face}
295         ${installExtraFiles wechat_qrcode}
296       ''
297     );
299   postConfigure = ''
300     [ -e modules/core/version_string.inc ]
301     echo '"(build info elided)"' > modules/core/version_string.inc
302   '';
304   buildInputs = [
305     boost
306     gflags
307     glib
308     pcre2
309     protobuf_21
310     zlib
311   ] ++ optionals enablePython [
312     pythonPackages.python
313   ] ++ optionals (effectiveStdenv.buildPlatform == effectiveStdenv.hostPlatform) [
314     hdf5
315   ] ++ optionals enableGtk2 [
316     gtk2
317   ] ++ optionals enableGtk3 [
318     gtk3
319   ] ++ optionals enableVtk [
320     vtk
321   ] ++ optionals enableJPEG [
322     libjpeg
323   ] ++ optionals enablePNG [
324     libpng
325   ] ++ optionals enableTIFF [
326     libtiff
327   ] ++ optionals enableWebP [
328     libwebp
329   ] ++ optionals enableEXR [
330     openexr
331     ilmbase
332   ] ++ optionals enableJPEG2000 [
333     openjpeg
334   ] ++ optionals enableFfmpeg [
335     ffmpeg
336   ] ++ optionals (enableFfmpeg && effectiveStdenv.hostPlatform.isDarwin) [
337     bzip2
338     VideoDecodeAcceleration
339   ] ++ optionals (enableGStreamer && effectiveStdenv.hostPlatform.isLinux) [
340     elfutils
341     gst_all_1.gst-plugins-base
342     gst_all_1.gst-plugins-good
343     gst_all_1.gstreamer
344     libunwind
345     orc
346     zstd
347   ] ++ optionals enableOvis [
348     ogre
349   ] ++ optionals enableGPhoto2 [
350     libgphoto2
351   ] ++ optionals enableDC1394 [
352     libdc1394
353   ] ++ optionals enableEigen [
354     eigen
355   ] ++ optionals enableVA [
356     libva
357   ] ++ optionals enableBlas [
358     blas.provider
359   ] ++ optionals enableTesseract [
360     # There is seemingly no compile-time flag for Tesseract.  It's
361     # simply enabled automatically if contrib is built, and it detects
362     # tesseract & leptonica.
363     tesseract
364     leptonica
365   ] ++ optionals enableTbb [
366     tbb
367   ] ++ optionals effectiveStdenv.hostPlatform.isDarwin [
368     bzip2
369     AVFoundation
370     Cocoa
371     VideoDecodeAcceleration
372     CoreMedia
373     MediaToolbox
374     Accelerate
375   ] ++ optionals enableDocs [
376     doxygen
377     graphviz-nox
378   ] ++ optionals enableCuda [
379     cudaPackages.cuda_cudart
380     cudaPackages.cuda_cccl # <thrust/*>
381     cudaPackages.libnpp # npp.h
382     nvidia-optical-flow-sdk
383   ] ++ optionals enableCublas [
384     # May start using the default $out instead once
385     # https://github.com/NixOS/nixpkgs/issues/271792
386     # has been addressed
387     cudaPackages.libcublas # cublas_v2.h
388   ] ++ optionals enableCudnn [
389     cudaPackages.cudnn # cudnn.h
390   ] ++ optionals enableCufft [
391     cudaPackages.libcufft # cufft.h
392   ];
394   propagatedBuildInputs = optionals enablePython [ pythonPackages.numpy ];
396   nativeBuildInputs = [
397     cmake
398     pkg-config
399     unzip
400   ] ++ optionals enablePython [
401     pythonPackages.pip
402     pythonPackages.wheel
403     pythonPackages.setuptools
404   ] ++ optionals enableCuda [
405     cudaPackages.cuda_nvcc
406   ];
408   env.NIX_CFLAGS_COMPILE = optionalString enableEXR "-I${ilmbase.dev}/include/OpenEXR";
410   # Configure can't find the library without this.
411   OpenBLAS_HOME = optionalString withOpenblas openblas_.dev;
412   OpenBLAS = optionalString withOpenblas openblas_;
414   cmakeFlags = [
415     (cmakeBool "OPENCV_GENERATE_PKGCONFIG" true)
416     (cmakeBool "WITH_OPENMP" true)
417     (cmakeBool "BUILD_PROTOBUF" false)
418     (cmakeOptionType "path" "Protobuf_PROTOC_EXECUTABLE" (getExe buildPackages.protobuf_21))
419     (cmakeBool "PROTOBUF_UPDATE_FILES" true)
420     (cmakeBool "OPENCV_ENABLE_NONFREE" enableUnfree)
421     (cmakeBool "BUILD_TESTS" runAccuracyTests)
422     (cmakeBool "BUILD_PERF_TESTS" runPerformanceTests)
423     (cmakeBool "CMAKE_SKIP_BUILD_RPATH" true)
424     (cmakeBool "BUILD_DOCS" enableDocs)
425     # "OpenCV disables pkg-config to avoid using of host libraries. Consider using PKG_CONFIG_LIBDIR to specify target SYSROOT"
426     # but we have proper separation of build and host libs :), fixes cross
427     (cmakeBool "OPENCV_ENABLE_PKG_CONFIG" true)
428     (cmakeBool "WITH_IPP" enableIpp)
429     (cmakeBool "WITH_TIFF" enableTIFF)
430     (cmakeBool "WITH_WEBP" enableWebP)
431     (cmakeBool "WITH_JPEG" enableJPEG)
432     (cmakeBool "WITH_PNG" enablePNG)
433     (cmakeBool "WITH_OPENEXR" enableEXR)
434     (cmakeBool "WITH_OPENJPEG" enableJPEG2000)
435     (cmakeBool "WITH_JASPER" false) # OpenCV falls back to a vendored copy of Jasper when OpenJPEG is disabled
436     (cmakeBool "WITH_TBB" enableTbb)
438     # CUDA options
439     (cmakeBool "WITH_CUDA" enableCuda)
440     (cmakeBool "WITH_CUBLAS" enableCublas)
441     (cmakeBool "WITH_CUDNN" enableCudnn)
442     (cmakeBool "WITH_CUFFT" enableCufft)
444     # LTO options
445     (cmakeBool "ENABLE_LTO" enableLto)
446     (cmakeBool "ENABLE_THIN_LTO" (
447       enableLto && (
448         # Only clang supports thin LTO, so we must either be using clang through the effectiveStdenv,
449         effectiveStdenv.cc.isClang ||
450           # or through the backend effectiveStdenv.
451           (enableCuda && effectiveStdenv.cc.isClang)
452       )
453     ))
454   ] ++ optionals enableCuda [
455     (cmakeBool "CUDA_FAST_MATH" true)
456     (cmakeFeature "CUDA_NVCC_FLAGS" "--expt-relaxed-constexpr")
458     # OpenCV respects at least three variables:
459     # -DCUDA_GENERATION takes a single arch name, e.g. Volta
460     # -DCUDA_ARCH_BIN takes a semi-colon separated list of real arches, e.g. "8.0;8.6"
461     # -DCUDA_ARCH_PTX takes the virtual arch, e.g. "8.6"
462     (cmakeFeature "CUDA_ARCH_BIN" cmakeCudaArchitecturesString)
463     (cmakeFeature "CUDA_ARCH_PTX" (last cudaCapabilities))
465     (cmakeOptionType "path" "NVIDIA_OPTICAL_FLOW_2_0_HEADERS_PATH" nvidia-optical-flow-sdk.outPath)
466   ] ++ optionals effectiveStdenv.hostPlatform.isDarwin [
467     (cmakeBool "WITH_OPENCL" false)
468     (cmakeBool "WITH_LAPACK" false)
470     # Disable unnecessary vendoring that's enabled by default only for Darwin.
471     # Note that the opencvFlag feature flags listed above still take
472     # precedence, so we can safely list everything here.
473     (cmakeBool "BUILD_ZLIB" false)
474     (cmakeBool "BUILD_TIFF" false)
475     (cmakeBool "BUILD_OPENJPEG" false)
476     (cmakeBool "BUILD_JASPER" false)
477     (cmakeBool "BUILD_JPEG" false)
478     (cmakeBool "BUILD_PNG" false)
479     (cmakeBool "BUILD_WEBP" false)
480   ] ++ optionals (!effectiveStdenv.hostPlatform.isDarwin) [
481     (cmakeOptionType "path" "OPENCL_LIBRARY" "${ocl-icd}/lib/libOpenCL.so")
482   ] ++ optionals enablePython [
483     (cmakeOptionType "path" "OPENCV_PYTHON_INSTALL_PATH" pythonPackages.python.sitePackages)
484   ] ++ optionals (enabledModules != [ ]) [
485     (cmakeFeature "BUILD_LIST" (concatStringsSep "," enabledModules))
486   ];
488   postBuild = optionalString enableDocs ''
489     make doxygen
490   '';
492   preInstall =
493     optionalString (runAccuracyTests || runPerformanceTests) ''
494       mkdir $package_tests
495       cp -R $src/samples $package_tests/
496     '' + optionalString runAccuracyTests ''
497       mv ./bin/*test* $package_tests/
498     '' + optionalString runPerformanceTests ''
499       mv ./bin/*perf* $package_tests/
500     '';
502   # By default $out/lib/pkgconfig/opencv4.pc looks something like this:
503   #
504   #   prefix=/nix/store/g0wnfyjjh4rikkvp22cpkh41naa43i4i-opencv-4.0.0
505   #   exec_prefix=${prefix}
506   #   libdir=${exec_prefix}//nix/store/g0wnfyjjh4rikkvp22cpkh41naa43i4i-opencv-4.0.0/lib
507   #   includedir_old=${prefix}//nix/store/g0wnfyjjh4rikkvp22cpkh41naa43i4i-opencv-4.0.0/include/opencv4/opencv
508   #   includedir_new=${prefix}//nix/store/g0wnfyjjh4rikkvp22cpkh41naa43i4i-opencv-4.0.0/include/opencv4
509   #   ...
510   #   Libs: -L${exec_prefix}//nix/store/g0wnfyjjh4rikkvp22cpkh41naa43i4i-opencv-4.0.0/lib ...
511   # Note that ${exec_prefix} is set to $out but that $out is also appended to
512   # ${exec_prefix}. This causes linker errors in downstream packages so we strip
513   # of $out after the ${exec_prefix} and ${prefix} prefixes:
514   postInstall = ''
515     sed -i "s|{exec_prefix}/$out|{exec_prefix}|;s|{prefix}/$out|{prefix}|" \
516       "$out/lib/pkgconfig/opencv4.pc"
517     mkdir "$cxxdev"
518   ''
519   # fix deps not progagating from opencv4.cxxdev if cuda is disabled
520   # see https://github.com/NixOS/nixpkgs/issues/276691
521   + optionalString (!enableCuda) ''
522     mkdir -p "$cxxdev/nix-support"
523     echo "''${!outputDev}" >> "$cxxdev/nix-support/propagated-build-inputs"
524   ''
525   # remove the requirement that the exact same version of CUDA is used in packages
526   # consuming OpenCV's CMakes files
527   + optionalString enableCuda ''
528     substituteInPlace "$out/lib/cmake/opencv4/OpenCVConfig.cmake" \
529       --replace-fail \
530         'find_host_package(CUDA ''${OpenCV_CUDA_VERSION} EXACT REQUIRED)' \
531         'find_host_package(CUDA REQUIRED)' \
532       --replace-fail \
533         'message(FATAL_ERROR "OpenCV static library was compiled with CUDA' \
534         'message("OpenCV static library was compiled with CUDA'
535   ''
536   # install python distribution information, so other packages can `import opencv`
537   + optionalString enablePython ''
538     pushd $NIX_BUILD_TOP/$sourceRoot/modules/python/package
539     python -m pip wheel --verbose --no-index --no-deps --no-clean --no-build-isolation --wheel-dir dist .
541     pushd dist
542     python -m pip install ./*.whl --no-index --no-warn-script-location --prefix="$out" --no-cache
544     popd
545     popd
546   '';
548   passthru = {
549     cudaSupport = enableCuda;
551     tests = {
552       inherit (gst_all_1) gst-plugins-bad;
553     }
554     // optionalAttrs (!effectiveStdenv.hostPlatform.isDarwin) { inherit qimgv; }
555     // optionalAttrs (!enablePython) { pythonEnabled = pythonPackages.opencv4; }
556     // optionalAttrs (effectiveStdenv.buildPlatform != "x86_64-darwin") {
557       opencv4-tests = callPackage ./tests.nix {
558         inherit enableGStreamer enableGtk2 enableGtk3 runAccuracyTests runPerformanceTests testDataSrc;
559         inherit opencv4;
560       };
561     }
562     // optionalAttrs (enableCuda) {
563       no-libstdcxx-errors = callPackage ./libstdcxx-test.nix { attrName = "opencv4"; };
564     };
565   } // optionalAttrs enablePython { pythonPath = [ ]; };
567   meta = {
568     description = "Open Computer Vision Library with more than 500 algorithms";
569     homepage = "https://opencv.org/";
570     license = if enableUnfree then lib.licenses.unfree else lib.licenses.bsd3;
571     maintainers = with lib.maintainers; [ basvandijk ];
572     platforms = with lib.platforms; linux ++ darwin;
573   };