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的可选值及意义