【问题标题】:VideoCapture Does Not Work in AnacondaVideoCapture 在 Anaconda 中不起作用
【发布时间】:2015-05-28 18:23:44
【问题描述】:

我使用的是 ubuntu 14.04,并且安装了 anaconda python。我使用 conda install opencv 和 conda install cv2 来安装 opencv。但是我根本无法使用 VideoCapture(我需要逐帧处理视频)。我需要在项目的其余部分使用 anaconda。

这是我的代码:

import cv2
import os
capture = cv2.VideoCapture('/home/Downloads/data/zfH2XdRcH14.mp4')
while not capture.isOpened():
    print 'noob'
while True:
    ret, frame = capture.read()
    cv2.imwrite('~/Downloads/data/pic.png',frame)
    cv2.imshow('Video', frame)
    count += 1
    print count

代码不断打印菜鸟。我已经多次检查位置,它是正确的。我不知道问题是什么,我已经坚持了好几个小时。

【问题讨论】:

  • 我对 python 的工作方式没有信心,但我认为你应该在路径字符串中添加“//”。
  • 将 C:\OpenCV\3rdparty\ffmpeg\ 添加到 Windows PATH 环境变量或将 opencv_ffmpeg.dll 从该目录复制到 C:\Python27\ 或 PATH 中的目录。或者,使用来自lfd.uci.edu/~gohlke/pythonlibs/#opencv 的 OpenCV 二进制文件。
  • 我终于改用scikit-video :)
  • 更新:opencv-python 3.4.0.12 已经支持视频相关功能,所以我们可以正常使用 pip install opencv-python 。 .只需“pip install opencv-python”就可以了:)
  • 是的 pip install opencv-python 也为我工作。

标签: python opencv anaconda


【解决方案1】:

默认 conda 通道中不存在 ffmpeg。

您需要从 conda-forge 频道下载 opencv,其中包含用于视频处理的最新和附加软件包和依赖项。请尝试以下操作:

conda install -c conda-forge ffmpeg
conda install -c conda-forge opencv

这里 -c 告诉你使用哪个频道。在我们的例子中,我们需要“conda-forge”。

【讨论】:

    【解决方案2】:

    我找到了另一种让视频编写器工作的方法。我实际上在我的计算机上安装了 ImageMagik,然后我将动画路径设置为我安装 ImageMagik 的位置。我想知道ffmpeg是否可以这样做?

    plt.rcParams["animation.convert_path"] = "C:\ProgramFiles\ImageMagick\magick.exe"
    #Here I am loading a matplotlib.plot as the animation, so it could be different than for you, but the point is that by specifying the path to imagemagik I was able to write a video to a file.
    anim = animation.FuncAnimation(fig, animate, frames=len(mylist), init_func=init, interval=300, blit=True)
    anim.save('output.gif', dpi=80, writer='imagemagik')
    

    【讨论】:

      【解决方案3】:

      使用 conda-recipes 安装 ffmpeg。

      git clone https://github.com/conda/conda-recipes.git

      cd conda-recipes

      conda build x264

      conda build ffmpeg

      另见here。

      【讨论】:

        【解决方案4】:

        【讨论】:

        • 2018 年更新:opencv-python 3.4.0.12 已支持视频相关功能,因此我们可以正常使用 pip install opencv-python。 .只需“pip install opencv-python”就可以了:)
        【解决方案5】:

        我遇到了同样的问题,在互联网上查看后,我找到了一个可行的解决方案。在具有管理员权限的命令行中:

        conda install conda-build
        conda install cmake
        conda config --add channels menpo
        

        编辑以下文件:

        C:\Program Files\Anaconda2\pkgs\cmake-3.6.3-vc9_0\info\recipe\buil.sh

        添加以下标志:

        -DWITH_FFMPEG = 1

        以我为例:

        #!/bin/bash
        
        LDFLAGS=$LDFLAGS" -Wl,-rpath,$PREFIX/lib" \
          ./bootstrap \
                     --verbose \
                     --prefix="${PREFIX}" \
                     --system-libs \
                     --no-qt-gui \
                     --no-system-libarchive \
                     --no-system-jsoncpp \
                     -- \
                     -DWITH_FFMPEG = 1 \
                     -DCMAKE_BUILD_TYPE:STRING=Release \
                     -DCMAKE_FIND_ROOT_PATH="${PREFIX}"
        
        make
        make install
        

        最后:

        conda build /conda
        

        它对我有用。

        另一方面,我之前已将 opencv_ffmpegxyz.dll 文件从 \opencv\build\bin 复制到 \Program Files\Anaconda2;在我的情况下 opencv_ffmpe320_64.dll (64位版本),我添加了一个新的 名为 ffmpeg 的环境变量,包含 opencv_ffmpeg.dll 文件所在的路径。

        问候。

        【讨论】:

        • 为什么在我的 opencv 包中找不到 opencv_ffmpeg*.dll 文件。我正在使用 anaconda。
        • 我之前下载了 opencv 并将其解压缩/安装在 \opencv\ 文件夹中。在 \opencv\build\bin 文件夹中,我有两个文件: opencv_ffmpeg320*.dll
        • 当然 .DLL 文件在 Windows 上。按照这个链接访问 Ubuntu Compile opencv with ffmpeg for Ubuntu/Debian
        【解决方案6】:

        我相信我遇到了同样的问题。我通过将lib 文件夹添加到PATH 来修复它。例如,

        export PATH="/home/iori/anaconda3/bin:$PATH"
        export PATH="/home/iori/anaconda3/lib:$PATH"
        

        我的.bachrc 现在有了第二行。第一行由 anaconda 添加,source activate 命令切换此 bin 文件夹,但我认为它不会处理 lib 文件夹,我觉得这很烦人,因为这意味着 opencv 无法在其中找到 lib_opencv_*.so 文件当然 cv2.VideoCapture 失败。

        以上示例将解决默认 conda env 的问题。对于其他环境,我仍然需要手动将lib 文件夹添加到PATH。所以,我想知道如何自定义source activate 命令为我自动执行此操作...

        【讨论】:

        • 你可能只是部分正确。使用VideoCapture 需要另一个默认未构建的依赖项,即ffmpeg,这是一个支持视频读写的库。即使在 Windows 中,也应该手动将与源文件一起提供的 opencv_ffmpeg.dll 复制到 Python 目录或 $PATH 中包含的另一个目录中。没有为 Linux 提供等效的libopencv_ffmpeg.so,并且必须在启用 FFMpeg 的情况下从头开始构建整个 OpenCV。这不是为 Python 的 Anaconda OpenCV 包完成的。因此VideoCapture 失败
        • 是的。但是你可以通过 binstar 包(opencv 和 opencv3 的menpo)绕过它。 stackoverflow.com/a/27650299/566035
        • @SomethingSomething,您的解释完全有道理。有关解决 anaconda 问题的链接的任何建议?我尝试了几个链接,但不幸的是它们不起作用。
        • 我终于改用scikit-video :)
        【解决方案7】:

        我遇到了同样的问题。 VideoCapture 不适用于 Conda 的默认 OpenCV 版本,因为未启用 ffmpeg。为了让 VideoCapture 工作,您必须在 Cmake GUI 中启用 ffmpeg 并进行编译。您还可以安装我的启用了 ffmpeg 的 OpenCV 版本:

        conda install -c https://conda.binstar.org/jaimeivancervantes opencv

        【讨论】:

        • 我尝试了上面列出的 jaimeivancervantes 版本。我发现它在 PyCharm IDE 中效果不佳。当我尝试使用 cv2.imshow() 时,它会给我一个错误,说它需要用 GTK+ gui 库重新编译。我目前正在使用 Ubuntu 14.04、anaconda 2.7、PyCharm 5.0。 conda.binstar.org/menpo 版本的 opencv 在 PyCharm 中适用于图像,但似乎也不适用于 ffmpeg...我现在正在寻找一个既可以使用 ffmpeg 编译又可以在 PyCharm IDE 中使用的版本。
        • @PhilGlau 你可以尝试自己编译,真的没那么难。您只需要打开 cmake 并确保启用了 ffmpeg。我花了不到一个小时。
        • @Jaime Ivan Cervantes,嗨,我的 conda list | grep opencv 显示 opencv 2.4.10 np110py27_1 。我了解 anaconda2 的 opencv 只是我的 CentOS 的 opencv 的 python 包装器。你的意思是我必须在启用 ffmpeg 的情况下重新编译我的 CentOS opencv?
        • 我现在正在尝试重新编译启用 FFMPEG 的 Opencv2.4.10。我在 cmake 命令中添加了 -D WITH_FFMPEG 但它不明白.. 我该如何继续?
        猜你喜欢
        • 2012-07-11
        • 1970-01-01
        • 2021-03-08
        • 2015-11-24
        • 1970-01-01
        • 2018-08-23
        • 2012-07-26
        相关资源
        最近更新 更多