Vision AI 概述#
Tokkio Vision AI 微服务是一个强大的视频推理解决方案,旨在从用户视频流中提取面部边界框和身体姿势。它使用 GXF 和 Deepstream 框架实现。
微服务的使用方式如下
用户连接 新用户连接到 Tokkio 用户界面 (UI)。
流初始化 DS SDR 向 Vision AI 微服务发送 HTTP 请求,将用户的视频流作为 RTSP 流传输。
实时处理 Vision AI 微服务对视频流的每一帧执行实时计算机视觉分析,并将检测到的元数据输出到 visionai Redis 通道。
用户断开连接 当用户关闭 UI 时,DS SDR 向 Vision AI 微服务发送“删除流”HTTP 请求。
流终止 Vision AI 微服务停止处理视频流。
如果指定时间内发生数据丢失,微服务会自动重新连接到输入视频流,确保持续运行。此架构提供了一种无缝且高效的方式来实时分析视频流,通过精确的面部和身体姿势检测增强用户交互。
REST 接口#
视觉微服务的 REST API 接口可用于发送和删除实时视频流。端点由 Tokkio 工作流程中的 SDR 调用。我们还在下面提供了端点以供参考
使用 RTSP 将视频流发送到视觉微服务
import requests
from datetime import datetime, timezone
# Get current date and time in UTC
current_datetime_utc = datetime.now(timezone.utc)
# Format the datetime object to the desired string format
formatted_datetime = current_datetime_utc.strftime("%Y-%m-%dT%H:%M:%SZ")
url = 'http://IP:8082/AddStream/stream'
camera_id = '123'
configData = {
"alert_type": "camera_status_change",
"created_at": formatted_datetime,
"event": {
"camera_id": camera_id,
"camera_name": "webcam_" + camera_id,
"camera_url": "rtsp_url",
"change": "camera_streaming"
},
"source": "vst"
}
response = requests.post(json=configData, url=url, timeout=1)
将本地视频发送到视觉微服务
import requests
from datetime import datetime, timezone
# Get current date and time in UTC
current_datetime_utc = datetime.now(timezone.utc)
# Format the datetime object to the desired string format
formatted_datetime = current_datetime_utc.strftime("%Y-%m-%dT%H:%M:%SZ")
url = 'http://IP:8082/AddStream/stream'
camera_id = '123'
configData = {
"alert_type": "camera_status_change",
"created_at": formatted_datetime,
"event": {
"camera_id": camera_id,
"camera_name": "webcam_" + camera_id,
"camera_url": "file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h265.mp4",
"change": "camera_streaming"
},
"source": "vst"
}
response = requests.post(json=configData, url=url, timeout=1)
删除流
import requests
from datetime import datetime, timezone
# Get current date and time in UTC
current_datetime_utc = datetime.now(timezone.utc)
# Format the datetime object to the desired string format
formatted_datetime = current_datetime_utc.strftime("%Y-%m-%dT%H:%M:%SZ")
url = 'http://IP:8082/RemoveStream/stream'
camera_id = '123'
configData = {
"alert_type": "camera_status_change",
"created_at": formatted_datetime,
"event": {
"camera_id": camera_id,
"camera_name": "webcam_" + camera_id,
"camera_url": "rtsp_url",
"change": "camera_streaming"
},
"source": "vst"
}
response = requests.post(json=configData, url=url, timeout=1)
输出模式#
vision 微服务在 visionai 通道中发送的 Redis 事件的模式如下:sensorId 与 REST 调用中提供的 camera_id 相同。
{ "version" : "4.0", "id" : "frame_id", "@timestamp" : "YYYY-MM-DDTHH:MM:SS.sssZ", "sensorId" : "123", "objects" : [ "0|xmin|ymin|xmax|ymax|Face| #|pose2D|18| nose,x,y,conf| neck,-1,-1,-1| right-shoulder,x,y,conf| right-elbow,x,y,conf| right-wrist,x,y,conf| left-shoulder,x,y,conf| left-elbow,x,y,conf| left-wrist,x,y,conf| right-hip,x,y,conf| right-knee,x,y,conf| right-ankle,x,y,conf| left-hip,x,y,conf| left-knee,x,y,conf| left-ankle,x,y,conf| right-eye,x,y,conf| left-eye,x,y,conf| right-ear,x,y,conf| left-ear,x,y,conf| "] }
关于模型#
视频推理服务使用 Movenet 模型,该模型根据 Apache 2 许可证分发。为了提高性能,该模型被转换为 NVIDIA TensorRT ,对其进行优化以实现低延迟和高吞吐量。这种转换确保了高效处理,使其适用于实时应用程序。
UCF 微服务#
- 示例参数:
ds-visionai: checkInterval: '1' jitterbufferLatency: 2000 peerPadIdSameAsSourceId: 'true' redisCfg: payloadkey: message topic: visionai rtspReconnectInterval: 10 streammuxResolution: height: 720 width: 1280 videoSink: none
示例连接:
connections:
ds-visionai/redis: redis-timeseries/redis
tokkio-ds-sdr/httpds: ds-visionai/http-api
所有参数:
参数 |
描述 |
---|---|
dsServicePort: (integer ) |
DS 服务端口。默认 8084 |
remoteAccess: (string ) |
启用远程访问或仅限本地主机。默认 ‘True’ |
addStreamApiPath: (string ) |
服务添加流的 API 路径。默认 AddStream |
removeStreamApiPath: (string ) |
服务删除流的 API 路径。默认 RemoveStream |
getStatusApiPath: (string ) |
服务获取状态的 API 路径。默认 Status |
apiResourceName: (string ) |
流的 REST API 资源名称。默认 stream |
recycleSourceId: (string ) |
删除流后回收并重用 DS 内部源 ID。默认 ‘False’ [强制性:False, 允许值:{ True, False }] |
maxNumSources: (integer ) |
允许添加的最大源数量。默认 6 |
batchSize: (integer ) |
streammux 和推理的批处理大小。默认 8 |
rtspReconnectInterval: (integer ) |
自上次从 RTSP 源接收到数据以来等待强制重新连接的超时时间(秒)。0=禁用超时。默认 10 |
rtpProtocol: (integer ) |
要使用的 RTP 协议。0 表示 TCP/UDP;4 表示仅 TCP。默认 0 [强制性:False, 允许值:{ 0, 4 }] |
peerPadIdSameAsSourceId: (string ) |
在 streammux 流索引中使用来自源流的 ID。默认 ‘True’ [强制性:False, 允许值:{ true, false }] |
jitterbufferLatency: (integer ) |
管道源组件抖动缓冲区大小(毫秒)。默认 100 [强制性:False] |
fileLoop: (string ) |
循环文件输入。默认 ‘True’ [强制性:False, 允许值:{ true, false }] |
msgConvPayloadType: (integer ) |
DS msgbroker 负载模式。0 DS;1 DS 最小;256 保留;257 自定义。默认 1 [强制性:False, 允许值:{ 0, 1, 256, 257 }] |
redisCfg: (object ) |
Redis broker 配置 |
|
消息的负载密钥。默认 metadata |
|
redis 消息的主题或流名称。默认 ‘test’ |
enableLatency: (string ) |
是否启用每帧延迟测量。默认 ‘false’ [强制性:False, 允许值:{ true, false }] |
enableCompLatency: (string ) |
是否启用每组件延迟;仅当 enableLatency 为 ‘True’ 时使用。默认 ‘False’ [强制性:False, 允许值:{ true, false }] |
videoSink: (string ) |
视频接收器类型。默认 ‘none’ [强制性:False, 允许值:{ rtsp, fake, file, none }] |
sinkSync: (string ) |
管道接收器组件在时钟上同步。默认 ‘false’ [强制性:False, 允许值:{ true, false }] |
streammuxResolution: (object ) |
DS 输入视频分辨率配置 |
|
预期的视频帧高度。默认 1080 |
|
预期的视频帧宽度。默认 1920 |
checkInterval: (string ) |
init 容器检查间隔(秒)。默认 ‘1’ |