使用 Jetson 平台服务进行零样本检测#
概述#
诸如 CLIP 之类的生成式 AI 视觉 Transformer 使得构建能够进行开放词汇对象检测的零样本检测模型成为可能。这意味着,该模型不受一组预定义类别的限制来检测。要检测的对象由用户在运行时配置。
零样本检测 AI 服务支持使用 Jetson 服务快速部署生成式 AI,以在视频直播输入上进行开放词汇检测。零样本检测 AI 服务公开 REST API 端点来控制流输入和要检测的对象。
API 端点 |
描述 |
---|---|
/api/v1/live-stream |
管理 AI 服务可以访问的直播流。 |
/api/v1/detection/classes |
设置要检测的对象类别 |
此 AI 服务以预构建 Docker 容器的形式提供,可以使用 Docker Compose 启动。它通过 JSON 配置文件进行配置,并与基础服务(如 jetson-redis 和 jetson-ingress)集成。我们在参考工作流程资源中提供了示例 Compose 和配置文件,以便于部署。

服务 |
必需 |
注释 |
---|---|---|
jetson-ingress |
✓ |
需要通过 API 网关端口 (30080) 访问零样本检测 REST API。 |
jetson-redis |
✓ |
需要用于检测元数据输出。 |
jetson-vst |
⭘ |
建议用于管理可用作 AI 服务输入的 RTSP 流。如果与 SDR 集成则为必需。 |
jetson-storage |
⭘ |
建议用于帮助存储容器和模型,但不是必需的。此服务所需的存储空间应适合大多数 Jetson 设备默认配置。 |
jetson-firewall |
⭘ |
建议在实际部署中使用,以限制对 API 网关端口以外端口的访问。 |
jetson-monitoring |
✗ |
仅在需要跟踪系统指标时需要 |
jetson-sys-monitoring |
✗ |
仅在需要跟踪系统指标时需要 |
jetson-gpu-monitoring |
✗ |
仅在需要跟踪 GPU 指标时需要 |
jetson-networking |
✗ |
仅在使用 VST 和带有 VLM 服务的 IP 摄像头时需要 |
入门指南#
在开始使用此示例之前,请仔细阅读先决条件部分。
先决条件#
首先,请按照快速入门指南设置您的 Jetson 平台服务系统。建议同时按照 Hello World 示例熟悉 Jetson 平台服务。在继续之前,请使用 Docker Compose down 命令关闭任何先前启动的 JPS 示例,如 AI-NVR。
零样本检测 AI 服务在 RTSP 流上运行。RTSP 流可以来自任何来源,例如 IP 摄像头、视频存储工具包 (VST) 或 NVStreamer。获取 RTSP 流进行测试的最快方法是使用 NVStreamer,它可以将视频文件作为 RTSP 流提供。要了解如何使用 NVStreamer 创建 RTSP 流,请参阅Jetson Orin 上的 NVStreamer页面。
零样本检测 AI 服务以预构建 Docker 容器的形式提供,可以使用 Docker Compose 启动。它通过 JSON 配置文件进行配置,并与 Jetson 平台服务(如 jetson-redis 和 jetson-ingress)集成。
要获取 Docker Compose 和配置文件,请从 NGC 或 SDK Manager 下载 Jetson 平台服务资源包。下载后,找到 zero_shot_detection-2.0.0.tar.gz 文件并将其放在您的主目录中。以下命令将假定 tar 文件从您的主目录开始。
cd ~/
tar -xvf zero_shot_detection-2.0.0.tar.gz
cd ~/zero_shot_detection/example_1
零样本检测 AI 服务将使用 jetson-ingress 和 jetson-redis 服务。需要配置 jetson-ingress 服务以公开零样本检测 REST API。将提供的默认配置复制到相应的服务配置目录。
sudo cp config/zero_shot_detection-nginx.conf /opt/nvidia/jetson/services/ingress/config
然后重启基础服务
sudo systemctl start jetson-ingress
sudo systemctl start jetson-redis
注意
如果之前启动过任何 Jetson 服务,请使用“restart”命令而不是“start”。
现在部署零样本检测 AI 服务!
sudo docker compose up -d
要检查是否所有必要的容器都已启动,您可以运行以下命令
sudo docker ps
输出应类似于下图。

