Featured image of post Jetson-inference 踩坑记录

Jetson-inference 踩坑记录

记录 Jetson-inference 实现过程中遇到的问题。

项目地址:Github

Jetson-inference 是一个 Nvidia 官方推出的用于 Jetson 开发板的深度学习快速上手项目。通过这一项目,可以快速在 Jetson 上部署图像分类、目标识别、语义分割等计算机视觉任务。最近我在 Jetson Orin Nano 8GB 开发板上部署时,遇到了如下一些问题,记录一下以防忘记。

编译安装问题

根据官方的 编译安装文档,可以正常在系统的 Python 环境下安装 Jetson-inference,问题主要发生在 conda 虚拟环境下安装 Jetson-inference,我还在 GitHub 上提了个 issue,后来通过自己的尝试解决了。

  1. 使用文档中的方法,修改 Cmakelists.txt ,将 Python 路径修改为 conda 环境的所在路径。或者直接将已经在本机 Python 环境安装好的 Jetson-inference 相关包拷贝到 conda 环境下。主要涉及 jetson Jetson jetson_inference jetson_utils 四个目录和 jetson_utils_python.so jetson_inference_python.so 两个文件。
  2. 设置环境变量。export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libffi.so.7
  3. 可正常 import jetson_inferenceimport jetson_utils

无显示器运行问题

Jetson-inference 默认使用 OpenGL 窗口作为视频输出,导致在 Jetson 开发板不连接显示器时即会报错,无法正常完成推理。

解决方案是在命令后附上 --headless 参数即可,这样在运行时不会弹出 OpenGL 窗口,通过 WebRTC 等方式即可在远程查看视频流内容。

远程显示问题

根据 官方文档,Jetson-inference 支持 WebRTC、RTP、RTSP、保存为视频、保存为图片(序列)、OpenGL 窗口等显示输出方式。其中,OpenGL 方式为默认显示方式,需要 Jetson 连接显示器才可使用,具体问题见上一节。

对于远程显示,先后尝试了 RTP、WebRTC 方法。使用 RTP 方式首先需要安装 G-Streamer 或者 VLC,实测在 mac mini 上延迟惨不忍睹。而 WebRTC 方式仅需要 Web 浏览器即可浏览 Jetson 发出的视频流,以后应首选该方案进行远程视频显示。

根据官方对于 WebRTC 方法的 介绍,首先需要开启 SSL,开启方法如下:

1
2
cd ~/Lab/jetson-inference/data
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 365 -nodes -subj '/CN=localhost'

在通过命令向远程输出图像时,有两种方式。第一是设置环境变量 SSL_KEY SSL_CERT,方法如下:

1
2
export SSL_KEY=/jetson-inference/data/key.pem
export SSL_CERT=/jetson-inference/data/cert.pem

第二是直接在 video-viewer 命令后使用 --ssl-keyssl-cert 附上公钥、证书的文件路径。一个具体的例子如下:

1
video-viewer /dev/video4 webrtc://@:8554/my_output --ssl-key ~/Lab/jetson-inference/data/key.pem --ssl-cert ~/Lab/jetson-inference/data/cert.pem --headless

在远程终端上,在浏览器上访问 https://<jetson-IP>:8554 即可查看视频输出,同时下方还有视频的各项参数。