zoukankan      html  css  js  c++  java
  • 在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:WindowsSystem32driversetchosts文件   

      编辑器打开,在最后行添加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)
  • 相关阅读:
    第四次作业:个人项目-小学四则运算 “软件”之初版
    随笔 | 阅读《构建之法》1-5章感想
    随笔 | 分布式版本控制系统Git的安装与使用
    随笔 | 对软件工程的一些感想
    为什么加载 JavaScript 使用 "src",CSS 使用 "href"?有其含义还是历史语法遗留?
    webstrom 添加一键open in browser
    sublime 代码段
    二.sublime配置 sublimecondeintel 分号后不要提示
    一.sublime配置 sublime 新建文档 默认html
    chrome使用
  • 原文地址:https://www.cnblogs.com/gezhuangzhuang/p/11622291.html
Copyright © 2011-2022 走看看