在jetson-inference项目中集成了一个全双工的WebRTC 服务器,同时具备输入与输出的功能,主要具备以下特性:
在这个全双工模式的屏幕截图中,笔记本电脑的网络摄像头通过WebRTC流式传输到Jetson上进行解码,然后使用特定深度学习识别(例如detectNet)执行智能推理,然后重新编码输出,并再次将其发送回浏览器WebRTC用于播放,所以这个功能很单纯就是个输入输出的功能。
现在就用Jetson-Inference的容器来进行这项任务,执行步骤非常简单,如下:
系统安装: 用docker容器来执行这个项目是非常简单的,只要执行以下指令就可以:
$ git clone --recursive https://github.com/dusty-nv/jetson-inference
$ cd jetson-inference
$ docker/run.sh
配置HTTPS / SSL安全策略: 陪WebRTC配置安全策略很简单,只要执行下面四个步骤就行:
$ cd /jetson-inference/data
$ openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 365 -nodes -subj '/CN=localhost'
$ export SSL_KEY=/jetson-inference/data/key.pem
$ export SSL_CERT=/jetson-inference/data/cert.pem
注意:由于这里启动的容器使用 --rm 参数,表示每次离开之后就会删除这个执行容器,因此每次执行 docker/run.sh 之后,都需要执行上面三个步骤,才能顺利启动WebRTC服务器。
执行各种应用的输出: 为了提高显示效果,我们复制一个国外健身操的公开短视频作为输入源,在Jetson上执行detectNet.py与poseNet.py这两种推理实验,然后在我台式电脑上的浏览器观看输出结果,执行如下:
$ cd build/aarch/bin
# 执行姿态识别,从浏览器上看结果:
$ posenet.py /jetson-inference/data/Pose.mp4 webrtc://@:8554/mytest
下面是在台式机上的浏览器输入”https://IP_OF_JETSON:8554”,例如本示例的Jetson IP为 ”10.11.11.18”,完整的输入就是 ”https://10.11.11.18:8554”,第一次登录时会出现类型以下的信息:
只要按照正常方式进行授权就可以,然后就在台式机浏览器上看到以下的视频流:
可以看到在浏览器最下方出现这次示例的相关信息。 现在再用detecNet.py 对同一个视频执行物件识别功能,指令如下:
$ detectnet.py /jetson-inference/data/Pose.mp4 webrtc://@:8554/mytest
同样在台式机的浏览器上检测推理结果,下图就是其中的一帧截屏。
请自行尝试其他各种推理算法,并且使用不同的输入源(例如CSI摄像头、USB摄像头、RTP/RTSP输入源)进行测试,使用原理都是一样。
这个项目基于WebRTC服务器上,另外还提供以下四种实用性相当高的框架:
不过最后两个到目前为主还有些问题,作者仍在尽量改善,对于熟悉这些框架的读者,可以自行访问https://github.com/dusty-nv/jetson-inference/#webapp-frameworks,根据不同功能进入项目分支,然后进行调试与修改。【完】