【OpenCV】编译OpenCV时,FFmpeg或ippicv下载不成功的解决方案,以及其它可能下载不成功问题的解决方案


直接点击加入 OpenCV QQ 群 61341323

测试使用的 OpenCV 版本
需要用到的文件:链接: 提取码: 5286

不能成功下载的其它文件

如果有使用 opencv_contrib 可能会出现某些文件下载不成功的问题,目前发现的有以下格式的文件:

  • wechat_qrcode 模块
    • detect.caffemodel
    • detect.prototxt
    • sr.caffemodel
    • sr.prototxt
  • xfeatures2d 模块
    • boostdesc_*
    • vgg_generated_*
  • face 模块
    • face_landmark_model.dat

这个问题很好解决,如果能够看懂 ${OpenCV_BINARY_DIR}/CMakeDownloadLog.txt 中的内容,可以根据里面的内容进行操作。看不懂的话就直接复制上面链接中下载下来的 opencv 文件夹到 ${OpenCV_BINARY_DIR} 即可。

不能成功下载 FFmpeg 或 IPPICV

当前的 OpenCV 版本在 CMake 中 Configure 的时候虽然不会再阻塞在下载部分,也不会再导致项目不能生成,但 CMake 还是会提示这两个库没有成功下载,这个需要自己在输出部分查看,如下图:
ffmpeg
ippicv

下面是解决步骤

首先前往GitHub下载相应的库。

链接:opencv/opencv_3rdparty
建议不要 clone 整个仓库,貌似比较大且慢。

具体用哪一分支可用根据 cmake 文件进行获取。

  1. FFmpeg 对应的位置在 path to opencv/3rdparty/ffmpeg/ffmpeg.cmake

    在第 1 行可以找到所需要下载的分支名,即 Binaries branch name: ffmpeg/master_20200908
    在第 3 行可以找到对应提交记录的哈希值,即 6152e132572dfdaa32887eabeb7199bef49b14dc

    这里直接给出 GitHub 链接 ffmpeg/master_20200908 可以直接进行下载。也可以 clone 整个仓库后进行分支切换(不建议)

  2. ippicv 对应的位置在 path to opencv/3rdparty/ippicv/ippicv.cmake

    在第 26 行可以找到所需要下载的分支名(这里以 win64 为例)。可以通过 OPENCV_ICV_NAME 变量的定义 来获取,如:set(OPENCV_ICV_NAME “ippicv_2020_win_intel64_20191018_general.zip”),其中的时间为 20191018,那么选对应的分支即可。
    在第 5 行可以找到对应提交记录的哈希值,即 a56b6ac6f030c312b2dce17430eef13aed9af274

    这里直接给出 GitHub 链接 ippicv/master_20191018 可以直接进行下载。也可以 clone 整个仓库后进行分支切换(不建议)

复制库文件

  1. ffmpeg 目录中的 ffmpeg_version.cmake opencv_videoio_ffmpeg.dll opencv_videoio_ffmpeg_64.dll 三项复制到 ${OpenCV_BINARY_DIR}\opencv\3rdparty\ffmpeg 目录下。
  2. ippicv_win 文件夹复制到 ${OpenCV_BINARY_DIR}\opencv\3rdparty\ippicv 目录下,ippicv 目录可能不存在,自己创建即可。ippicv_win 根据系统不同,可能为其它的名称,都在前面步骤中下载的文件中,解压即可。

修改 cmake 文件

在这里插入图片描述
在 CMake 中重新 Configure 即可。


以下是原文部分,请根据自己使用的 OpenCV 版本酌情参考。
以下是原文部分,请根据自己使用的 OpenCV 版本酌情参考。
以下是原文部分,请根据自己使用的 OpenCV 版本酌情参考。

在自己编译OpenCV时,因为种种原因可能会导致FFmpeg或ippicv下载不成功的问题,可以通过手动配置来解决这类问题,当然也可以直接配置之后再编译。

在进行配置之前,首先前往GitHub下载相应的库。

链接:opencv/opencv_3rdparty

这里写图片描述