注意
首次启动时,它将自动下载并优化零样本检测模型。这将需要一些时间。
与零样本检测服务交互#
通过 REST API 控制流输入
您可以首先添加一个 RTSP 流,供零样本检测模型使用,使用以下 curl 命令。这将在 live-stream 端点上使用 POST 方法。
将 0.0.0.0 替换为您的 Jetson IP,并将 RTSP 链接替换为您的 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/video.mp4"
}'
注意
除了 curl 命令之外,REST API 还可以通过 API 文档页面直接进行测试,该页面在零样本检测服务启动时在http://0.0.0.0:5010/docs提供。
此请求将返回一个唯一的流 ID,该 ID 稍后用于设置检测类别和删除流。
{
"id": "a782e200-eb48-4d17-a1b9-5ac0696217f7"
}
您还可以使用 live-stream 端点上的 GET 方法列出添加的流及其 ID
curl --location 'http://0.0.0.0:5010/api/v1/live-stream'
添加检测类别
零样本检测模型能够在运行时更新其检测类别。此端点接受要检测的对象列表和关联的阈值。阈值是检测的灵敏度。较高的值将减少误报。较低的值将增加误报。0.1-2.0 之间的值通常效果良好。设置检测类别后,模型将持续评估输入流。
目前,此服务仅支持 1 个流,但在未来,此 API 将允许支持多流。
curl --location 'http://0.0.0.0:5010/api/v1/detection/classes' \
--header 'Content-Type: application/json' \
--data '{
"objects": ["a zebra", "an elephant", "a giraffe"],
"thresholds": [0.03, 0.02, 0.01],
"id": "a782e200-eb48-4d17-a1b9-5ac0696217f7"
}'
查看 RTSP 流输出
添加流后,它将传递到输出 RTSP 流。您可以在rtsp://0.0.0.0:5011/out查看此流。添加查询或警报后,我们可以在此输出流上查看 VLM 响应。
查看检测元数据输出
可以从命令行使用redis-cli来查看元数据输出。
redis-cli XREAD COUNT 1 BLOCK 5000 STREAMS owl $
请注意,如果在容器运行时系统重新启动,它将自动恢复,但添加的流和检测类别将不会持久保存。它们需要重新添加。为了使流在重启后持久保存,AI 服务可以与 SDR 结合使用,如零样本检测工作流程页面所示。
关闭
要关闭示例,您可以首先使用 live-stream 端点上的 DELETE 方法删除流。请注意,流 ID 已添加到此 URL 路径中。
curl --location --request DELETE 'http://0.0.0.0:5010/api/v1/live-stream/a782e200-eb48-4d17-a1b9-5ac0696217f7'
然后从用于启动示例的 compose.yaml 文件所在的同一文件夹中运行
sudo docker compose down
总而言之,本节介绍了如何启动零样本检测 AI 服务,然后通过 REST API 与其交互,并查看 RTSP 输出和 Redis 输出。
以下是与零样本检测服务交互时有用的地址摘要。
零样本检测服务的访问点
名称 |
本地 URI |
API 网关 URI |
描述 |
---|---|---|---|
REST API 文档 |
零样本检测 AI 服务 REST API 文档 |
||
REST API |
零样本检测 AI 服务的控制 REST API |
||
RTSP 输出 |
检测叠加输出 |
配置#
所有配置文件都可以在 ~/zero_shot_detection/example_1/config
目录下找到。可用的配置选项分为两类。
零样本检测服务配置
main_config.json
基础服务配置
zero_shot_detection-nginx.conf
main_config.json
main_config.json 配置了流式传输管道,该管道将使用 NanoOWL 评估流输入,并公开 REST API 以配置流输入和检测类别。
{
"api_server_port": 5010,
"stream_output": "rtsp://0.0.0.0:5011/out",
"redis_host": "0.0.0.0",
"redis_port": 6379,
"redis_stream": "owl",
"redis_output_interval": 60,
"log_level": "INFO"
}
键 |
值类型 |
值示例 |
描述 |
注释 |
---|---|---|---|---|
“api_server_port” |
int |
5010 |
主管道将公开其 REST API 以进行流和模型控制的端口 |
|
“stream_output” |
int |
5012 |
AI 服务生成的 RTSP 流的输出 URI。 |
|
“redis_host” |
str |
“0.0.0.0” |
Redis 服务器的主机 |
如果使用 jetson-redis 服务在本地运行 Redis,请将此值设置为“0.0.0.0”。 |
“redis_port” |
str |
6379 |
要连接的 Redis 服务器端口 |
如果使用 jetson-redis 服务在本地运行 Redis,请将此值设置为 6379。 |
“redis_stream” |
str |
“owl” |
用于输出元数据的 Redis 流名称 |
|
“redis_output_interval” |
str |
60 |
将根据此值将每 N 帧的元数据输出到 Redis。 |
|
“log_level” |
str |
“INFO” |
基于 Python 的日志级别 |
支持的值:[“DEBUG”, “INFO”, “WARNING”, “ERROR”, “CRITICAL”] |
基础服务配置
zero-shot-detection-nginx.conf
zero-shot-detection-nginx.conf 用于配置 jetson-ingress 服务(API 网关),以将 HTTP 流量路由到零样本检测 AI 服务。jetson-ingress 的文档可在API 网关 (Ingress)中找到。
工作流程集成#
零样本检测服务可以与 Jetson 平台服务的其他部分集成,以构建用于零样本检测的完整端到端工作流程。要了解有关完整工作流程以及零样本检测服务如何与 VST、SDR、监控和 Redis 集成的更多信息,请转到零样本检测工作流程页面。
延伸阅读#
要了解有关零样本检测 AI 服务的更多信息,请查看 jetson-platform-services 存储库上的开源代码。
Jetson 上对零样本检测的支持来自 NanoOWL 项目。
有关 Jetson 上的基准测试和其他生成式 AI 示例,请访问 Jetson AI 实验室。