在Jetson TX2上捕獲、顯示攝像頭視頻


參考文章:How to Capture and Display Camera Video with Python on Jetson TX2

與參考文章大部分都是相似的,如果不習慣看英文,可以看看我下面的描述

 

在Jetson TX2捕獲和顯示攝像頭視頻,包括IP CAM(網絡攝像頭)、USB webcam和板載攝像頭。代碼應該也適用於Jetson TX1

 

先決條件

  帶有GStreamer和python支持的OpenCV構建並安裝在Jetson TX2,我使用的是OpenCV-3.4.0和python3。關於如何在Jetson TX2上安裝OpenCV(3.4.0)參考下面文章:在Jetson TX2上安裝OpenCV(3.4.0)

  如果你想用IP CAM進行測試,需要設置它並知道它的RTSP URI。例如:RTSP://admin:XXXXX@192.168.1.64:554。

  插入一個USB攝像頭,通常是/dev/video1,板載攝像頭使用的是/dev/video0

  安裝包含h264parse元素的gstreamer1.0-plugin -bad-xxx。這是解碼來自IP CAM的H.264 RTSP流所必需的。

sudo apt-get install gstreamer1.0-plugins-bad-faad \
                       gstreamer1.0-plugins-bad-videoparsers

代碼下載與使用

下載代碼:tegra-cam.py 地址:https://gist.github.com/jkjung-avt/86b60a7723b97da19f7bfa3cb7d2690e

如果無法訪問鏈接,是因為瀏覽器打不開gist庫。參照下面

  windows下 打開C:\Windows\System32\drivers\etc\hosts文件   

  編輯器打開,在最后行添加192.30.253.118 gist.github.com

  保存。

使用USB攝像頭,分辨率設為1280x720。'–vid 1' 意味着 /de/video1 

python3 tegra-cam.py --usb --vid 1 --width 1280 --height 720

 我的環境下運行出錯!

 原因可能是我的GStreamer的v4l2src對USB攝像頭不起作用,使用下面的代碼去代替open_cam_usb()

def open_cam_usb(dev, width, height):
    return cv2.VideoCapture(dev)

 

使用板載攝像頭

python3 tegra-cam.py

 

使用IP CAM,同時替換成你自己的IP

python3 tegra-cam.py --rtsp --uri rtsp://admin:XXXXXX@192.168.1.64:554

 

這個tegra-cam.py腳本關鍵在於調用了 cv2.VideoCapture()的GStreamer管道。根據經驗,使用 nvvidconv 進行圖像縮放並將顏色格式轉換為BGRx可以在幀率產生更好的效果

def open_cam_rtsp(uri, width, height, latency):
    gst_str = ('rtspsrc location={} latency={} ! '
               'rtph264depay ! h264parse ! omxh264dec ! '
               'nvvidconv ! '
               'video/x-raw, width=(int){}, height=(int){}, '
               'format=(string)BGRx ! '
               'videoconvert ! appsink').format(uri, latency, width, height)
    return cv2.VideoCapture(gst_str, cv2.CAP_GSTREAMER)

#def open_cam_usb(dev, width, height):
#    # We want to set width and height here, otherwise we could just do:
#    #     return cv2.VideoCapture(dev)
#    gst_str = ('v4l2src device=/dev/video{} ! '
#               'video/x-raw, width=(int){}, height=(int){} ! '
#               'videoconvert ! appsink').format(dev, width, height)
#    return cv2.VideoCapture(gst_str, cv2.CAP_GSTREAMER)

def open_cam_usb(dev, width, height):
    return cv2.VideoCapture(dev) 

def open_cam_onboard(width, height):
    # On versions of L4T prior to 28.1, add 'flip-method=2' into gst_str
    gst_str = ('nvcamerasrc ! '
               'video/x-raw(memory:NVMM), '
               'width=(int)2592, height=(int)1458, '
               'format=(string)I420, framerate=(fraction)30/1 ! '
               'nvvidconv ! '
               'video/x-raw, width=(int){}, height=(int){}, '
               'format=(string)BGRx ! '
               'videoconvert ! appsink').format(width, height)
    return cv2.VideoCapture(gst_str, cv2.CAP_GSTREAMER)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM