VideoCapture 在 Anaconda 中不起作用

Posted

技术标签:

【中文标题】VideoCapture 在 Anaconda 中不起作用【英文标题】:VideoCapture Does Not Work in 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 也为我工作。 【参考方案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】:

解决办法是用opencv编译ffmpeg。对于opencv3,参考 https://github.com/menpo/conda-opencv3

opencv2,参考 http://dhaneshr.net/2016/06/03/installing-opencv-2-4-x-with-ffmpeg-python-on-anaconda/

【讨论】:

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)绕过它。 ***.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 但它不明白.. 我该如何继续?

以上是关于VideoCapture 在 Anaconda 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 VideoCapture 在 OpenCV+Python 中读取或播放视频

在 open cv 中进行 videoCapture 后应用程序没有响应

无法在 Android 手机中使用 cv2.VideoCapture(0) 打开相机

OpenCV类VideoCapture构造函数中参数apiPreference的可选值及意义

cv2.videoCapture.release() 是啥意思?

VideoCapture 在 OpenCV 2.4.2 中不起作用