链接打开之后页面内容大致如上图所示,图中圈出了ffmpeg和iipicv的不同版本,具体用哪一版就各取所需吧。明确版本之后点击相应的链接进入下载。

下载完成之后解压,位置不重要。
这里写图片描述

到此,准备完毕。

FFmpeg的配置

  1. 将*"…\opencv_3rdparty-ffmpeg-master_20160715\ffmpeg"* 目录中的 ffmpeg_version.cmakeopencv_ffmpeg.dllopencv_ffmpeg_64.dll 三项复制到 “path to your OpenCV\opencv\sources\3rdparty\ffmpeg” 目录下。
    这里写图片描述
    将上图中的三项复制到下图的目录中
    这里写图片描述

  2. 编辑 ffmpeg.cmake
    “path to your OpenCV\opencv\sources\3rdparty\ffmpeg” 中打开文件 ffmpeg.cmake ,将其内容修改为:

message(STATUS "FFMPEG: Package successfully downloaded")
include(${CMAKE_CURRENT_LIST_DIR}/ffmpeg_version.cmake)

保存内容。

到此,ffmpeg配置完毕。

ippicv的配置

  1. 在前面下载解压的目录*"…\opencv_3rdparty-ippicv-master_20151201\ippicv"* 中将ippicv_windows_20151201.zip 解压到当前目录。
    这里写图片描述
    “path to your OpenCV \opencv\sources\3rdparty\ippicv” 中创建文件夹unpack,将解压得到的ippicv_win 复制到新创建的unpack 中。
    这里写图片描述

  2. 编辑 downloader.cmake
    downloader.cmake 的内容修改为:

#
# The script downloads ICV package
#
# On return this will define:
# OPENCV_ICV_PATH - path to unpacked downloaded package
#

function(_icv_downloader)
  # Commit SHA in the opencv_3rdparty repo
  set(IPPICV_BINARIES_COMMIT "81a676001ca8075ada498583e4166079e5744668")
  # Define actual ICV versions
  if(APPLE)
    set(OPENCV_ICV_PACKAGE_NAME "ippicv_macosx_20151201.tgz")
    set(OPENCV_ICV_PACKAGE_HASH "4ff1fde9a7cfdfe7250bfcd8334e0f2f")
    set(OPENCV_ICV_PLATFORM "macosx")
    set(OPENCV_ICV_PACKAGE_SUBDIR "/ippicv_osx")
  elseif(UNIX)
    if(ANDROID AND NOT (ANDROID_ABI STREQUAL x86 OR ANDROID_ABI STREQUAL x86_64))
      return()
    endif()
    set(OPENCV_ICV_PACKAGE_NAME "ippicv_linux_20151201.tgz")
    set(OPENCV_ICV_PACKAGE_HASH "808b791a6eac9ed78d32a7666804320e")
    set(OPENCV_ICV_PLATFORM "linux")
    set(OPENCV_ICV_PACKAGE_SUBDIR "/ippicv_lnx")
  elseif(WIN32 AND NOT ARM)
    set(OPENCV_ICV_PACKAGE_NAME "ippicv_windows_20151201.zip")
    set(OPENCV_ICV_PACKAGE_HASH "04e81ce5d0e329c3fbc606ae32cad44d")
    set(OPENCV_ICV_PLATFORM "windows")
    set(OPENCV_ICV_PACKAGE_SUBDIR "/ippicv_win")
  else()
    return() # Not supported
  endif()

  set(OPENCV_ICV_UNPACK_PATH "${CMAKE_CURRENT_LIST_DIR}/unpack")
  set(OPENCV_ICV_PATH "${OPENCV_ICV_UNPACK_PATH}${OPENCV_ICV_PACKAGE_SUBDIR}")

  message(STATUS "ICV: Package successfully downloaded")
  set(OPENCV_ICV_PATH "${OPENCV_ICV_PATH}" PARENT_SCOPE)
endfunction()

_icv_downloader()

保存内容。
到此,ippicv配置完毕。

开始快乐的编译OpenCV吧!

  • 43
    点赞
  • 186
    收藏
    觉得还不错? 一键收藏
  • 58
    评论
评论 58
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值