【发布时间】:2021-01-06 07:38:51
【问题描述】:
目前,我在 Python 中实现了我的应用程序,以通过 USB 读取相机帧。我使用 Opencv,但对于 60fps 和 1920x1080 分辨率的相机,我无法捕捉到这个速度。我尝试了一些东西:cv2.VideoCapture(0, cv2.CAP_FFMPEG),但我无法获取帧(捕获读取返回 False)。您能否提出任何解决方案或方法来提高整体速度甚至在 GPU 中处理它们。
# Opencv 3.4.9 & Python 3.6.9
import cv2
capture = cv2.VideoCapture(0, cv2.CAP_FFMPEG)
while True:
ret, frame = capture.read()
if ret:
cv2.imshow('Demo', frame)
cv2.waitKey(1)
Opencv 是从源代码构建的:
#!/usr/bin/env bash
set -e
VERSION='3.4.9'
DOWNLOAD_URL="https://github.com/opencv/opencv/archive/${VERSION}.zip"
CONTRIB_DOWNLOAD_URL="https://github.com/opencv/opencv_contrib/archive/${VERSION}.zip"
CURRENT_DIR="$(pwd)"
config_opencv_with_cuda() {
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D WITH_CUDA=ON \
-D ENABLE_FAST_MATH=1 \
-D CUDA_FAST_MATH=1 \
-D WITH_CUBLAS=1 \
-D WITH_V4L=ON \
-D WITH_FFMPEG=ON \
-D WITH_GSTREAMER=ON \
-D BUILD_opencv_cnn_3dobj=OFF \
-D BUILD_opencv_dnn_modern=OFF \
-D OPENCV_EXTRA_MODULES_PATH=$CURRENT_DIR/opencv_contrib-$VERSION/modules \
-D BUILD_DOCS=OFF \
-D BUILD_PERF_TESTS=OFF \
-D BUILD_TESTS=OFF \
-D BUILD_EXAMPLES=OFF ..
}
echo 'Uninstalling pip installation'
pip3 uninstall opencv-python opencv-contrib-python
echo 'Installing dependencies'
apt-get update && apt-get install -y \
build-essential cmake pkg-config \
libjpeg-dev libtiff5-dev libpng12-dev \
libavcodec-dev libavformat-dev libswscale-dev libv4l-dev \
libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
libxvidcore-dev libx264-dev \
libgtk2.0-dev libgtk-3-dev \
gfortran
wget -O opencv.zip "${DOWNLOAD_URL}"
wget -O opencv_contrib.zip "${CONTRIB_DOWNLOAD_URL}"
unzip opencv.zip && unzip opencv_contrib.zip
cd opencv-$VERSION
mkdir build
cd build
if [[ -d /usr/local/cuda ]]; then
config_opencv_with_cuda
else
config_opencv_without_cuda
fi
make -j $(nproc)
make install
ldconfig
【问题讨论】:
-
yozr 代码长什么样子?
-
@Micka 请检查我上面的代码,很简单
-
您可以尝试删除 imshow 和 waitkey 并仅计算帧数和秒数吗?对于 60 fps,可能需要使用更快的异步图像显示。您在哪种设备上运行代码?一帧的所有处理时间只有 17 毫秒!
-
@Micka 我知道这个例子的 imshow 效果,但我想尝试更改为 opencv 的 ffmpeg 后端,但我得到的是 VideoCapture 总是返回 False,我无法使用 cv2 获取帧.VideoCapture(0, cv2.CAP_FFMPEG)
-
抱歉,不知道 ffnpeg videocapture 是否适用于所有情况。目前您的问题标题具有误导性。
标签: python-3.x opencv ffmpeg gpu rtsp