Utils 的 videoOutput 工具

本文的重点将聚焦在 videoOutput() 这个输出标的处理模块。
前一篇文章为大家深入地讲解了 videoSource()  这个非常强大的输入源处理模块,本文的重点将聚焦在 videoOutput() 这个输出标的处理模块。

videoOutput() 与 videoSource() 几乎具备一致的特性。这里直接列出了 videoOutput() 所支持的输出种类与媒体格式:
1.支持 5 种输出方式:

  • 显示器:“display://0”
  • RTP 视频流:“rtp://<remote_ip>:1234”
  • 视频文件:“完整文件名”,例如 “input.mp4”
  • 图像文件:“完整文件名”,例如 “room_0.jpg”
  • 文件夹:“完整文件夹路径”,当识别到输出类型为“文件夹”时,就会按照流水号递增方式生成文件名

2.支持 4 种视频输出格式:MKV、MP4、AVI 与 FLV

3.支持 5 种媒体输出格式:H.264、H.265、VP8、VP9 与 MJPEG

4.支持 4 种图像格式:JPG、PNG、TGA 与 BMP

5.自动根据数据源,调用合适的 NVDEC 解码功能

6.调用 CUDA 核处理大部分基础图像处理任务

我们在前面已经熟悉了将结果输出到显示器上的方式,接下来就来体验其他几种输出方式,这对于将来开发边缘应用是非常有帮助的。要知道绝大部分的边缘计算场景,都是不能在设备上直接连上显示器的,那么此时如何观看该设备上所监控到的视频内容呢?通常就是将输入源所获取的数据,做完深度学习推理识别之后的结果,做以下两种处理方式:

  1. 在当地存成视频,然后批次往管理服务区发送,再删除该视频,以保留空间。

  2. 将视频流直接转向到其他设备上进行显示。

至于使用哪种方式,必须根据实际场景而定。而本文的重点就是带着大家,对这两种用法进行试验,并借此学会这些使用方法。
我们还是用 10lines.py 代码为基础来进行修改,不过为了节省测试时间,这里会将深度学习推理计算的部分省略掉,只保留 videoSource() 与 videoOutput() 这两部分的代码。修改后的内容如下:

这个 6 行代码,让人看起来非常轻松,却又支持了绝大部分常用的输入、输出形态与格式。

接下来的重点,就是将代码内的 INPUT 与 OUTPUT 做有效的置换,试试以下几种组合状况:

1.从 CSI 摄像头读入,然后输出存放至 csi.mp4 视频文件,这个相对直观,因此不多做说明。在观察 jetson-stats 时,若输出为视频文件,NVENC 编码器的功能就启动了。

2.用 VisionWorks 的范例视频 signs.avi 作为输入,输出成个别帧图像到 OUTPUT 目录里。视频长度为 22 秒,输出后生成 44 张图像,就是每 0.5 秒生成一张图像,不过实际生成的数量并不一定,与其他相关参数也有关。

3.这个组合是本文的重点实验,因为 RTP 视频流转向的实用性非常高,操作较为复杂,必须在发送端与接收端之间进行配合,因此需要花点时间说明并演示。
接下来就进行 RTP 视频流转向的示范步骤:

  • 设备:一台 Jetson Nano 担任 “发送端”,另外需要一台设备执行 “接受端”,这个可以是另一台Jetson设备,也可以是 Windows、MAC 或 Ubuntu 操作系统的 x86电脑。

  • 网络:本实验的发送端与接收端设备,都在内网中的同一个网段。这里的实验用 MicroUSB 线连接 Jetson Nano 2GB 与运行 Ubuntu 操作系统的 x86 电脑,此时Jetson Nano 的 IP 是 192.168.55.1,x86 电脑的 IP 是192.168.55.100,因此就需要将代码中 OUTPUT 部分修改成 “rtp://192.168.55.100:1234”,修改后的完整代码如下:

执行步骤:

  1. 在发送端上执行以下指令:

    执行过程中会出现如下截屏的摄像头信息内容:
     
    最后停在下面截屏的地方,发送端到这边就不用再去动这个指令框了。
     
    2.在接收端执行接收的动作:
    (1) 在 Ubuntu 操作系统下,可执行以下指令便能直接接收视频流:

    正确执行指令后,接收端设备的命令行会停留在如下图的状态:
     
    并且还会跳出一个显示框,需要核对一下显示的内容与 Jetson Nano 上的摄像头是否一致。
     
    发送端与接收端之间的显示,是否出现时间差?取决于网络的质量!

(2) 用 VLC 播放软件,适用于 Windows、Mac、Ubuntu 操作系统:
首先得在接收设备上安装 VLC 播放软件,然后用文字编辑器生成一个 “.sdp” 文件,例如 “rdp.sdp”,里面的内容如下:


同样先在发送端执行 10lines.py 这个代码,然后在接收端用 VLC 播放器打开 rdp.sdp,就可以在 VLC 播放器上显示了。
 
这样就能很轻松地将 Jetson Nano 2GB 上的摄像头看到的画面,直接透过 RTP 转到 PC 上去呈现。

这时候,如果你打开 Jetson Nano 2GB 的 jetson-stats 监控软件,也会看到左下角“NVDEC”处于执行的状态。

如果我们这时候将 “物件检测” 的推理识别功能打开的话,会出现怎样的结果呢?先将前面代码中的 “#” 部分取消,开启对象检测的功能,执行一次看看就知道,是否如下图一样会出现检测的结果。


好的,到这里为止,是不是已经可以更好地掌握 videoOutput() 的一些用法了呢?

 


评论:
相关文章
用乐高打造太空电梯

用乐高积木打造太空电梯,重现科幻电影中的经典场景,感受宇宙探索的无限魅力。


App Inventor 编程实例及指南-第6章 巴黎地图旅游

本章将创建一个“向导”应用,带给你一次巴黎的梦幻之旅。


乐高WEDO打印机搭建分享

本文为一个乐高WEDO打印机的教学课件,供各位参考。


机器人技术七八级考试说明及知识框架

青少年机器人技术七级、八级着重于机器人智能处理能力的学习,基本编程语言为Python,采用RDK X3作为主控。


新加坡STEM课程概述——以STEM应用学习计划为例

新加坡教育部通过一系列举措来发展本国的STEM教育。文章以新加坡 STEM应用学习计划为例,介绍其产生的背景和具体的课程设计,分析其课程设计特点,为我国中小学STEM教育的实施提供参考。


LVGL简介

LVGL(Light and Versatile Graphics Library,轻巧而多功能的图形库)是一个免费的开放源代码图形库,它提供创建具有易于使用的图形元素,精美的视觉效果和低内存占用的嵌入式GUI所需的一切。


Emo:基于树莓派 4B DIY 能笑会动的桌面机器人

Emo 是一款个人伴侣机器人,集时尚与创新于一身。他的诞生离不开最新的树莓派 4 技术和先进的设计。他不仅仅是一款机器人,更是一个活生生的存在。


旅行者一号永不回航,致敬:64亿公里处的最后一次回眸

1990年2月14日,情人节,‘旅行者一号’正式与地球道别,转身拍下了太阳系的全家福,那最后一次回眸,留下了对‘家乡地球’所有的留恋与不舍,从此,今生今世,永不相见。


2024年青少年STEAM教育研究报告

报告由艾瑞咨询发布,对全球及中国STEAM教育发展进行了全面剖析。


STEM课程学习路径指南

新课标在秋季即将开始执行,其中信息科技课程与STEM教育是紧密相关的,如何更好的展开STEM学习,以培养孩子们的STEM思维呢?本文总结了一个STEM课程的学习路径,供家长参考。

Jetson Nano 基础教程

作者:英伟达小助理   共52讲

Jetson Nano 推出 2GB 内存版本,不仅承袭了 Jetson Nano 所有 AI 开发环境与 IOT 控制功能,也能学习或开发 Python、OpenCV 与 AI 深度学习、ROS 自动控制等应用。

课程