244 lines
11 KiB
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 )
|