diff --git a/packages/dartcv/bin/gen_cmake_vars.dart b/packages/dartcv/bin/gen_cmake_vars.dart new file mode 100644 index 00000000..6e011f5f --- /dev/null +++ b/packages/dartcv/bin/gen_cmake_vars.dart @@ -0,0 +1,91 @@ +// ignore_for_file: avoid_dynamic_calls, avoid_print + +import 'dart:io'; + +import 'package:yaml/yaml.dart'; + +const defaultModuleSettings = { + // "core": "ON", // not configurable + "calib3d": "ON", + "contrib": "ON", + "dnn": "ON", + "features2d": "ON", + "flann": "ON", + // "gapi", // disabled + "highgui": "ON", + "imgproc": "ON", + "imgcodecs": "ON", + "objdetect": "ON", + "photo": "ON", + "stitching": "ON", + "video": "ON", + "videoio": "ON", +}; + +void main(List args) { + final pubspecPath = Platform.script.resolve("../../../../pubspec.yaml"); + final excludeModules = parseUserDefinedExcludeModules(pubspecPath.toFilePath()); + + final cmakeVars = StringBuffer("###DARTCV_GEN_CMAKE_VAR_BEGIN###\n"); + for (final k in excludeModules.entries) { + cmakeVars.write("${k.key.toUpperCase()}=${k.value.toUpperCase()}\n"); + } + cmakeVars.write("###DARTCV_GEN_CMAKE_VAR_END###"); + print(cmakeVars); +} + +/// Parse the user defined exclude modules from pubspec.yaml +/// +/// Returns a list of excluded module names +Map parseUserDefinedExcludeModules(String pubspecPath, {bool excludeMode = true}) { + try { + print("Generating cmake vars from $pubspecPath"); + // Read the pubspec.yaml file + final File file = File(pubspecPath); + if (!file.existsSync()) { + print("$pubspecPath not found"); + return defaultModuleSettings; + } + + // Parse the YAML content + final String yamlContent = file.readAsStringSync(); + final dynamic yamlMap = loadYaml(yamlContent); + + // Navigate to the hooks.user_defines.dartcv4.exclude_modules section + if (yamlMap is YamlMap && + yamlMap['hooks'] is YamlMap && + yamlMap['hooks']['user_defines'] is YamlMap && + yamlMap['hooks']['user_defines']['dartcv4'] is YamlMap) { + final dartcvDefines = yamlMap['hooks']['user_defines']['dartcv4'] as YamlMap; + + final excludeModules = dartcvDefines['exclude_modules'] as YamlList? ?? YamlList(); + // include is priority over exclude + final includeModules = dartcvDefines['include_modules'] as YamlList? ?? YamlList(); + + final include = + includeModules + .map((dynamic module) => module.toString().toLowerCase()) + .where((e) => defaultModuleSettings.containsKey(e)) + .toList(); + final exclude = + excludeModules + .map((dynamic module) => module.toString().toLowerCase()) + .where((e) => defaultModuleSettings.containsKey(e) && !include.contains(e)) + .toList(); + + final result = { + for (final e in defaultModuleSettings.keys) + e: exclude.contains(e) ? "OFF" : defaultModuleSettings[e]!, + }; + + return result; + } + + print("parse error"); + return defaultModuleSettings; + } catch (e) { + // Return empty list in case of any error + print('Error parsing exclude_modules: $e'); + return defaultModuleSettings; + } +} diff --git a/packages/dartcv/pubspec.yaml b/packages/dartcv/pubspec.yaml index 9532eaae..cf199f4d 100644 --- a/packages/dartcv/pubspec.yaml +++ b/packages/dartcv/pubspec.yaml @@ -11,6 +11,7 @@ environment: dependencies: ffi: ^2.1.3 + yaml: ^3.1.3 dev_dependencies: ffigen: ">=13.0.0 <19.0.0" diff --git a/packages/opencv_core/README.md b/packages/opencv_core/README.md index 07db67ca..95f8cd7a 100644 --- a/packages/opencv_core/README.md +++ b/packages/opencv_core/README.md @@ -36,6 +36,53 @@ More examples refet to [awesome-opencv_dart](https://github.com/rainyl/awesome-o see [Demos](https://github.com/rainyl/opencv_dart?tab=readme-ov-file#Demos) +## Customizing OpenCV Modules + +You can enable or disable specific OpenCV modules for your build by specifying them in your app's `pubspec.yaml` file under the `dartcv_modules` section. A Dart script will read this section and generate a `dartcv_modules.cmake` file, which is used by the build system. + +### Example `pubspec.yaml` configuration + +```yaml +dartcv_modules: + exclude: + - contrib + - dnn + - features2d +# or +# dartcv_modules: +# include: +# - core +# - imgproc +``` + +- Use `exclude` to disable specific modules, or `include` to enable only specific modules. +- The Dart script will generate a `dartcv_modules.cmake` file in your app root before building. +- If neither is specified, all default modules will be enabled. + +### iOS/macOS Module Selection + +For iOS and macOS, module selection is handled via CocoaPods. In your `ios/Podfile` or `macos/Podfile`, specify only the modules you need: + +```ruby +pod 'DartCvIOS/core', '4.11.0.2' +pod 'DartCvIOS/imgproc', '4.11.0.2' +# Add more as needed +``` + +- Only the modules you list will be included in your app. +- Make sure your Podfile matches your desired module configuration. + +### Generating the CMake Config + +After editing your `pubspec.yaml`, run: + +```sh +dart tools/generate_dartcv_cmake.dart +``` + +This will generate a safe `dartcv_modules.cmake` file in your project root, which is used by the build system. +**Do not edit this file by hand.** + ## License [Apache-2.0 License](LICENSE) diff --git a/packages/opencv_core/android/build.gradle b/packages/opencv_core/android/build.gradle index 493e062d..2481790d 100644 --- a/packages/opencv_core/android/build.gradle +++ b/packages/opencv_core/android/build.gradle @@ -81,7 +81,7 @@ android { } } - def targetPlatforms = project.getProperty('target-platform').split(',') as List + def targetPlatforms = (project.hasProperty('target-platform') ? project.getProperty('target-platform') : 'android-arm,android-arm64,android-x86,android-x64').split(',') as List if (!targetPlatforms.isEmpty()) { def platformAbiMap = [ 'android-arm64': 'arm64-v8a', diff --git a/packages/opencv_core/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/opencv_core/example/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6b..efdcc4ac 100644 --- a/packages/opencv_core/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/opencv_core/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-all.zip diff --git a/packages/opencv_core/example/android/settings.gradle b/packages/opencv_core/example/android/settings.gradle index b9e43bd3..f7392abf 100644 --- a/packages/opencv_core/example/android/settings.gradle +++ b/packages/opencv_core/example/android/settings.gradle @@ -18,7 +18,7 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false + id "com.android.application" version '8.10.0' apply false id "org.jetbrains.kotlin.android" version "1.8.22" apply false } diff --git a/packages/opencv_core/example/pubspec.yaml b/packages/opencv_core/example/pubspec.yaml index fd02ec78..9b5d9012 100644 --- a/packages/opencv_core/example/pubspec.yaml +++ b/packages/opencv_core/example/pubspec.yaml @@ -95,3 +95,16 @@ flutter: # # For details regarding fonts from package dependencies, # see https://flutter.dev/to/font-from-package + +hooks: + user_defines: + dartcv4: + exclude_modules: + - contrib + - dnn + - features2d + - core + include_modules: + - core + - imgproc + - videoio diff --git a/packages/opencv_core/pubspec.yaml b/packages/opencv_core/pubspec.yaml index 6f6cc1af..0560c98e 100644 --- a/packages/opencv_core/pubspec.yaml +++ b/packages/opencv_core/pubspec.yaml @@ -16,7 +16,9 @@ environment: dependencies: flutter: sdk: flutter - dartcv4: 1.1.3 + # dartcv4: 1.1.3 + dartcv4: + path: ../dartcv dev_dependencies: test: ^1.25.2 diff --git a/packages/opencv_core/src/CMakeLists.txt b/packages/opencv_core/src/CMakeLists.txt index a0276352..8cb476a6 100644 --- a/packages/opencv_core/src/CMakeLists.txt +++ b/packages/opencv_core/src/CMakeLists.txt @@ -13,6 +13,55 @@ macro(_find_version _version_var _version_file _regex_find _regex_replace) endif() endmacro() +function(_parse_dartcv_cmake_vars) + # Generate module config from pubspec.yaml using Dart script + # The step should not be mendatary for better user experience + find_program(DART_EXECUTABLE dart) + if(NOT DART_EXECUTABLE) + message(WARNING "Dart SDK not found! Will use default modules.") + return() + endif() + + message(DEBUG "CMAKE_LIBRARY_OUTPUT_DIRECTORY: ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") + # find user project directory + # TODO: currently work in android, need to be tested on linux and windows + get_filename_component(_working_dir "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}" DIRECTORY) + while(NOT EXISTS "${_working_dir}/build" AND NOT "${_working_dir}" STREQUAL "/") + get_filename_component(_working_dir "${_working_dir}" DIRECTORY) + endwhile() + message(DEBUG "WORKING_DIR: ${_working_dir}") + + execute_process( + COMMAND ${DART_EXECUTABLE} run dartcv4:gen_cmake_vars + OUTPUT_VARIABLE _output + WORKING_DIRECTORY ${_working_dir} + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + message(DEBUG "Generate command output:\n${_output}") + + string(REGEX MATCH "###DARTCV_GEN_CMAKE_VAR_BEGIN###\n.*###DARTCV_GEN_CMAKE_VAR_END###" _content ${_output}) + if(_content) + string(REGEX REPLACE "###DARTCV_GEN_CMAKE_VAR_BEGIN###\n" "" _content ${_content}) + string(REGEX REPLACE "###DARTCV_GEN_CMAKE_VAR_END###" "" _content ${_content}) + string(STRIP _content ${_content}) + else() + message(WARNING "No matching DARTCV_GEN_CMAKE_VAR block found.") + return() + endif() + + # Split to lines + string(REGEX REPLACE "\r?\n" ";" _lines "${_content}") + foreach(_line IN LISTS _lines) + if(_line MATCHES "^([^=]+)=(ON|OFF)$") + set(_var_name "DARTCV_WITH_${CMAKE_MATCH_1}") + set(_var_value "${CMAKE_MATCH_2}") + set(${_var_name} ${_var_value} CACHE BOOL "Enable OpenCV ${CMAKE_MATCH_1} module" FORCE) + endif() + endforeach() +endfunction() + _find_version(_version_project "${PROJ_DIR}/pubspec.yaml" "^version: (.+)*$" "version: (.+)*$") _find_version(_version_opencv "${PROJ_DIR}/pubspec.yaml" "^opencv_version: (.+)*$" "opencv_version: (.+)*$") _find_version(_version_dartcv "${PROJ_DIR}/pubspec.yaml" "^dartcv_version: (.+)*$" "dartcv_version: (.+)*$") @@ -27,30 +76,69 @@ set(PROJECT_VERSION "${_version_project}") # Flutter doesn't support build android-x86, disable here # https://docs.flutter.dev/deployment/android#what-are-the-supported-target-architectures -if(ANDROID AND(DEFINED ANDROID_ABI)) +if(ANDROID AND (DEFINED ANDROID_ABI)) if(${ANDROID_ABI} STREQUAL "x86") message(STATUS "Unsupported ABI: x86") return() endif() endif() -set(DARTCV_WITH_CALIB3D ON CACHE BOOL "Enable OpenCV calib3d module" FORCE) -set(DARTCV_WITH_CONTRIB ON CACHE BOOL "Enable OpenCV contrib module" FORCE) -set(DARTCV_WITH_DNN ON CACHE BOOL "Enable OpenCV dnn module" FORCE) -set(DARTCV_WITH_FEATURE2D ON CACHE BOOL "Enable OpenCV feature2d module" FORCE) -set(DARTCV_WITH_HIGHGUI OFF CACHE BOOL "Enable OpenCV highgui module" FORCE) -set(DARTCV_WITH_IMGPROC ON CACHE BOOL "Enable OpenCV imgproc module" FORCE) -set(DARTCV_WITH_OBJDETECT ON CACHE BOOL "Enable OpenCV objdetect module" FORCE) -set(DARTCV_WITH_PHOTO ON CACHE BOOL "Enable OpenCV photo module" FORCE) -set(DARTCV_WITH_STITCHING ON CACHE BOOL "Enable OpenCV stitching module" FORCE) -set(DARTCV_WITH_VIDEO ON CACHE BOOL "Enable OpenCV video module") -set(DARTCV_WITH_VIDEOIO OFF CACHE BOOL "Enable OpenCV videoio module" FORCE) +_parse_dartcv_cmake_vars() + +set(_enabled_modules "core") +set(_disabled_modules) +set(_modules CALIB3D CONTRIB DNN FEATURES2D IMGPROC OBJDETECT PHOTO STITCHING VIDEO) +foreach(_m IN LISTS _modules) + if(NOT DEFINED ${DARTCV_WITH_${_m}}) + set(DARTCV_WITH_CALIB3D ON CACHE BOOL "Enable OpenCV ${_m} module" FORCE) + endif() + + string(TOLOWER ${_m} _m_lower) + if(${DARTCV_WITH_${_m}}) + set(_enabled_modules ${_enabled_modules} ${_m_lower}) + else() + set(_disabled_modules ${_disabled_modules} ${_m_lower}) + endif() +endforeach() + +set(_modules HIGHGUI VIDEOIO) +foreach(_m IN LISTS _modules) + if(NOT DEFINED ${DARTCV_WITH_${_m}}) + set(DARTCV_WITH_CALIB3D OFF CACHE BOOL "Enable OpenCV ${_m} module" FORCE) + endif() + + string(TOLOWER ${_m} _m_lower) + if(${DARTCV_WITH_${_m}}) + set(_enabled_modules ${_enabled_modules} ${_m_lower}) + else() + set(_disabled_modules ${_disabled_modules} ${_m_lower}) + endif() +endforeach() + set(DARTCV_WITH_GAPI OFF CACHE BOOL "Enable OpenCV gapi module" FORCE) set(DARTCV_WORLD OFF CACHE BOOL "Enable OpenCV world module" FORCE) set(OPENCV_VERSION "${_version_opencv}") set(DARTCV_DISABLE_DOWNLOAD_OPENCV OFF) +message(DEBUG "DARTCV_WITH_CALIB3D: ${DARTCV_WITH_CALIB3D}") +message(DEBUG "DARTCV_WITH_CONTRIB: ${DARTCV_WITH_CONTRIB}") +message(DEBUG "DARTCV_WITH_DNN: ${DARTCV_WITH_DNN}") +message(DEBUG "DARTCV_WITH_FEATURES2D: ${DARTCV_WITH_FEATURES2D}") +message(DEBUG "DARTCV_WITH_HIGHGUI: ${DARTCV_WITH_HIGHGUI}") +message(DEBUG "DARTCV_WITH_IMGPROC: ${DARTCV_WITH_IMGPROC}") +message(DEBUG "DARTCV_WITH_OBJDETECT: ${DARTCV_WITH_OBJDETECT}") +message(DEBUG "DARTCV_WITH_PHOTO: ${DARTCV_WITH_PHOTO}") +message(DEBUG "DARTCV_WITH_STITCHING: ${DARTCV_WITH_STITCHING}") +message(DEBUG "DARTCV_WITH_VIDEO: ${DARTCV_WITH_VIDEO}") +message(DEBUG "DARTCV_WITH_VIDEOIO: ${DARTCV_WITH_VIDEOIO}") + +message(STATUS "Enabled modules: ${_enabled_modules}") +message(STATUS "Disabled modules: ${_disabled_modules}") + +# TODO: remove this line when finished +message(FATAL_ERROR "EXIT") + include(FetchContent) FetchContent_Declare( libdartcv diff --git a/packages/opencv_dart/README.md b/packages/opencv_dart/README.md index 5eb8b90d..b98b7bfc 100644 --- a/packages/opencv_dart/README.md +++ b/packages/opencv_dart/README.md @@ -12,7 +12,6 @@ use [opencv_core](https://pub.dev/packages/opencv_core) > > - Q&A: [#212](https://github.com/rainyl/opencv_dart/issues/212) or open new issues. > - ~~If you are using flutter with [Native Assets](https://github.com/flutter/flutter/issues/129757) feature supported, consider using v2.x version, see more in [native-assets branch](https://github.com/rainyl/opencv_dart/tree/native-assets)~~ Won't update until `Native Assets` being stable. -> ## Supported platforms @@ -45,3 +44,43 @@ see [Demos](https://github.com/rainyl/opencv_dart?tab=readme-ov-file#Demos) ## License [Apache-2.0 License](LICENSE) + +## Customizing OpenCV Modules + +You can enable or disable specific OpenCV modules for your build by specifying them in your app's `pubspec.yaml` file under the `dartcv_modules` section. A Dart script will read this section and generate a `dartcv_modules.cmake` file, which is used by the build system. + +### Example `pubspec.yaml` configuration + +```yaml +dartcv_modules: + exclude: + - contrib + - dnn + - features2d +# or +# dartcv_modules: +# include: +# - core +# - imgproc +``` + +- Use `exclude` to disable specific modules, or `include` to enable only specific modules. +- The Dart script will generate a `dartcv_modules.cmake` file in your app root before building. +- If neither is specified, all default modules will be enabled. + +### iOS/macOS Module Selection + +For iOS and macOS, module selection is handled via CocoaPods. In your `ios/Podfile` or `macos/Podfile`, specify only the modules you need: + +```ruby +pod 'DartCvIOS/core', '4.11.0.2' +pod 'DartCvIOS/imgproc', '4.11.0.2' +# Add more as needed +``` + +- Only the modules you list will be included in your app. +- Make sure your Podfile matches your desired module configuration. + +### Generating the CMake Config + +The build system will automatically generate the CMake config from your `pubspec.yaml` at build time. You do not need to run any script manually. diff --git a/packages/opencv_dart/android/build.gradle b/packages/opencv_dart/android/build.gradle index 41930cdf..36db0073 100644 --- a/packages/opencv_dart/android/build.gradle +++ b/packages/opencv_dart/android/build.gradle @@ -78,7 +78,7 @@ android { } } - def targetPlatforms = project.getProperty('target-platform').split(',') as List + def targetPlatforms = (project.hasProperty('target-platform') ? project.getProperty('target-platform') : 'android-arm,android-arm64,android-x86,android-x64').split(',') as List if (!targetPlatforms.isEmpty()) { def platformAbiMap = [ 'android-arm64': 'arm64-v8a', diff --git a/packages/opencv_dart/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/opencv_dart/example/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6b..fde127d7 100644 --- a/packages/opencv_dart/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/opencv_dart/example/android/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ +#Fri May 09 23:15:35 ADT 2025 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/packages/opencv_dart/example/android/settings.gradle b/packages/opencv_dart/example/android/settings.gradle index b9e43bd3..f7392abf 100644 --- a/packages/opencv_dart/example/android/settings.gradle +++ b/packages/opencv_dart/example/android/settings.gradle @@ -18,7 +18,7 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false + id "com.android.application" version '8.10.0' apply false id "org.jetbrains.kotlin.android" version "1.8.22" apply false } diff --git a/packages/opencv_dart/src/CMakeLists.txt b/packages/opencv_dart/src/CMakeLists.txt index caa55480..3d3a1e5a 100644 --- a/packages/opencv_dart/src/CMakeLists.txt +++ b/packages/opencv_dart/src/CMakeLists.txt @@ -34,19 +34,39 @@ if(ANDROID AND(DEFINED ANDROID_ABI)) endif() endif() -set(DARTCV_WITH_CALIB3D ON CACHE BOOL "Enable OpenCV calib3d module" FORCE) -set(DARTCV_WITH_CONTRIB ON CACHE BOOL "Enable OpenCV contrib module" FORCE) -set(DARTCV_WITH_DNN ON CACHE BOOL "Enable OpenCV dnn module" FORCE) -set(DARTCV_WITH_FEATURE2D ON CACHE BOOL "Enable OpenCV feature2d module" FORCE) -set(DARTCV_WITH_HIGHGUI OFF CACHE BOOL "Enable OpenCV highgui module" FORCE) -set(DARTCV_WITH_IMGPROC ON CACHE BOOL "Enable OpenCV imgproc module" FORCE) -set(DARTCV_WITH_OBJDETECT ON CACHE BOOL "Enable OpenCV objdetect module" FORCE) -set(DARTCV_WITH_PHOTO ON CACHE BOOL "Enable OpenCV photo module" FORCE) -set(DARTCV_WITH_STITCHING ON CACHE BOOL "Enable OpenCV stitching module" FORCE) -set(DARTCV_WITH_VIDEO ON CACHE BOOL "Enable OpenCV video module") -set(DARTCV_WITH_VIDEOIO ON CACHE BOOL "Enable OpenCV videoio module" FORCE) -set(DARTCV_WITH_GAPI OFF CACHE BOOL "Enable OpenCV gapi module" FORCE) -set(DARTCV_WORLD OFF CACHE BOOL "Enable OpenCV world module" FORCE) +# Generate module config from pubspec.yaml using Dart script +find_program(DART_EXECUTABLE dart) +if(NOT DART_EXECUTABLE) + message(FATAL_ERROR "Dart SDK not found! Please install Dart to build this package.") +endif() + +set(DARTCV_MODULES_CMAKE "${CMAKE_BINARY_DIR}/dartcv_modules.cmake") +execute_process( + COMMAND ${DART_EXECUTABLE} ${CMAKE_SOURCE_DIR}/bin/generate_dartcv_cmake.dart --stdout + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_FILE ${DARTCV_MODULES_CMAKE} + ERROR_QUIET +) + +if(EXISTS "${DARTCV_MODULES_CMAKE}") + message(STATUS "Including generated dartcv_modules.cmake from build directory") + include("${DARTCV_MODULES_CMAKE}") +else() + message(STATUS "No dartcv_modules.cmake found, using default module settings.") + set(DARTCV_WITH_CALIB3D ON CACHE BOOL "Enable OpenCV calib3d module" FORCE) + set(DARTCV_WITH_CONTRIB ON CACHE BOOL "Enable OpenCV contrib module" FORCE) + set(DARTCV_WITH_DNN ON CACHE BOOL "Enable OpenCV dnn module" FORCE) + set(DARTCV_WITH_FEATURE2D ON CACHE BOOL "Enable OpenCV feature2d module" FORCE) + set(DARTCV_WITH_HIGHGUI OFF CACHE BOOL "Enable OpenCV highgui module" FORCE) + set(DARTCV_WITH_IMGPROC ON CACHE BOOL "Enable OpenCV imgproc module" FORCE) + set(DARTCV_WITH_OBJDETECT ON CACHE BOOL "Enable OpenCV objdetect module" FORCE) + set(DARTCV_WITH_PHOTO ON CACHE BOOL "Enable OpenCV photo module" FORCE) + set(DARTCV_WITH_STITCHING ON CACHE BOOL "Enable OpenCV stitching module" FORCE) + set(DARTCV_WITH_VIDEO ON CACHE BOOL "Enable OpenCV video module" FORCE) + set(DARTCV_WITH_VIDEOIO ON CACHE BOOL "Enable OpenCV videoio module" FORCE) + set(DARTCV_WITH_GAPI OFF CACHE BOOL "Enable OpenCV gapi module" FORCE) + set(DARTCV_WORLD OFF CACHE BOOL "Enable OpenCV world module" FORCE) +endif() set(OPENCV_VERSION "${_version_opencv}") set(DARTCV_DISABLE_DOWNLOAD_OPENCV OFF)