OpenCV 的 ADE 模块(Adaptive Distance Estimation)是一个用于进行自适应距离估计的工具,主要用于图像和视频分析中的深度感知任务。它可以帮助从图像中估算物体的距离,并对不同深度进行自适应处理,从而提升计算机视觉系统的准确性和鲁棒性。ADE 在多视角几何和深度学习应用中具有重要作用,用于提高三维重建和物体检测的精度。
Ubuntu24.04下编译opencv教程参考:
Ubuntu24.04+cmake+opencv源码编译配置_ubuntu opencv cmake-CSDN博客
报错内容:
CMake Error at modules/gapi/cmake/DownloadADE.cmake:23 (add_library):
No SOURCES given to target: ade
Call Stack (most recent call first):
modules/gapi/cmake/init.cmake:19 (include)
cmake/OpenCVModule.cmake:312 (include)
cmake/OpenCVModule.cmake:375 (_add_modules_1)
modules/CMakeLists.txt:7 (ocv_glob_modules)
或
-- ADE: Download: v0.1.1f.zip
CMake Error at cmake/OpenCVDownload.cmake:162 (file):
file DOWNLOAD cannot open file for write.
Call Stack (most recent call first):
modules/gapi/cmake/DownloadADE.cmake:7 (ocv_download)
modules/gapi/cmake/init.cmake:19 (include)
cmake/OpenCVModule.cmake:312 (include)
cmake/OpenCVModule.cmake:375 (_add_modules_1)
modules/CMakeLists.txt:7 (ocv_glob_modules)
找不到下载的目标或下载失败,
找到opencv目录下的modules/gapi/cmake/DownloadADE.cmake文件:
set(ade_src_dir "${OpenCV_BINARY_DIR}/3rdparty/ade") # ade库将被下载在此位置
set(ade_filename "v0.1.1f.zip") # 下载的文件名
set(ade_subdir "ade-0.1.1f") # ade库解压后所在的子目录名称(包含ade 库的源码)
set(ade_md5 "b624b995ec9c439cbc2e9e6ee940d3a2") # ade 库压缩文件的 MD5 校验和
# 调用下载函数下载ade,其中URL为下载地址
ocv_download(FILENAME ${ade_filename}
HASH ${ade_md5}
URL
"${OPENCV_ADE_URL}"
"$ENV{OPENCV_ADE_URL}"
"https://github.com/opencv/ade/archive/"
DESTINATION_DIR ${ade_src_dir}
ID ADE
STATUS res
UNPACK RELATIVE_URL)
if (NOT res)
return()
endif()
set(ADE_root "${ade_src_dir}/${ade_subdir}/sources/ade")
file(GLOB_RECURSE ADE_sources "${ADE_root}/source/*.cpp")
file(GLOB_RECURSE ADE_include "${ADE_root}/include/ade/*.hpp")
add_library(ade STATIC ${ADE_include} ${ADE_sources})
target_include_directories(ade PUBLIC $<BUILD_INTERFACE:${ADE_root}/include>)
set_target_properties(ade PROPERTIES POSITION_INDEPENDENT_CODE True)
if(NOT BUILD_SHARED_LIBS)
ocv_install_target(ade EXPORT OpenCVModules ARCHIVE DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT dev)
endif()
ocv_install_3rdparty_licenses(ade "${ade_src_dir}/${ade_subdir}/LICENSE")
复制代码中的下载地址,查看网页提示Not Found,下载地址已经失效了。
解决该问题有两个选择:
- 自行下载文件放入指定目录下,并修改DownloadADE.cmake文件中的文件名、MD5值
- 修改DownloadADE.cmake文件中的下载地址等各项内容
更建议自行下载,虽然修改配置文件体现出较好的可移植性,但是网络访问不稳定依然会导致下载失败,自行下载更加实用。
各个版本的ADE模块文件一般都可在https://github.com/opencv/ade/ 下找到,但是直接点击最深层的下载地址跳转(如:https://github.com/opencv/ade/releases/tag)有可能会出现Not Found的情况,实际上并不是地址已失效,只是访问失败了,这时可尝试一层一层慢慢找。
![](https://i-blog.csdnimg.cn/direct/7d3c863cf68949dc8783837d5f954b66.png)
解决方法1:自行下载
1、直接到可用的地址: https://github.com/opencv/ade/releases/tag 下载压缩包(.tar.gz和.zip都可),无需解压直接将压缩包放置在opencv目录下的/.cache/ade中,
2、打开终端命令行,使用命令查询压缩包的MD5值(注意将<>内容修改成自己的下载路径、文件名):
md5sum <path/to/file/.cache/ade/filename>
3、修改下载的压缩包文件名,在文件名前加上MD5值与"-"符号,例如将ade-0.1.1f.tar.gz改为07749ec1fb889049bd81518925efd224-ade-0.1.1f.tar.gz(可能需要su权限)
4、修改DownloadADE.cmake中的文件名、目录、MD5值,保存
再次cmake编译便不会报错
解决方法2:修改DownloadADE.cmake
将下载地址修改为可用的地址:
https://github.com/opencv/ade/releases/tag
同解决方法1一样修改DownloadADE.cmake文件中其他部分内容,示例:
set(ade_src_dir "${OpenCV_BINARY_DIR}/3rdparty/ade")
set(ade_filename "ade-0.1.1f.tar.gz") #按照下载内容修改文件名
set(ade_subdir "ade-0.1.1f")
set(ade_md5 "07749ec1fb889049bd81518925efd224") #修改为新下载的压缩包的MD5值
ocv_download(FILENAME ${ade_filename}
HASH ${ade_md5}
URL
"${OPENCV_ADE_URL}"
"$ENV{OPENCV_ADE_URL}"
"https://github.com/opencv/ade/releases/tag/"
DESTINATION_DIR ${ade_src_dir}
ID ADE
STATUS res
UNPACK RELATIVE_URL)
if (NOT res)
return()
endif()
set(ADE_root "${ade_src_dir}/${ade_subdir}/sources/ade")
file(GLOB_RECURSE ADE_sources "${ADE_root}/source/*.cpp")
file(GLOB_RECURSE ADE_include "${ADE_root}/include/ade/*.hpp")
add_library(ade STATIC ${ADE_include} ${ADE_sources})
target_include_directories(ade PUBLIC $<BUILD_INTERFACE:${ADE_root}/include>)
set_target_properties(ade PROPERTIES POSITION_INDEPENDENT_CODE True)
if(NOT BUILD_SHARED_LIBS)
ocv_install_target(ade EXPORT OpenCVModules ARCHIVE DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT dev)
endif()
ocv_install_3rdparty_licenses(ade "${ade_src_dir}/${ade_subdir}/LICENSE")
保存文件后再次cmake编译便不会报错
后续在make过程中可能会出现如下报错:
按照提示找到构建文件下的build/3rdparty/ade/ade-0.1.1f/sources/ade/include/ade/typed_graph.hpp,添加头文件#include <cstdint>即可