python - 使用 ffmpeg 和 python 2.7 在 Fedora 26 25 24 23 或 22 上安装 OpenCV 2.4.13 或 3.x 时出现 VideoCapture 不工作错误

标签 python linux opencv computer-vision

当我使用 yum 时,它会安装 opencv 3.2.0。但我特别需要 opencv 2.4.13。

对于 Anaconda,有一个 conda-forge 的 opencv 包,但安装 cv2.VideoCapture() api 失败。

此外,当我尝试通过 opencv 2.4.13 的 tar 文件进行安装时,我卡在 cmake 中,出现以下错误 -

未找到 sys/videoio.h

找不到 libavcodec

........

此外,cmake 还出现了奇怪的脚本错误。 请帮忙。

最佳答案

Anaconda 没有使用 ffmpeg 编译的 opencv 2.4.13,所以如果你想使用 VideoCapture 则需要编译 opencv。 我遵循的步骤的描述性列表(严格针对 Fedora 用户):

删除之前的opencv

sudo yum remove opencv 

安装 Python 2.7

sudo yum install python2.7

*请使用您的 python 2.7 包名称。

ffmpeg的安装

从他们的站点下载 tarball 并解压缩。 https://www.ffmpeg.org/download.html

tar -xvf ffmpeg-3.3.0.tar.gz
cd ffmpeg-3.3.0
./configure --prefix=/usr/local --enable-gpl --enable-swscale --enable-shared --enable-postproc --enable-avfilter-lavf

*如果出现错误,请移除选项 --enable-avfilter-lavf。

sudo make
sudo make install  

安装OpenCV 2.4.13

以下软件包将解决 sys/videoio.h 错误:

sudo dnf install pjproject-devel.x86_64 2.4.5-8.fc26     ptlib-devel.x86_64 2.10.10-16.fc24     pjproject.x86_64 2.4.5-8.fc26     ptlib.x86_64 2.10.10-16.fc24

然后安装这些包:

sudo yum install libpng-devel libjpeg-turbo-devel jasper-devel openexr-devel libtiff-devel libwebp-devel libdc1394-devel libv4l-devel gstreamer-plugins-base-devel gtk2-devel tbb-devel eigen3-devel gstreamer1-libav gstreamer1-plugins-base-devel java-1.8.0-openjdk-devel.x86_64 python2-numpy.x86_64 ffmpeg-devel.x86_64 ffmpeg-libs.i686 ffmpeg.x86_64 libavdevice.i686 libpng-devel libjpeg-turbo-devel jasper-devel openexr-devel libtiff-devel libwebp-devel libdc1394-devel libv4l-devel gstreamer-plugins-base-devel gtk2-devel tbb-devel eigen3-devel gstreamer1-libav gstreamer1-plugins-base-devel gtk+extra-devel.x86_64 gtk+-devel.i686 cmake pkg-config libgtk libavcodec libavformat libswscale swig

下载您选择的 OpenCV,例如来自 github 的 2.4.13(从 Branch -> Tags -> 2.4.13 选择 2.4.13 然后选择从克隆下载):

https://github.com/opencv/opencv

http://opencv.org/releases.html

提取 tar :

tar -xvf opencv-2.4.13.3.tar.gz
cd opencv-2.4.13.3
mkdir build; cd build;

现在cmake:

sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local  -D WITH_FFMPEG=1  -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_QT=OFF -D WITH_V4L=OFF -D CMAKE_SHARED_LINKER_FLAGS=-Wl,-Bsymbolic -DLD_LIBRARY_PATH=/usr/local/lib/ -DPYTHON_INCLUDE_DIR=$(python -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") -DPYTHON_LIBRARY=$(python -c "import distutils.sysconfig as sysconfig; print(sysconfig.get_config_var('LIBDIR'))") -DCUDA_NVCC_FLAGS="-ccbin /home/rishabh/gcc-4.9.4-x86_64/bin/gcc" -D WITH_CUDA=OFF -D BUILD_opencv_gpu=OFF -D BUILD_opencv_gpuarithm=OFF -D BUILD_opencv_gpubgsegm=OFF -D BUILD_opencv_gpucodec=OFF -D BUILD_opencv_gpufeatures2d=OFF -D BUILD_opencv_gpufilters=OFF -D BUILD_opencv_gpuimgproc=OFF -D BUILD_opencv_gpulegacy=OFF -D BUILD_opencv_gpuoptflow=OFF -D BUILD_opencv_gpustereo=OFF -D BUILD_opencv_gpuwarping=OFF -D WITH_OPENCL=OFF ..

解释:

包含 'gpu' 文本的标志用于关闭 gpu 编译,如果你想用 gpu 编译然后将它们设置为 ON。但是 gpu 需要 cuda 包和显卡才能工作。

这个标志也可以忽略,因为我们不是用 gpu 编译的,但它也没有伤害我保留它。

-DCUDA_NVCC_FLAGS="-ccbin/home/rishabh/gcc-4.9.4-x86_64/bin/gcc"

如果您在 cmake 中遇到脚本错误,请执行以下操作-

打开文件 opencv-2.4.13.3/cmake/OpenCVPackaging.cmake

-- 添加这个

set(OPENCV_VCSVERSION "2.4.13.3")

-- 在这条线之上

set(CPACK_PACKAGE_VERSION "${OPENCV_VCSVERSION}")

在控制台上抛出的任何文件名中,注释掉阻止 cmake 且无用的相应行。

例如opencv-2.4.13.3/cmake/OpenCVDetectCXXCompiler.cmake

我对第 80-86 行有疑问,所以我将其注释掉,因为这些变量在其他地方没有做任何其他事情。

cmake成功后,进行make步骤-

sudo make 
sudo make install

如果您遇到任何链接器错误,那么如果您不打算安装这些模块,则必须安装相应的依赖项或将 cmake 标志设置为 OFF。

安装后步骤:

echo 'export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH' >> ~/.bashrc 
source ~/.bashrc

现在添加

/usr/local/lib/

以下文件:

/etc/ld.so.conf
/etc/ld.so.conf.d/opencv.conf

现在运行

sudo ldconfig

对于Anaconda PATH变量冲突

从 PATH 变量中删除 anaconda 路径并在 ~/.bashrc 中编辑

export PATH=/usr/lib64/qt-3.3/bin:/usr/lib64/ccache:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/opt/cuda/bin:/home/rishabh/.local/bin:/home/rishabh/bin:/opt/cuda/bin/

现在注销并登录到 fedora

执行下面的测试:

python
import cv2
cv2.__version__
video = cv2.VideoCapture("your small video.mp4")
okay, frame = video.read()
print("VideoCapture Read Success - ")
print(okay)

输出-

True - 视频读取成功

错误 - opencv 尚未使用 ffmpeg 正确编译。

关于python - 使用 ffmpeg 和 python 2.7 在 Fedora 26 25 24 23 或 22 上安装 OpenCV 2.4.13 或 3.x 时出现 VideoCapture 不工作错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46028385/

相关文章:

python - 删除列表中的重复项

python - 新窗口格式

linux - 从字符串 linux 中获取键值

java - 使用 VLCJ 和 JMF 在 Linux 中播放视频时遇到问题

python - 将具有不透明度的图像分层在另一个图像的顶部。 - OpenCV

python - 更改折线图中的色阶

python - 将列表转换为多值字典

linux - Docker,AWS-EKS : Docker-build command, Davfs 挂载不工作,没有免费的 coda 设备可以挂载

opencv - 关于人脸验证(相对于人脸识别)的置信度得分有什么建议吗?

python - 如何解决人脸检测安全问题,以便在有人显示图片时无法检测到人脸?