在Seeed Studio reComputer Jetson Orin使用英伟达最新发布的VLM视觉语言大模型
所有教程都免费开源,请动动小手点个小星星https://github.com/Seeed-Projects/jetson-examples
简介
视觉语言模型(VLMs)是支持图像、视频和文本的多模态模型,它们结合了大型语言模型和视觉变换器。基于这一能力,它们能够支持通过文本提示来查询视频和图像,从而实现与视频聊天、定义基于自然语言的警报等功能。VLM AI服务能够快速部署VLMs,以用于视频洞察应用。VLM服务公开了REST API端点,用于配置视频流输入、设置警报并以自然语言询问关于输入视频流的问题。
本教程将指导如何在Seeed Studio reComputer J4012 Jetson Orin NX上运行VLM。
在reComputer Jetson Orin使用英伟达最新发布的VLM视觉语言大模型
要求
在开始设置过程之前,请确保您的系统满足以下前提条件:
- 运行Ubuntu
22.04
或更高版本的Seeed Studio reComputer J4012 Orin NX 16G。 - 驱动版本:
535.113.01
,Jetpack版本:6.0
,CUDA版本:12.2
。 - 确保已安装JetPack和相关的Jetson服务包。
sudo apt-get install nvidia-jetpack sudo apt install nvidia-jetson-services
- 可以通过RTSP流传输IP摄像头或本地视频(推荐使用我们的NVStreamer教程进行RTSP流传输)。
开始使用
步骤 1:从NGC下载应用程序包 vlm-1.1.0.tar.gz
到Jetson。使用此链接:NGC参考工作流和资源。你需要输入NGC凭证。在页面上,使用**Download
**菜单(右上角)中的选项之一:
tar -xvf vlm-1.1.0.tar.gz
cd ~/vlm/example_1
步骤 2:VLM AI服务将使用jetson-ingress
和jetson-monitoring
服务。你需要配置这两个服务以与VLM AI服务集成。将提供的默认配置复制到相应的服务配置目录:
sudo cp config/vlm-nginx.conf /opt/nvidia/jetson/services/ingress/config
sudo cp config/prometheus.yml /opt/nvidia/jetson/services/monitoring/config/prometheus.yml
sudo cp config/rules.yml /opt/nvidia/jetson/services/monitoring/config/rules.yml
步骤 3:运行基础服务:
sudo systemctl start jetson-ingress
sudo systemctl start jetson-monitoring
sudo systemctl start jetson-sys-monitoring
sudo systemctl start jetson-gpu-monitoring
sudo systemctl start jetson-redis
sudo systemctl start jetson-vst
步骤 4:首次启动VLM服务时,它将自动下载并量化VLM。此过程可能需要一些时间。如果在Orin NX16上部署,你可能需要挂载更多的SWAP空间,因为量化过程可能会消耗大量内存。运行以下命令以挂载更多的SWAP空间:
sudo fallocate -l 10G /data/10GB.swap
sudo mkswap /data/10GB.swap
sudo swapon /data/10GB.swap
步骤 5:启动VLM AI服务:
cd ~/vlm/example_1
sudo docker compose up -d
要检查所有必需的容器是否已启动,你可以运行以下命令:
sudo docker ps
添加RTSP流输入
你可以首先为VLM模型添加RTSP流,使用以下curl命令。建议使用NVStreamer教程进行流传输。
-
步骤 1:将
0.0.0.0
替换为你的Jetson IP,将liveStreamUrl
链接替换为你的RTSP链接,然后在终端中输入以下命令:curl --location 'http://0.0.0.0:5010/api/v1/live-stream' \ --header 'Content-Type: application/json' \ --data '{ "liveStreamUrl": "rtsp://0.0.0.0:31554/nvstream/root/store/nvstreamer_videos/car.mp4" }'
注意:除了curl命令,你还可以直接通过API文档页面测试REST API,该页面在零样本检测服务启动时可通过
http://0.0.0.0:5010/docs
访问。 -
步骤 2:执行第一个步骤后,将返回一个ID。你需要记录此ID以在后续步骤中使用:
{"id": "a782e200-eb48-4d17-a1b9-5ac0696217f7"}
你也可以使用以下命令稍后获取ID:
curl --location 'http://0.0.0.0:5010/api/v1/live-stream'
要根据ID删除流,可以使用以下命令:
curl --location --request DELETE 'http://0.0.0.0:5010/api/v1/live-stream/{id}'
设置警报
警报是VLM将在直播输入上持续评估的问题。对于每个警报规则集,VLM将尝试根据直播流的最新帧判断其是否为True或False。由VLM确定的True和False状态将发送到websocket和Jetson监控服务。
设置警报时,警报规则应以是/否问题的形式表达。例如“是否有火?”或“是否有烟?”。请求的主体还必须包含与添加RTSP流时返回的流ID相对应的“id”字段。
默认情况下,VLM服务最多支持10个警报规则。这可以通过调整配置文件来增加。
步骤 1:将0.0.0.0
替换为你的reComputer IP地址,修改alerts
以包含你需要警报的对象,使用上一步返回的id
。完成命令后,在终端中输入以下内容:
curl --location 'http://0.0.0.0:5010/api/v1/alerts' \
--header 'Content-Type: application/json' \
--data '{
"alerts": ["is there a fire?", "is there smoke?"],
"id": "a782e200-eb48-4d17-a1b9-5ac0696217f7"
}'
查看RTSP流结果
检测输出将通过rtsp://reComputer_ip:5011/out
进行流式传输。我们提供了一个Python脚本用于可视化视频流输出。你需要提前安装opencv-python库,然后运行以下Python脚本:
- 步骤 1:安装opencv-python库:
pip install opencv-python
- 步骤 2:运行以下Python脚本:
import cv2 rtsp_url = "rtsp://reComputer_ip:5011/out" cap = cv2.VideoCapture(rtsp_url) if not cap.isOpened(): print("Cannot open RTSP stream") exit() while True: ret, frame = cap.read() if not ret: print("Failed to retrieve frame") break cv2.imshow('RTSP Stream', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()
关闭服务
要停止零样本检测服务,请在compose.yaml
文件所在目录
中运行以下命令:
sudo docker compose down
参考链接🔧
内容贡献者
Seeed Studio–Zhu Yaohui