Зеленый экран в режиме реального времени с Leopard IMX477 Camera + TX2 Developer Kit

Недавно я купил 4 камеры Leopard Imaging IMX477, 1 адаптер для нескольких камер с 6 портами и комплект разработчика TX2. LI отправил 2 .txt файла с инструкциями по установке необходимых драйверов для камер. Я выполнял каждый шаг правильно и ожидал получить живое видео с камеры IMX477, но в итоге получил зеленый экран. Согласно руководствам Leopard Imaging, есть несколько способов получить видео с камеры в режиме реального времени:

1) используя nvgstcapture-1.0, я должен был получить живой вывод. Единственное, что здесь важно, - это убедиться, что на порту J1 мультикамерного адаптера есть камера, что я и сделал. Выполнения следующей команды на терминале должно быть достаточно для получения выходного видео в реальном времени:

nvgstcapture-1.0

Но почему-то все, что я вижу, это зеленый экран.

Сообщения на терминале:

vid_rend: syncpoint wait timeout
vid_rend: syncpoint wait timeout
vid_rend: syncpoint wait timeout
vid_rend: syncpoint wait timeout
Socket read error. Camera Daemon stopped functioning.....
** Message: <main:5374> Capture completed
** Message: <main:5424> Camera application will now exit

2) использование gstreamer - еще один способ получения живого изображения. Согласно руководствам LI, выполнение следующей команды должно было сработать:

gst-launch-1.0 nvcamerasrc fpsRange="20.0 20.0" sensor-id=0 ! 'video/x-raw(memory:NVMM), width=(int)4056, height=(int)3040, format=(string)I420, framerate=(fraction)20/1' ! nvtee ! nvvidconv flip-method=2 ! 'video/x-raw, format=(string)I420' ! xvimagesink -e

Но опять же, на выходе ничего, кроме зеленого экрана.

Сообщения на терминале:

Received error from camera daemon....exiting....
Socket read error. Camera Daemon stopped functioning.....
Got EOS from element "pipeline0"
Execution ended after 0:00:16.224172704
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...

3) использование argus - еще один способ сделать это. После установки программного обеспечения argus (что я и сделал) я смог получить вывод живого видео, выполнив на терминале следующую команду:

argus_camera --device=0

должен был дать вывод камеры на порт J1. Приложение Argus открывается правильно, но не может отображать изображения, когда я нажимаю кнопку "Захват".

Сообщения на терминале:

Executing Argus Sample Application (argus_camera)
Argus Version: 0.96.2 (multi-process)
(Argus) Error EndOfFile: Unexpected error in reading socket (in src/rpc/socket/client/ClientSocketManager.cpp, function recvThreadCore(), line 212)
(Argus) Error EndOfFile: Receiving thread terminated with error (in src/rpc/socket/client/ClientSocketManager.cpp, function recvThreadWrapper(), line 315)
(Argus) Error InvalidState: Receive thread is not running cannot send. (in src/rpc/socket/client/ClientSocketManager.cpp, function send(), line 94)
(Argus) Error InvalidState: (propagating from src/rpc/socket/client/SocketClientDispatch.cpp, function dispatch(), line 101)
Segmentation fault (core dumped)

4) Использование VideoCapture в OpenCV также является способом захвата изображений. Согласно руководствам Leopard Imaging, следующий код должен был сработать:

VideoCapture cap("nvcamerasrc ! video/x-raw(memory:NVMM), width=(int)1280, height=(int)720,format=(string)I420, framerate=(fraction)24/1 ! nvvidconv flip-method=2 ! video/x-raw, format=(string)BGRx ! videoconvert ! 'video/x-raw, format=(string)BGR' ! appsink"); 

Код компилируется, но я получаю следующую ошибку при запуске:

VIDEOIO ERROR: V4L: device nvcamerasrc ! video/x-raw(memory:NVMM), width=(int)1280, height=(int)720,format=(string)I420, framerate=(fraction)24/1 ! nvvidconv flip-method=2 ! video/x-raw, format=(string)BGRx ! videoconvert ! 'video/x-raw, format=(string)BGR' ! appsink: Unable to query the number of channels

Я посмотрел его в интернете и нашел решение, которое помогло мне с этой ошибкой. Я добавил CAP_FFMPEG во второй аргумент объекта VideoCapture и попытался отобразить изображение:

VideoCapture cap("nvcamerasrc ! video/x-raw(memory:NVMM), width=(int)1280, height=(int)720,format=(string)I420, framerate=(fraction)24/1 ! nvvidconv flip-method=2 ! video/x-raw, format=(string)BGRx ! videoconvert ! 'video/x-raw, format=(string)BGR' ! appsink", CAP_FFMPEG);
namedWindow("Test", CV_WINDOW_KEEPRATIO);
bool loop = true;
Mat image;
while(loop){
  bool readImage = cap.read(image);
  imshow("Test", image);
  if(waitKey(10) == 27){
    loop = false;
  }
}
destroyAllWindows();

Но я получаю следующую ошибку (вероятно, из-за того, что захваченное изображение пустое, или изображение вообще не захвачено, или цветовое пространство как-то отличается), когда я его запускаю:

OpenCV Error: Assertion failed (size.width>0 && size.height>0) in imshow, file /home/nvidia/src/opencv-3.4.0/modules/highgui/src/window.cpp, line 331 terminate called after throwing an instance of 'cv::Exception'
   what(): /home/nvidia/src/opencv-3.4.0/modules/highgui/src/window.cpp:331: error: (-215) size.width>0 && size.height>0 in function imshow

The program has unexpectedly finished

Я искал это в интернете, чтобы найти решение. Некоторые люди говорят, что камера выдает необработанные данные, и мне как-то приходится конвертировать изображение в RGB. Я попробовал некоторые методы преобразования цветового пространства с помощью функции cvtColor с разными аргументами, но они также не помогли в OpenCV.

Также должен сказать, что WiFi модуль TX2 Developer Kit перестал работать после установки драйверов камеры. Я запускаю следующую команду для просмотра списка всех установленных сетевых драйверов:

sudo lshw -C network

Обычно я тоже должен был видеть беспроводной интерфейс, но больше не вижу его после установки драйверов камеры. Я вижу только интерфейс Ethernet.

Есть ли кто-нибудь, кто сталкивался с такими же / похожими проблемами и сумел их решить, или просто дал мне несколько советов о них?

0 ответов

Другие вопросы по тегам