Opencv всегда возвращает False в функции cv2.VideoCapture("files/new.mp4")
Собрал докер с ffmpeg и opencv, когда пытаюсь запустить
python3.7 -c 'import cv2; cap = cv2.VideoCapture("files/new.mp4"); print(cap.isOpened());'
Выдает False. Но если на вход даю картинку, вместо видео
python3.7 -c 'import cv2; cap = cv2.VideoCapture("files/img.png"); print(cap.isOpened());'
То выдает размеры картинки и читает её. Как мне сделать так, что бы и видео читало. Код докера ниже:
FROM python:3.7
ENV NVIDIA_VISIBLE_DEVICES all
ENV NVIDIA_DRIVER_CAPABILITIES compute,utility
ENV NUM_CORES 4
RUN apt-get update -y
RUN apt install libgl1-mesa-glx nasm git yasm cmake libtheora-dev opus-tools -y
RUN python3.7 -m pip install --upgrade pip
RUN python3.7 -m pip install opencv-python
RUN python3.7 -m pip install easydict
RUN python3.7 -m pip install firebase_admin
RUN python3.7 -m pip install pyyaml
RUN python3.7 -m pip install tqdm
RUN python3.7 -m pip install google.cloud-storage google-api-python-client google-auth-httplib2 google-auth-oauthlib
WORKDIR /usr/local/src
RUN git clone https://github.com/l-smash/l-smash.git \
&& git clone https://code.videolan.org/videolan/x264.git \
&& git clone https://bitbucket.org/multicoreware/x265_git.git \
&& git clone https://git.ffmpeg.org/ffmpeg.git \
#&& git clone https://github.com/Itseez/opencv.git \
#&& git clone https://github.com/Itseez/opencv_contrib.git \
&& git clone --depth 1 git://github.com/mstorsjo/fdk-aac.git \
&& git clone --depth 1 https://chromium.googlesource.com/webm/libvpx \
&& git clone https://github.com/xiph/opus.git
RUN wget https://github.com/opencv/opencv/archive/4.5.1.zip -O opencv.zip --progress=bar:force:noscroll --no-check-certificate && \
unzip -q opencv.zip && \
rm opencv.zip && \
wget https://github.com/opencv/opencv_contrib/archive/4.5.1.zip -O opencv_contrib.zip --progress=bar:force:noscroll --no-check-certificate && \
unzip -q opencv_contrib.zip && \
rm opencv_contrib.zip
# Build L-SMASH
# =================================
WORKDIR /usr/local/src/l-smash
RUN ./configure \
&& make -j ${NUM_CORES} \
&& make install
# =================================
# Build libx264
# =================================
WORKDIR /usr/local/src/x264
RUN ./configure --enable-static \
&& make -j ${NUM_CORES} \
&& make install
# =================================
# Build libx265
# =================================
WORKDIR /usr/local/src/x265_git/build/linux
RUN cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ../../source \
&& make -j ${NUM_CORES} \
&& make install
# =================================
# Build libfdk-aac
# =================================
WORKDIR /usr/local/src/fdk-aac
RUN autoreconf -fiv \
&& ./configure --disable-shared \
&& make -j ${NUM_CORES} \
&& make install
# =================================
# Build libvpx
# =================================
WORKDIR /usr/local/src/libvpx
RUN ./configure --disable-examples \
&& make -j ${NUM_CORES} \
&& make install
# =================================
# Build libopus
# =================================
WORKDIR /usr/local/src/opus
RUN ./autogen.sh \
&& ./configure --disable-shared \
&& make -j ${NUM_CORES} \
&& make install
# =================================
WORKDIR /usr/local/src
RUN wget -c https://downloads.xiph.org/releases/ogg/libogg-1.3.4.tar.gz && tar zxvf libogg-1.3.4.tar.gz && cd libogg-1.3.4 && ./configure && make -j ${NUM_CORES} && make install && cd ..
WORKDIR /usr/local/src
RUN git clone https://github.com/gypified/libmp3lame.git && cd libmp3lame && ./configure && make -j ${NUM_CORES} && make install
WORKDIR /usr/local/src
RUN wget -c http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.6.tar.gz && tar zxvf libvorbis-1.3.6.tar.gz && cd libvorbis-1.3.6 && ./configure && make -j ${NUM_CORES} && make install && cd ..
# Build OpenCV 3.x
# =================================
#RUN apt-get update -qq && apt-get install -y --force-yes libopencv-dev
RUN python3.7 -m pip install --no-cache-dir --upgrade numpy
WORKDIR /usr/local/src
RUN cd opencv-4.5.1 && mkdir release && cd release && cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_TBB=ON \
-D BUILD_PYTHON_SUPPORT=ON \
-D WITH_V4L=ON \
-D WITH_FFMPEG=ON \
-D WITH_LIBV4L=ON \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.5.1/modules \
..
WORKDIR /usr/local/src/opencv-4.5.1/release
RUN make -j ${NUM_CORES} \
&& make install \
&& sh -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf' \
&& ldconfig
# =================================
# Build ffmpeg.
# =================================
RUN apt-get update -qq && apt-get install -y --force-yes \
libass-dev
# --enable-libx265 - Does not work on recent builds
WORKDIR /usr/local/src/ffmpeg
RUN ./configure --extra-libs="-ldl" \
--enable-gpl \
--enable-libass \
--enable-libfdk-aac \
--enable-libfontconfig \
--enable-libfreetype \
--enable-libfribidi \
--enable-libmp3lame \
#--enable-libopus \
--enable-libtheora \
--enable-libvorbis \
--enable-libvpx \
--enable-libx264 \
--enable-nonfree \
&& make -j ${NUM_CORES} \
&& make install
# =================================
# Remove all tmpfile
# =================================
WORKDIR /usr/local/
RUN rm -rf /usr/local/src
# =================================
RUN python3.7 -m pip install torch==1.7.1+cu110 torchvision==0.8.2+cu110 -f https://download.pytorch.org/whl/torch_stable.html
COPY requirements.txt ./
RUN python3.7 -m pip install -r requirements.txt
Ответы (1 шт):
Автор решения: Scanty
→ Ссылка
Переписал докер, всё заработало. Спасибо @AlexanderChernin за помощь, ты подал мне классную идею как исправить и научил меня чему то новому.
FROM ubuntu:18.04
ENV NVIDIA_VISIBLE_DEVICES all
ENV NVIDIA_DRIVER_CAPABILITIES compute,utility
RUN apt-get update -y
RUN apt install libgl1-mesa-glx -y
RUN apt-get install wget libsm6 libxext6 build-essential yasm cmake libtool libc6 libc6-dev unzip libnuma1 libnuma-dev x264 libx264-dev -y
ARG PYTHON_VERSION=3.7
ARG OPENCV_VERSION=4.5.1
# Needed for string substitution
SHELL ["/bin/bash", "-c"]
# https://techoverflow.net/2019/05/18/how-to-fix-configuring-tzdata-interactive-input-when-building-docker-images/
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Europe/Prague
# Install all dependencies for OpenCV
# add sources for older pythons
RUN apt-get update && \
apt-get install -y --no-install-recommends software-properties-common && \
add-apt-repository ppa:deadsnakes/ppa
# Install all dependencies for OpenCV
RUN apt-get -y update -qq --fix-missing && \
apt-get -y install --no-install-recommends \
python${PYTHON_VERSION} \
python${PYTHON_VERSION}-dev \
$( [ ${PYTHON_VERSION%%.*} -ge 3 ] && echo "python${PYTHON_VERSION%%.*}-distutils" ) \
wget \
unzip \
cmake \
ffmpeg \
libtbb2 \
gfortran \
apt-utils \
pkg-config \
checkinstall \
qt5-default \
build-essential \
libopenblas-base \
libopenblas-dev \
liblapack-dev \
libatlas-base-dev \
#libgtk-3-dev \
#libavcodec58 \
libavcodec-dev \
#libavformat58 \
libavformat-dev \
libavutil-dev \
#libswscale5 \
libswscale-dev \
libjpeg8-dev \
libpng-dev \
libtiff5-dev \
#libdc1394-22 \
libdc1394-22-dev \
libxine2-dev \
libv4l-dev \
libgstreamer1.0 \
libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-0 \
libgstreamer-plugins-base1.0-dev \
libglew-dev \
libpostproc-dev \
libeigen3-dev \
libtbb-dev \
zlib1g-dev \
libsm6 \
libxext6 \
libxrender1 \
git
# install python dependencies
# sysctl -w net.ipv4.ip_forward=1 && \
RUN wget https://bootstrap.pypa.io/get-pip.py --progress=bar:force:noscroll --no-check-certificate && \
python${PYTHON_VERSION} get-pip.py && \
rm get-pip.py && \
pip${PYTHON_VERSION} install numpy
# Install OpenCV
RUN wget https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip -O opencv.zip --progress=bar:force:noscroll --no-check-certificate && \
unzip -q opencv.zip && \
mv /opencv-${OPENCV_VERSION} /opencv && \
rm opencv.zip && \
wget https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip -O opencv_contrib.zip --progress=bar:force:noscroll --no-check-certificate && \
unzip -q opencv_contrib.zip && \
mv /opencv_contrib-${OPENCV_VERSION} /opencv_contrib && \
rm opencv_contrib.zip
# Prepare build
RUN mkdir /opencv/build && \
cd /opencv/build && \
cmake \
-D CMAKE_BUILD_TYPE=RELEASE \
-D BUILD_PYTHON_SUPPORT=ON \
-D BUILD_DOCS=ON \
-D BUILD_PERF_TESTS=OFF \
-D BUILD_TESTS=OFF \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=/opencv_contrib/modules \
-D BUILD_opencv_python3=$( [ ${PYTHON_VERSION%%.*} -ge 3 ] && echo "ON" || echo "OFF" ) \
-D BUILD_opencv_python2=$( [ ${PYTHON_VERSION%%.*} -lt 3 ] && echo "ON" || echo "OFF" ) \
-D PYTHON${PYTHON_VERSION%%.*}_EXECUTABLE=$(which python${PYTHON_VERSION}) \
-D PYTHON_DEFAULT_EXECUTABLE=$(which python${PYTHON_VERSION}) \
-D BUILD_EXAMPLES=OFF \
-D WITH_IPP=OFF \
-D WITH_FFMPEG=ON \
-D WITH_GSTREAMER=ON \
-D WITH_V4L=ON \
-D WITH_LIBV4L=ON \
-D WITH_TBB=ON \
-D WITH_QT=ON \
-D WITH_OPENGL=ON \
-D WITH_LAPACK=ON \
#-D WITH_HPX=ON \
-D ENABLE_PRECOMPILED_HEADERS=OFF \
..
# Build, Test and Install
RUN cd /opencv/build && \
make -j$(nproc) && \
make install && \
ldconfig
# cleaning
RUN apt-get -y remove \
unzip \
cmake \
gfortran \
apt-utils \
pkg-config \
checkinstall \
build-essential \
libopenblas-dev \
liblapack-dev \
libatlas-base-dev \
#libgtk-3-dev \
libavcodec-dev \
libavformat-dev \
libavutil-dev \
libswscale-dev \
libjpeg8-dev \
libpng12-dev \
libtiff5-dev \
libdc1394-22-dev \
libxine2-dev \
libv4l-dev \
libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev \
libglew-dev \
libpostproc-dev \
libeigen3-dev \
libtbb-dev \
zlib1g-dev \
&& \
apt-get autoremove -y && \
apt-get clean && \
rm -rf /opencv /opencv_contrib /var/lib/apt/lists/*