cmake_template/cmake/find_opencv.cmake

244 lines
11 KiB
CMake

###
# 配置并下载opencv进行编译
###
set(ENV{http_proxy} "http://127.0.0.1:1080")
set(ENV{https_proxy} "http://127.0.0.1:1080")
function(auto_download_opencv_contrib opencv_contrib_path module_path)
set(cache_path ${CMAKE_CURRENT_BINARY_DIR}/.cache)
if (EXISTS ${cache_path}/opencv_contrib.zip)
message(STATUS "opencv_contrib.zip exists, skip download")
else()
message(STATUS "opencv_contrib.zip not exists, download it")
message(STATUS "opencv_contrib_path not exists, download it")
# https://github.com/opencv/opencv_contrib/archive/refs/tags/4.8.0.zip v4.8.0
set(opencv_contrib_url "https://github.com/opencv/opencv_contrib/archive/refs/tags/4.8.0.zip")
file(DOWNLOAD ${opencv_contrib_url} ${cache_path}/opencv_contrib.zip SHOW_PROGRESS LOG ${cache_path}/opencv_contrib.log)
endif()
if (EXISTS ${cache_path}/opencv_contrib-4.8.0/modules)
message(STATUS "opencv_contrib_path exists, skip unzip")
else()
message(STATUS "opencv_contrib_path not exists, unzip it")
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf ${cache_path}/opencv_contrib.zip WORKING_DIRECTORY ${cache_path})
endif()
if(NOT EXISTS ${cache_path}/opencv_contrib-4.8.0/modules)
message(FATAL_ERROR "opencv_contrib install faild")
endif()
set(${opencv_contrib_path} ${cache_path}/opencv_contrib-4.8.0 PARENT_SCOPE)
set(${module_path} ${cache_path}/opencv_contrib-4.8.0/modules PARENT_SCOPE)
endfunction(auto_download_opencv_contrib)
function(auto_download_opencv opencv_path)
set(cache_path ${CMAKE_CURRENT_BINARY_DIR}/.cache)
if (EXISTS ${cache_path}/opencv.zip)
message(STATUS "opencv.zip exists, skip download")
else()
message(STATUS "opencv.zip not exists, download it")
# https://github.com/opencv/opencv/archive/refs/tags/4.8.0.zip v4.8.0
set(opencv_url "https://github.com/opencv/opencv/archive/refs/tags/4.8.0.zip")
file(DOWNLOAD ${opencv_url} ${cache_path}/opencv.zip SHOW_PROGRESS LOG ${cache_path}/opencv.log)
endif()
if (EXISTS ${cache_path}/opencv-4.8.0/modules)
message(STATUS "opencv_path exists, skip unzip")
else()
message(STATUS "opencv_path not exists, unzip it")
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf ${cache_path}/opencv.zip WORKING_DIRECTORY ${cache_path})
endif()
if(NOT EXISTS ${cache_path}/opencv-4.8.0/modules)
message(FATAL_ERROR "opencv install faild")
endif()
set(${opencv_path} ${cache_path}/opencv-4.8.0 PARENT_SCOPE)
endfunction(auto_download_opencv)
function(build_opencv_and_contrib opencv_path opencv_contrib_modules_path)
if(NOT EXISTS ${opencv_path})
message(FATAL_ERROR "opencv_path not exists :${opencv_path}")
endif()
if(NOT EXISTS ${opencv_contrib_modules_path})
message(FATAL_ERROR "opencv_contrib_modules_path not exists :${opencv_contrib_modules_path}")
endif()
#if(EXISTS ${opencv_path}/build/install)
# message(STATUS "opencv already builded")
# return()
#endif()
set(BUILD_IPP_IW ON)
set(BUILD_ITT ON)
set(BUILD_JAVA OFF)
set(BUILD_PERF_TESTS OFF)
set(BUILD_SHARED_LIBS ON)
set(BUILD_TBB OFF)
set(BUILD_TESTS OFF)
set(BUILD_PYTHON OFF)
set(BUILD_EXAMPLES OFF)
set(BUILD_opencv_apps OFF)
set(BUILD_opencv_aruco OFF)
set(BUILD_opencv_bgsegm OFF)
set(BUILD_opencv_bioinspired OFF)
set(BUILD_opencv_calib3d ON)
set(BUILD_opencv ccalib OFF)
set(BUILD_opencv_core ON)
set(BUILD_opencv_datasets OFF)
set(BUILD_opencv_dnn OFF)
set(BUILD_opencv_dnn_objdetect OFF)
set(BUILD_opencv_dnn_superres OFF)
set(BUILD_opencv_dpm OFF)
set(BUILD_opencv_face OFF)
set(BUILD_opencv_features2d ON)
set(BUILD_opencv_flann ON)
set(BUILD_opencv_fuzzy OFF)
set(BUILD_opencv_gapi OFF)
set(BUILD_opencv_hfs OFF)
set(BUILD_opencv_highgui OFF)
set(BUILD_opencv_img_hash OFF)
set(BUILD_opencv_imgcodecs ON)
set(BUILD_opencv_imgproc ON)
set(BUILD_opencv_intensity_transform OFF)
set(BUILD_opencv java_bindings_generator OFF)
set(BUILD_opencv_js OFF)
set(BUILD_opencv js_bindings_generator OFF)
set(BUILD_opencv_line_descriptor OFF)
set(BUILD_opencv_mcc OFF)
set(BUILD_opencv_ml OFF)
set(BUILD_opencv_objc_bindings_generator OFF)
set(BUILD_opencv_objdetect OFF)
set(BUILD_opencv_optflow OFF)
set(BUILD_opencv_phase_unwrapping OFF)
set(BUILD_opencv_photo OFF)
set(BUILD_opencv_plot ON)
set(BUILD_opencv_python_bindings_generator OFF)
set(BUILD_opencv_python_tests OFF)
set(BUILD_opencv_quality OFF)
set(BUILD_opencv_rapid OFF)
set(BUILD_opencv_reg OFF)
set(BUILD_opencv_rgbd OFF)
set(BUILD_opencv_saliency OFF)
set(BUILD_opencv_shape OFF)
set(BUILD_opencv_stereo OFF)
set(BUILD_opencv_stitching OFF)
set(BUILD_opencv_structured_light OFF)
set(BUILD_opencv_superres OFF)
set(BUILD_opencv_surface_matching OFF)
set(BUILD_opencv_text OFF)
set(BUILD_opencv_tracking ON)
set(BUILD_opencv_ts OFF)
set(BUILD_opencv_video ON)
set(BUILD_opencv_videoio ON)
set(BUILD_opencv_videostab OFF)
set(BUILD_opencv_wechat_qrcode OFF)
set(BUILD_opencv_world OFF)
set(BUILD_opencv_xfeatures2d ON)
set(BUILD_opencv_ximgproc OFF)
set(BUILD_opencv_xobjdetect OFF)
set(BUILD_opencv_xphoto OFF)
set(OPENCV_ENABLE_NOFREE ON)
set(OPENCV_EXTRA_MODULES_PATH ${opencv_contrib_modules_path})
set(CMAKE_INSTALL_PREFIX ${opencv_path}/build/install)
set(OpenCV_DIR ${opencv_path}/build/install)
# 编译opencv
message(STATUS "build opencv")
message(STATUS "CMAKE_INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX}")
include(ExternalProject)
ExternalProject_Add(opencv
PREFIX ${opencv_path}/build
SOURCE_DIR ${opencv_path}
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
-DBUILD_IPP_IW=${BUILD_IPP_IW}
-DBUILD_ITT=${BUILD_ITT}
-DBUILD_JAVA=${BUILD_JAVA}
-DBUILD_PERF_TESTS=${BUILD_PERF_TESTS}
-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
-DBUILD_TBB=${BUILD_TBB}
-DBUILD_TESTS=${BUILD_TESTS}
-DBUILD_PYTHON=${BUILD_PYTHON}
-DBUILD_EXAMPLES=${BUILD_EXAMPLES}
-DBUILD_opencv_apps=${BUILD_opencv_apps}
-DBUILD_opencv_aruco=${BUILD_opencv_aruco}
-DBUILD_opencv_bgsegm=${BUILD_opencv_bgsegm}
-DBUILD_opencv_bioinspired=${BUILD_opencv_bioinspired}
-DBUILD_opencv_calib3d=${BUILD_opencv_calib3d}
-DBUILD_opencv_ccalib=${BUILD_opencv_ccalib}
-DBUILD_opencv_core=${BUILD_opencv_core}
-DBUILD_opencv_datasets=${BUILD_opencv_datasets}
-DBUILD_opencv_dnn=${BUILD_opencv_dnn}
-DBUILD_opencv_dnn_objdetect=${BUILD_opencv_dnn_objdetect}
-DBUILD_opencv_dnn_superres=${BUILD_opencv_dnn_superres}
-DBUILD_opencv_dpm=${BUILD_opencv_dpm}
-DBUILD_opencv_face=${BUILD_opencv_face}
-DBUILD_opencv_features2d=${BUILD_opencv_features2d}
-DBUILD_opencv_flann=${BUILD_opencv_flann}
-DBUILD_opencv_fuzzy=${BUILD_opencv_fuzzy}
-DBUILD_opencv_gapi=${BUILD_opencv_gapi}
-DBUILD_opencv_hfs=${BUILD_opencv_hfs}
-DBUILD_opencv_highgui=${BUILD_opencv_highgui}
-DBUILD_opencv_img_hash=${BUILD_opencv_img_hash}
-DBUILD_opencv_imgcodecs=${BUILD_opencv_imgcodecs}
-DBUILD_opencv_imgproc=${BUILD_opencv_imgproc}
-DBUILD_opencv_intensity_transform=${BUILD_opencv_intensity_transform}
-DBUILD_opencv_java_bindings_generator=${BUILD_opencv_java_bindings_generator}
-DBUILD_opencv_js=${BUILD_opencv_js}
-DBUILD_opencv_js_bindings_generator=${BUILD_opencv_js_bindings_generator}
-DBUILD_opencv_line_descriptor=${BUILD_opencv_line_descriptor}
-DBUILD_opencv_mcc=${BUILD_opencv_mcc}
-DBUILD_opencv_ml=${BUILD_opencv_ml}
-DBUILD_opencv_objc_bindings_generator=${BUILD_opencv_objc_bindings_generator}
-DBUILD_opencv_objdetect=${BUILD_opencv_objdetect}
-DBUILD_opencv_optflow=${BUILD_opencv_optflow}
-DBUILD_opencv_phase_unwrapping=${BUILD_opencv_phase_unwrapping}
-DBUILD_opencv_photo=${BUILD_opencv_photo}
-DBUILD_opencv_plot=${BUILD_opencv_plot}
-DBUILD_opencv_python_bindings_generator=${BUILD_opencv_python_bindings_generator}
-DBUILD_opencv_python_tests=${BUILD_opencv_python_tests}
-DBUILD_opencv_quality=${BUILD_opencv_quality}
-DBUILD_opencv_rapid=${BUILD_opencv_rapid}
-DBUILD_opencv_reg=${BUILD_opencv_reg}
-DBUILD_opencv_rgbd=${BUILD_opencv_rgbd}
-DBUILD_opencv_saliency=${BUILD_opencv_saliency}
-DBUILD_opencv_shape=${BUILD_opencv_shape}
-DBUILD_opencv_stereo=${BUILD_opencv_stereo}
-DBUILD_opencv_stitching=${BUILD_opencv_stitching}
-DBUILD_opencv_structured_light=${BUILD_opencv_structured_light}
-DBUILD_opencv_superres=${BUILD_opencv_superres}
-DBUILD_opencv_surface_matching=${BUILD_opencv_surface_matching}
-DBUILD_opencv_text=${BUILD_opencv_text}
-DBUILD_opencv_tracking=${BUILD_opencv_tracking}
-DBUILD_opencv_ts=${BUILD_opencv_ts}
-DBUILD_opencv_video=${BUILD_opencv_video}
-DBUILD_opencv_videoio=${BUILD_opencv_videoio}
-DBUILD_opencv_videostab=${BUILD_opencv_videostab}
-DBUILD_opencv_wechat_qrcode=${BUILD_opencv_wechat_qrcode}
-DBUILD_opencv_world=${BUILD_opencv_world}
-DBUILD_opencv_xfeatures2d=${BUILD_opencv_xfeatures2d}
-DBUILD_opencv_ximgproc=${BUILD_opencv_ximgproc}
-DBUILD_opencv_xobjdetect=${BUILD_opencv_xobjdetect}
-DBUILD_opencv_xphoto=${BUILD_opencv_xphoto}
-DOPENCV_ENABLE_NONFREE=${OPENCV_ENABLE_NONFREE}
-DOPENCV_EXTRA_MODULES_PATH=${OPENCV_EXTRA_MODULES_PATH}
BUILD_ALWAYS 1
INSTALL_DIR ${CMAKE_INSTALL_PREFIX}
)
if (NOT EXISTS ${CMAKE_INSTALL_PREFIX}/lib)
message(STATUS "opencv build faild")
endif()
message(STATUS "build opencv done")
endfunction(build_opencv_and_contrib)
macro(auto_find_opencv is_static)
auto_download_opencv_contrib(opencv_contrib_path module_path)
message(STATUS "opencv_contrib_path: ${opencv_contrib_path}")
message(STATUS "module_path: ${module_path}")
auto_download_opencv(opencv_path)
message(STATUS "opencv_path: ${opencv_path}")
build_opencv_and_contrib(${opencv_path} ${module_path})
set(OpenCV_DIR ${opencv_path}/build/install)
find_package(OpenCV REQUIRED)
endmacro(auto_find_opencv )