Jetson Orin Nano上CSI摄像头终端可用但Python脚本无法打开求助
解决Jetson Orin Nano上OpenCV无法调用CSI摄像头的问题
问题背景
在Jetson Orin Nano设备上,终端执行GStreamer命令可正常调用CSI摄像头:
gst-launch-1.0 nvarguscamerasrc ! 'video/x-raw(memory:NVMM), width=1280, height=720, framerate=30/1' ! nvvidconv ! nvegltransform ! nveglglessink -e
但运行以下Python OpenCV脚本时无法打开摄像头:
import cv2 cap = cv2.VideoCapture("nvarguscamerasrc ! video/x-raw(memory:NVMM), width=1280, height=720, framerate=30/1 ! nvvidconv ! video/x-raw, format=BGRx ! videoconvert ! video/x-raw, format=BGR ! appsink") while True: ret, frame = cap.read() if not ret: print("Unable to capture camera image") break cv2.imshow("CSI Camera", frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()
执行脚本后输出报错:
onur@ubuntu:~/Desktop/Project$ /bin/python /home/onur/Desktop/Project/simple_camera.py nvarguscamerasrc sensor-id=0 ! video/x-raw(memory:NVMM), width=(int)1920, height=(int)1080, framerate=(fraction)30/1 ! nvvidconv flip-method=0 ! video/x-raw, width=(int)960, height=(int)540, format=(string)BGRx ! videoconvert ! video/x-raw, format=(string)BGR ! appsink Error: Unable to open camera
排查发现当前OpenCV编译时未启用GStreamer支持,执行import cv2; print(cv2.getBuildInformation())输出:
Video I/O: DC1394: NO FFMPEG: YES avcodec: YES (59.37.100) avformat: YES (59.27.100) avutil: YES (57.28.100) swscale: YES (6.7.100) avresample: NO GStreamer: NO v4l/v4l2: YES (linux/videodev2.h)
问题根源就是OpenCV缺少GStreamer支持,无法解析GStreamer管道串。
解决步骤
1. 安装编译依赖
先安装OpenCV编译所需的基础依赖和GStreamer开发库:
sudo apt update && sudo apt install -y \ build-essential cmake git libgtk2.0-dev pkg-config \ libavcodec-dev libavformat-dev libswscale-dev \ libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \ gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly \ python3-dev python3-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-dev
2. 下载OpenCV及扩展模块源码
建议选择与JetPack版本匹配的OpenCV版本(JetPack 5.x推荐OpenCV 4.5.x):
# 克隆主仓库和扩展模块 git clone https://github.com/opencv/opencv.git git clone https://github.com/opencv/opencv_contrib.git # 切换到指定版本(以4.5.5为例) cd opencv && git checkout 4.5.5 && cd .. cd opencv_contrib && git checkout 4.5.5 && cd ..
3. 配置编译参数
创建build目录并运行cmake,核心是开启WITH_GSTREAMER和CUDA支持:
mkdir -p opencv/build && cd opencv/build cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D INSTALL_C_EXAMPLES=OFF \ -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \ -D PYTHON_EXECUTABLE=/usr/bin/python3 \ -D BUILD_EXAMPLES=ON \ -D WITH_GSTREAMER=ON \ -D WITH_LIBV4L=ON \ -D WITH_CUDA=ON \ -D CUDA_ARCH_BIN=8.7 \ # Jetson Orin Nano的算力架构为8.7 -D CUDA_ARCH_PTX="" \ -D OPENCV_GENERATE_PKGCONFIG=ON ..
4. 编译并安装
根据设备CPU核心数调整-j参数(Orin Nano可用-j4):
make -j4 sudo make install sudo ldconfig
5. 验证安装
重新运行Python代码,或执行以下命令确认GStreamer已启用:
import cv2 print(cv2.getBuildInformation())
查看输出中Video I/O部分的GStreamer是否显示YES。
内容的提问来源于stack exchange,提问作者Onur
相关产品推荐
相关产品推荐

