设为首页收藏本站

Jetson开发者

搜索
查看: 1115|回复: 0

如何利用Python在Jetson TX2上抓取和显示摄像头影像

[复制链接]

116

主题

146

帖子

1884

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1884
发表于 2017-11-20 16:43:21 | 显示全部楼层 |阅读模式
Jetson TX2
本文转载自JK Jung的帖子:https://jkjung-avt.github.io/tx2-camera-with-python/如果有侵犯到贴主利益,请立刻跟我联系。

在本贴中,贴住分享了如何使用python 代码(及 OpenCV)在Jetson TX2上抓取和显示摄像头视频,包括IP摄像头, USB 网络摄像头和Jetson板载摄像头.这个简单代码也同样可以在Jetson TX1上运行。
准备条件:
  • 需要在Jetson TX2上安装 GStreamer 支持的 python和OpenCV.。我是安装opencv-3.3.0 和python3.
  • 如果你是用 IP CAM, 你必须构建好,并且知道它的RTSP URI, 比如. rtsp://admin:XXXXX@192.168.1.64:554.
  • 如果你是用USB 网络摄像头(I 使用的是罗技 C920),这个USB摄像头通常安装在 /dev/video1, 因为 Jetson 板载摄像头已经占用了 /dev/video0.
  • 安装 gstreamer1.0-plugins-bad ,这个包含了 h264parse 元素. 这是为了解码来自IP摄像头的H.264 RTSP stream 所需要的

$ sudo apt-get install gstreamer1.0-plugins-bad

参考:

如何运行Tegra摄像头sample code:
$ python3 tegra-cam.py

  • 按照下面步骤使用 USB 网络摄像头,并且把分辨率设置为1280x720. 注意‘–vid 1’意思是使用 /dev/video1.

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

  • 按照下面步骤使用IP摄像头,把最后的RTSP URI 参数设置为你自己的IP CAM.

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

讨论:
这个tegra-cam.py 脚本的关键是依靠GStreamer pipelines 我用来call cv.VideoCapture(). 在我的经验里,使用 nvvidconv 做图像缩放,用BGR做颜色格式转换(注意: OpenCV 需要 BGR 作为最后的输出) 在帧速率方面会有更好效果。
  1. <font size="3">def open_cam_rtsp(uri, width, height, latency):
  2.     gst_str = ("rtspsrc location={} latency={} ! rtph264depay ! h264parse ! omxh264dec ! "
  3.                "nvvidconv ! video/x-raw, width=(int){}, height=(int){}, format=(string)BGRx ! "
  4.                "videoconvert ! appsink").format(uri, latency, width, height)
  5.     return cv2.VideoCapture(gst_str, cv2.CAP_GSTREAMER)

  6. def open_cam_usb(dev, width, height):
  7.     # We want to set width and height here, otherwise we could just do:
  8.     #     return cv2.VideoCapture(dev)
  9.     gst_str = ("v4l2src device=/dev/video{} ! "
  10.                "video/x-raw, width=(int){}, height=(int){}, format=(string)RGB ! "
  11.                "videoconvert ! appsink").format(dev, width, height)
  12.     return cv2.VideoCapture(gst_str, cv2.CAP_GSTREAMER)

  13. def open_cam_onboard(width, height):
  14.     # On versions of L4T previous to L4T 28.1, flip-method=2
  15.     # Use Jetson onboard camera
  16.     gst_str = ("nvcamerasrc ! "
  17.                "video/x-raw(memory:NVMM), width=(int)2592, height=(int)1458, format=(string)I420, framerate=(fraction)30/1 ! "
  18.                "nvvidconv ! video/x-raw, width=(int){}, height=(int){}, format=(string)BGRx ! "
  19.                "videoconvert ! appsink").format(width, height)
  20.     return cv2.VideoCapture(gst_str, cv2.CAP_GSTREAMER)</font>
复制代码

这是我的Jetson TX2用IP摄像头运行tegra - cam的截图。(我还连接了一个更快的r - cnn模型来做人类头部检测,并在捕获图像上绘制边框,但是主视频捕获/显示代码是相同的。)



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

快速回复 返回顶部 返回列表