☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython
一、引言
在CSDN的博文《构建VisualStudio2019+OpenCV4.3的C++ windows编译环境》中,老猿介绍了opencv版本的下载方法的方法,该方法下载OpenCV的代码不要上GitHub,国内可以直接访问,比较方便。
在linux安装OpenCV与上面博文不同的是版本选择必须选择linux版本,如图:
二、执行cmake时报ADE下载失败
opencv安装报下载后,进行文件解压,解压的opencv源码老猿机器上存放在目录/home/penCV/OpenCV430下,在其下建立build子目录后,进入该子目录执行cmake指令,在执行指令
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/opencv430 ..
时,虽然最终成功了,但执行过程中有如下信息:
-- ADE: Download: v0.1.1f.zip
-- Try 1 failed
--
=======================================================================
Couldn't connect to server from the Internet.
Perhaps direct connections are not allowed in the current network.
To use proxy please check/specify these environment variables:
- http_proxy/https_proxy
- and/or HTTP_PROXY/HTTPS_PROXY
=======================================================================
CMake Warning at cmake/OpenCVDownload.cmake:202 (message):
ADE: Download failed: 7;"Couldn't connect to server"
For details please refer to the download log file:
/home/openCV/OpenCV430/build/CMakeDownloadLog.txt
可见是ADE: Download失败了。ADE(Automatic Differentiation Engine)是OpenCV中的一个模块,用于自动计算图像处理算法的导数。它可以根据输入和输出之间的关系,自动计算算法的梯度,从而实现自动微分。在OpenCV的编译过程中,如果使用了gapi模块,会自动下载并编译ADE,以支持自动微分功能。
三、问题原因分析
根据报错信息,打开CMakeDownloadLog.txt文件,看到其内容如下:
#use_cache "/home/openCV/OpenCV430/.cache"
#do_unpack "v0.1.1f.zip" "b624b995ec9c439cbc2e9e6ee940d3a2" "https://github.com/opencv/ade/archive/v0.1.1f.zip" "/home/openCV/OpenCV430/build/3rdparty/ade"
#cmake_download "/home/openCV/OpenCV430/.cache/ade/b624b995ec9c439cbc2e9e6ee940d3a2-v0.1.1f.zip" "https://github.com/opencv/ade/archive/v0.1.1f.zip"
#try 1
从中可以看到cmake_download执行失败,这个指令的作用是下载ADE文件v0.1.1f.zip。具体来说,它会将第2个参数指定的URL链接的文件下载到第1个参数指定的本地路径中,其中“b624b995ec9c439cbc2e9e6ee940d3a2”为用于验证文件完整性的哈希值。当然不同OpenCV版本不能把这个文件路径、文件名和hash值会不同,大家比照本文的案例,从CMakeDownloadLog.txt文件获取得完整的路径和文件名。
经确认上述失败是因为在机器网络环境无法访问GitHub,导致无法下载https://github.com/opencv/ade/archive/v0.1.1f.zip
文件。如果网络没有限制,则不存在此问题。
四、问题解决
4.1、手工下载相关文件
为了解决此ADE下载问题,老猿找了网上的多个资料,最终确认在确认url的情况下可以通过《GitHub 文件加速》网站下载对应内容,通过该完整输入https://github.com/opencv/ade/archive/v0.1.1f.zip
(不同版本文件名不同)点击下载就可以下载到该文件。如图:
4.2、查找cmake与本下载相关的配置
但是文件下载后无法直接使用,用为cmake的配置没有修改,会导致cmake执行时还是按原来的模式执行,因此需要修改cmake的配置文件来确保无需下载该文件,并能利用本地文件完成相关工作。
为了查找这个文件,大家可以在OpenCV的安装目录下(含子目录)查找所有包含有“v0.1.1f.zip”文本的文件,可以用find或grep指令查找,老猿多了个懒,直接在vscode打开/home/OpenCV/OpenCV430文件夹,利用vscode左侧的查找按钮查找内容,如图:
可以看到这个文件名在两个文件中出现过,一个是CMakeDownloadLog.txt日志文件中,一个是/home/openCV/OpenCV430/modules/gapi/cmake/DownloadADE.cmake文件中,显然后者才是我们要找的文件。
双击上图左下部蓝框标记的查找到的文件内容,vscode自动打开文件并显示相关搜索到的内容,如图:
从图中可以看出,/home/openCV/OpenCV430/modules/gapi/cmake/DownloadADE.cmake文件中使用ocv_download去GitHub上执行了下载文件"v0.1.1f.zip"的操作,并在下载后进行了文件解压。
具体实现是用指令来执行的:
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)
ocv_download是一个CMake命令,用于下载OpenCV的附加模块。ocv_download有多个参数:
- FILENAME a d e f i l e n a m e :指定要下载的文件的名称。 {ade_filename}:指定要下载的文件的名称。 adefilename:指定要下载的文件的名称。{ade_filename}是一个变量,它包含了文件的名称
- HASH a d e m d 5 :指定文件的哈希值。 {ade_md5}:指定文件的哈希值。 ademd5:指定文件的哈希值。{ade_md5}是一个变量,它包含了文件的MD5哈希值,用于验证文件内容的完整性
- URL “ O P E N C V A D E U R L " " {OPENCV_ADE_URL}" " OPENCVADEURL""ENV{OPENCV_ADE_URL}” “https://github.com/opencv/ade/archive/”:指定文件的下载链接。这个参数可以有多个值,每个值都是一个下载链接。 O P E N C V A D E U R L 和 {OPENCV_ADE_URL}和 OPENCVADEURL和ENV{OPENCV_ADE_URL}都是变量,它们包含了下载链接的值
- DESTINATION_DIR a d e s r c d i r :指定文件的目标目录。 {ade_src_dir}:指定文件的目标目录。 adesrcdir:指定文件的目标目录。{ade_src_dir}是一个变量,它包含了目标目录的路径
- ID ADE:指定下载任务的ID。ADE是一个标识符,用于唯一标识这个下载任务
- STATUS res:指定下载任务的状态变量。${res}是一个变量,它用于存储下载任务的状态,为TRUE表示下载成功,FALSE下载失败
- UNPACK RELATIVE_URL:指定是否解压下载的文件。RELATIVE_URL是一个标识符,用于指示是否解压文件。
4.3、修改cmake配置
老猿下载的源文件放在了/home/openCV
目录下,我们要做的是将cmake从下载文件改为从本地路径获取该文件,为此需要修改cmake配置文件DownloadADE.cmake文件,在开始修改前请先做个文件备份。
具体修改内容是将原文件中如下这段内容:
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()
修改为:
get_filename_component(OpenCV_INSTALL_DIR "${OpenCV_BINARY_DIR}/../.." ABSOLUTE)
set(ADE_src_filename "${OpenCV_INSTALL_DIR}/ade-0.1.1f.zip")
set(ADE_dest_filename "${ade_src_dir}/ade-0.1.1f.zip")
execute_process(COMMAND mkdir ${ade_src_dir})
file(COPY ${ADE_src_filename} DESTINATION ${ade_src_dir})
execute_process(COMMAND unzip ${ADE_dest_filename} WORKING_DIRECTORY ${ade_src_dir})
上述替换的指令是建立对应ade的目录,将下载的压缩文件拷贝到该目录并解压。注意OpenCV版本不同,以及下载文件存放路径不同的话,对应配置需要进行相应调整。
4.4、清除build目录的内容
进入build目录,执行rm -r *删除build目录下的所有文件和目录,以便重新执行cmake操作。
4.5、重新执行cmake
经过以上调整,可以重新在build目录下执行:
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/opencv430 ..
就可以顺利执行了。
五、小结
本文介绍了在linux机器网络环境无法直接访问GitHub的情况下,怎么绕开GitHub下载OpenCV安装源文件包,以及opencv包构建过程中,cmake无法访问GitHub获取ADE组件的解决办法,经过这些调整,可以将OpenCV源代码下载后顺利执行cmake以生成makefile文件,为后续执行代码完整构建打下了基础。
不过离真正的完整构建还需要有段距离,我们将在后续博文中继续介绍。
写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
更多关于统信操作系统及opencv的介绍的内容请参考专栏《国产信创之光》的其他文章。
关于老猿的付费专栏
- 付费专栏《https://blog.csdn.net/laoyuanpython/category_9607725.html 使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,对应文章目录为《 https://blog.csdn.net/LaoYuanPython/article/details/107580932 使用PyQt开发图形界面Python应用专栏目录》;
- 付费专栏《https://blog.csdn.net/laoyuanpython/category_10232926.html moviepy音视频开发专栏 )详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/107574583 moviepy音视频开发专栏文章目录》;
- 付费专栏《https://blog.csdn.net/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》为《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的伴生专栏,是笔者对OpenCV-Python图形图像处理学习中遇到的一些问题个人感悟的整合,相关资料基本上都是老猿反复研究的成果,有助于OpenCV-Python初学者比较深入地理解OpenCV,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/109713407 OpenCV-Python初学者疑难问题集专栏目录 》
- 付费专栏《https://blog.csdn.net/laoyuanpython/category_10762553.html Python爬虫入门 》站在一个互联网前端开发小白的角度介绍爬虫开发应知应会内容,包括爬虫入门的基础知识,以及爬取CSDN文章信息、博主信息、给文章点赞、评论等实战内容。
前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。
对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.csdn.net/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。
如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。