在CSDN的博文《构建VisualStudio2019+OpenCV4.3的C++ windows编译环境》中,老猿介绍了opencv版本的下载方法的方法,该方法下载OpenCV的代码不要上GitHub,国内可以直接访问,比较方便。
在linux安装OpenCV与上面博文不同的是版本选择必须选择linux版本,如图:
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
文件。如果网络没有限制,则不存在此问题。
为了解决此ADE下载问题,老猿找了网上的多个资料,最终确认在确认url的情况下可以通过《GitHub 文件加速》网站下载对应内容,通过该完整输入https://github.com/opencv/ade/archive/v0.1.1f.zip
(不同版本文件名不同)点击下载就可以下载到该文件。如图:
但是文件下载后无法直接使用,用为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有多个参数:
老猿下载的源文件放在了/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版本不同,以及下载文件存放路径不同的话,对应配置需要进行相应调整。
进入build目录,执行rm -r *删除build目录下的所有文件和目录,以便重新执行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的介绍的内容请参考专栏《国产信创之光》的其他文章。
前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。
对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.csdn.net/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。
如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。