跳到主要内容

5.4.9 智能盒子

功能介绍​

智能盒子 App 功能为实现 IPC 视频流输入后智能分析,App 由 RTSP 视频流、视频解码、人体人脸检测、图像编码、Web 展示端组成,流程如下图:

智能盒子 App 从 RTSP 解码到 Web 展示的流程图

对应实际的客户应用中显示部分由客户的业务系统完成,智能盒子的主要功能由 RTSP 视频流、视频解码、人体人脸检测,智能结果和图像发布给客户的业务系统,流程如下图:

智能盒子向客户业务系统发布智能结果与图像的应用流程图

代码仓库: (https://github.com/D-Robotics/hobot_rtsp_client.git)

支持平台​

平台运行方式
RDK X3, RDK X3 ModuleUbuntu 22.04 (Humble)
RDK X5, RDK X5 ModuleUbuntu 22.04 (Humble)
RDK S100, RDK S100PUbuntu 22.04 (Humble)
RDK S600Ubuntu 24.04 (Jazzy)

准备工作​

  1. RDK 已烧录好 RDK OS 系统。

  2. RDK 安装 TogetheROS.Bot 参照apt 安装与升级。

  3. 准备支持传输 H264/H265 码流 RTSP 协议的 IPC 设备,并且配置同一网段的 IP 地址。

  4. 和 RDK 在同一网段(有线或者连接同一无线网,IP 地址前三段[192.168.1.x]需保持一致)的 PC.

  5. 系统配置成性能模式

sudo bash -c "echo performance > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor"
  1. 启动多路时,ion_size 配置成 1G,请参考srpi-config 配置
  1. 启动多路时,ion_size 配置成 1G,请参考srpi-config 配置
  1. 启动多路时,ion_size 配置成 1G,请参考srpi-config 配置
  1. 启动多路时,ion_size 配置成 1G,请参考srpi-config 配置

使用介绍​

多路启动的方法​

channle 1(终端 1):

# 配置tros.b环境
source /opt/tros/setup.bash
# 配置tros.b环境
source /opt/tros/humble/setup.bash
# 配置tros.b环境
source /opt/tros/jazzy/setup.bash
# 设置不同的域
export ROS_DOMAIN_ID=101

# 从TogetheROS的安装路径中拷贝出运行示例需要的配置文件。
cp -r /opt/tros/${TROS_DISTRO}/lib/dnn_node_example/config/ .

# 启动launch文件
ros2 launch hobot_rtsp_client hobot_rtsp_client_ai_websocket_plugin.launch.py hobot_rtsp_url_num:=1 hobot_rtsp_url_0:='rtsp://admin:admin123@10.112.148.57:554/0' hobot_transport_0:='udp' websocket_channel:=0

channle 2(终端 2):

# 配置tros.b环境
source /opt/tros/setup.bash
# 配置tros.b环境
source /opt/tros/humble/setup.bash
# 配置tros.b环境
source /opt/tros/jazzy/setup.bash
# 设置不同的域
export ROS_DOMAIN_ID=102

# 从TogetheROS的安装路径中拷贝出运行示例需要的配置文件。
cp -r /opt/tros/${TROS_DISTRO}/lib/dnn_node_example/config/ .

# 启动launch文件
ros2 launch hobot_rtsp_client hobot_rtsp_client_ai_websocket_plugin.launch.py hobot_rtsp_url_num:=1 hobot_rtsp_url_0:='rtsp://admin:admin123@10.112.148.58:554/0' hobot_transport_0:='udp' websocket_channel:=1

...

注意

  1. 不同的 channel 设置不同的 ROS_DOMAIN_ID 和 websocket_channel。
  2. 上述展示 2 个通道的方法,依据相关的方法启动其他通道 3~8 等。
  3. launch 脚本带"_plugin",将以 component 模式启动;如 hobot_rtsp_client_ai_websocket_plugin.launch.py 和 hobot_rtsp_client_ai_plugin.launch.py
  4. launch 脚本带"_websocket",可以实现 web 的浏览;如 hobot_rtsp_client_ai_websocket_plugin.launch.py 和 hobot_rtsp_client_ai_websocket.launch.py
  5. 为了增加连接通道的能力,需要多视频流降帧,需要从 IPC 进行帧率配置。

算法模型切换​

launch 脚本中默认的算法引用 yolov8;

请参考 hobot_rtsp_client_ai_websocket_plugin.launch.py

    ComposableNode(
package='dnn_node_example',
plugin='DnnExampleNode',
name='dnn_example',
parameters=[
{"config_file": 'config/yolov8workconfig.json'},
{"dump_render_img": 0},
{"feed_type": 1},
{"is_shared_mem_sub": 0},
{"msg_pub_topic_name": "/hobot_dnn_detection"}

],
extra_arguments=[{'use_intra_process_comms': True}],
)

如果引用算法 yolov5,请修改 config_file 为"config/yolov5xworkconfig.json",参考YOLO,

结果分析​

在 RDK 板端运行终端输出如下信息:

[hobot_codec_republish-2] [WARN] [1732169402.355433988] [hobot_codec_decoder]: Sub imgRaw fps = -1774563328
[hobot_codec_republish-2] [WARN] [1732169402.906547961] [hobot_codec_decoder]: sub h264 1920x1080, fps: 24.7706, pub nv12, fps: 9.17431, comm delay [-8.8148]ms, codec delay [171.2000]ms
[dnn_node_example-4] [WARN] [1732169402.906916796] [mono2d_body_det]: SharedMemImgProcess Recved img encoding: nv12, h: 1080, w: 1920, step: 1920, index: 2508, stamp: 1732169402_735947000, data size: 3133440, comm delay [170.9541]ms
[hobot_codec_republish-3] [WARN] [1732169403.274412126] [hobot_codec_encoder]: sub nv12 1920x1088, fps: 10.8055, pub jpeg, fps: 10.8055, comm delay [164.9091]ms, codec delay [7.6364]ms
[dnn_node_example-4] [WARN] [1732169403.321086039] [mono2d_body_det]: input fps: 10.81, out fps: 10.81, infer time ms: 92, post process time ms: 10
[hobot_codec_republish-2] [WARN] [1732169403.946849482] [hobot_codec_decoder]: sub h264 1920x1080, fps: 25, pub nv12, fps: 10.5769, comm delay [-7.0000]ms, codec delay [168.2727]ms

启另一个终端使用 ros2 topic list 命令可以查询到 RDK 的 topic 信息:

$ export ROS_DOMAIN_ID=101
$ ros2 topic list
/hobot_dnn_detection
/image_decode
/image_mjpeg
/parameter_events
/rosout
/rtsp_image_ch_0

其中 /rtsp_image_ch_0 是 RDK 发布的通过 RTSP 获取 IPC 视频后发布的视频, /hobot_dnn_detection 是 RDK 发布的包含人体检测结果的算法 msg, /image_decode 是 RDK 接收 H264 后解码的 NV12 图片, /image_mjpeg 是 RDK 编码后的 JPEG 图片。

在 PC 端的浏览器输入 http://IP:8000 ,分屏配置

Web 端多路视频分屏配置界面截图

人体人脸检测框,关键点和姿态检测结果在 web 端展示渲染效果(IP 为 RDK 的 IP 地址):

Web 端人体人脸检测框、关键点与姿态渲染效果