Вопрос или проблема
Камера CSI работает в терминале, но не работает с Python в Visual Studio. Я использую Jetson Orin Nano. Камера работает, когда я выполняю следующую команду в терминале:
gst-launch-1.0 nvarguscamerasrc ! 'video/x-raw(memory:NVMM), width=1280, height=720, framerate=30/1' ! nvvidconv ! nvegltransform ! nveglglessink -e
Однако камера не работает в следующем Python-скрипте:
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("Не удалось захватить изображение с камеры")
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
Ошибка: Не удалось открыть камеру
После исследования мне было предложено запустить следующий код:
import cv2
print(cv2.getBuildInformation())
В выводе я увидел:
Video I/O:
DC1394: НЕТ
FFMPEG: ДА
avcodec: ДА (59.37.100)
avformat: ДА (59.27.100)
avutil: ДА (57.28.100)
swscale: ДА (6.7.100)
avresample: НЕТ
GStreamer: НЕТ
v4l/v4l2: ДА (linux/videodev2.h)
Кажется, что строка GStreamer: НЕТ
указывает на проблему. Как я могу это исправить?
Ответ или решение
Для решения проблемы с невозможностью открытия камеры CSI в Python на Jetson Orin Nano, вероятно, необходимо исправить конфигурацию OpenCV и включить поддержку GStreamer. Поскольку ваша текущая сборка OpenCV не поддерживает GStreamer (это видно из вывода cv2.getBuildInformation()
), давайте рассмотрим шаги, необходимые для решения этой проблемы.
Шаги по решению проблемы:
-
Проверка зависимостей:
Убедитесь, что у вас установлены все необходимые зависимости для поддержки GStreamer. Вам нужно будет установить библиотеки GStreamer и соответствующие плагины:sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
-
Сборка OpenCV с поддержкой GStreamer:
Вам нужно пересобрать OpenCV с включенной поддержкой GStreamer. Вы можете следовать этим шагам:-
Загрузите исходный код OpenCV и OpenCV contrib:
git clone https://github.com/opencv/opencv.git git clone https://github.com/opencv/opencv_contrib.git
-
Перейдите в каталог OpenCV и создайте сборочный каталог:
cd opencv mkdir build cd build
-
Вызовите CMake с включенной поддержкой GStreamer:
cmake -D WITH_GSTREAMER=ON -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules ..
-
Скомпилируйте и установите OpenCV:
make -j$(nproc) sudo make install
-
Важно! После установки необходимо перезагрузить систему, чтобы изменения вступили в силу.
-
-
Проверка новой сборки OpenCV:
После завершения установки запустите скрипт для проверки сборочной информации OpenCV снова:import cv2 print(cv2.getBuildInformation())
Убедитесь, что строка
GStreamer: YES
теперь отображается как включенная. -
Использование Python скрипта:
Теперь попробуйте снова запустить ваш Python скрипт для работы с камерой CSI. Если все прошло успешно, камера должна открыться без ошибок: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("Не удалось захватить изображение с камеры") break cv2.imshow("CSI Camera", frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()
Заключение
Следуя вышеописанным шагам, вы должны получить рабочую версию OpenCV с поддержкой GStreamer, что позволит вам открыть и работать с камерой CSI на вашем Jetson Orin Nano. Если у вас возникнут дополнительные вопросы или потребуется дальнейшая помощь, не стесняйтесь обращаться.