ZHCADF0 November 2023 AM62A3-Q1 , AM62A7-Q1 , AM62P-Q1
使用智能 AI 盒向零售店、交通道路、工厂和楼宇中的现有非分析型摄像头增加智能功能,是一种具有成本效益的方法。此类系统接收来自多个摄像头的实时视频流,对其进行解码并在边缘进行智能视频分析,从而减轻了将大型视频流传输回云进行分析的负担。AI 盒的应用包括具有异常或事件检测功能的安全监控系统、用于验证工人在进入危险区域之前是否穿戴了护目镜、安全背心和安全帽等个人防护装备 (PPE) 的工作场所安全系统。
图 7-1 展示了系统的数据流,其中有两个摄像头输入通过以太网进入,需要拆包并解码。通过深度学习进行的智能分析在解码的图像流上运行。TI 提供了一个模型分析器工具 [7],AI 分析设计人员可以根据精度、推理时间和 DDR 带宽消耗选择所需的深度学习模型。表 7-1 中为 SSDLite-MobDet-EdgeTPU-coco 网络提供了一个此类利用的示例。
检测到的目标对象会在其周围绘制边界框,然后重新对图像进行编码。这种类型的设置用于为没有连接分析处理器的传统 FHD 摄像机提供分析功能。
表 7-2 提供系统工程师可以构建的最终资源利用率表。通过 [8] 中提供的 PET 工具估算功耗。
型号 | 分辨率 | 目标 FPS |
MAP 精度 使用 CoCo 数据集 |
延迟 (ms) |
深度学习 利用率 |
DDR 带宽 利用率 |
---|---|---|---|---|---|---|
SSDLite-MobDet- EdgeTPU-coco |
320x320 | 30 | 29.7 | 8.35 | 25% | 543MB/s |
主 IP | 负载 |
---|---|
解码器+ 编码器 | 4 x2MP@ 30fps = 240MP/s |
VPAC3L (ISP) | 4x2MP@ 30fps = 240MP/s |
ARM 加载 @ 1.25GHz | 11.4% |
深度学习 C7/MMA @850MHz | 50% |
DDR 带宽 | 2138MB/s(2522- 384(显示)) |
使用 PET 时的功耗估计值 (85c) | 约为 1.8W |
为了测量 DDR 带宽,构建了一个基于 gstreamer 的流水线,用于模拟图 7-1 中的数据流。在服务器端将 4 个已编码的数据流放到网络上,客户端用于对这些数据流进行解码,查看数据流并重新编码
gst-launch-1.0 -v v4l2src device=/dev/video-rpi-cam0 io-mode=dmabuf-import ! \
video/x-bayer, width=1920, height=1080, framerate=60/1, format=rggb10 ! \
tiovxisp sink_0::device=/dev/v4l-rpi-subdev0 sensor-name="SENSOR_SONY_IMX219_RPI" dcc-isp-file=/opt/imaging/imx219/linear/dcc_viss_10b.bin sink_0::dcc-2a-file=/opt/imaging/imx219/linear/dcc_2a_10b.bin format-msb=9 ! \
video/x-raw, format=NV12, width=1920, height=1080, framerate=30/1 ! \
tiovxmultiscaler name=msc \
msc. ! queue ! video/x-raw, format=NV12, width=1920, height=1080, framerate=30/1 ! v4l2h264enc ! rtph264pay ! udpsink host=192.168.1.134 port=6001 \
msc. ! queue ! video/x-raw, format=NV12, width=1920, height=1080, framerate=30/1 ! v4l2h264enc ! rtph264pay ! udpsink host=192.168.1.134 port=6002 \
msc. ! queue ! video/x-raw, format=NV12, width=1920, height=1080, framerate=30/1 ! v4l2h264enc ! rtph264pay ! udpsink host=192.168.1.134 port=6003 \
msc. ! queue ! video/x-raw, format=NV12, width=1920, height=1080, framerate=30/1 ! v4l2h264enc ! rtph264pay ! udpsink host=192.168.1.134 port=6004
gst-launch-1.0 -v udpsrc port=6001 ! 'application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96' ! \
rtph264depay ! h264parse ! v4l2h264dec capture-io-mode=4 ! tiovxmultiscaler name=msc \
msc. ! queue ! video/x-raw, width=640, height=480, format=NV12 ! kmssink driver-name=tidss \
msc. ! queue ! video/x-raw, format=NV12, width=1920, height=1080 ! v4l2h264enc output-io-mode=5 extra-controls="controls,h264_i_frame_period=60,video_gop_size=60" ! rtph264pay ! udpsink host=128.247.75.190 port=6001 &
gst-launch-1.0 -v udpsrc port=6002 ! 'application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96' ! \
rtph264depay ! h264parse ! v4l2h264dec capture-io-mode=4 ! queue ! v4l2h264enc output-io-mode=dmabuf-import extra-controls="controls,h264_i_frame_period=60,video_gop_size=60" ! rtph264pay ! udpsink host=128.247.75.190 port=6002 &
gst-launch-1.0 -v udpsrc port=6003 ! 'application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96' ! \
rtph264depay ! h264parse ! v4l2h264dec capture-io-mode=4 ! queue ! v4l2h264enc output-io-mode=dmabuf-import extra-controls="controls,h264_i_frame_period=60,video_gop_size=60" ! rtph264pay ! udpsink host=128.247.75.190 port=6003 &
gst-launch-1.0 -v udpsrc port=6004 ! 'application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96' ! \
rtph264depay ! h264parse ! v4l2h264dec capture-io-mode=4 ! queue ! v4l2h264enc output-io-mode=dmabuf-import extra-controls="controls,h264_i_frame_period=60,video_gop_size=60" ! rtph264pay ! udpsink host=128.247.75.190 port=6004 &