Невозможно открыть камеру для CSİ Camera

Вопрос или проблема

Камера 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()), давайте рассмотрим шаги, необходимые для решения этой проблемы.

Шаги по решению проблемы:

  1. Проверка зависимостей:
    Убедитесь, что у вас установлены все необходимые зависимости для поддержки GStreamer. Вам нужно будет установить библиотеки GStreamer и соответствующие плагины:

    sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
  2. Сборка 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
    • Важно! После установки необходимо перезагрузить систему, чтобы изменения вступили в силу.

  3. Проверка новой сборки OpenCV:
    После завершения установки запустите скрипт для проверки сборочной информации OpenCV снова:

    import cv2
    print(cv2.getBuildInformation())

    Убедитесь, что строка GStreamer: YES теперь отображается как включенная.

  4. Использование 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. Если у вас возникнут дополнительные вопросы или потребуется дальнейшая помощь, не стесняйтесь обращаться.

Оцените материал
Добавить комментарий

Капча загружается...