跳转到内容

识别跟随示例

本示例利用 DeepStream、YOLOv8 和 TensorRT 对场景中目标人员进行识别和跟踪,然后计算目标位置并传输给运动主机,使机器人能够跟随目标人员。基于 DeepStream 的硬件解码获取 h264 编码的 720p 分辨率 rtsp 视频流,使用 TensorRT 加速 Yolov8 人体检测模型,在开放场景中识别人体,识别速度约 20fps,跟踪速度约 10fps。

本示例分为识别和跟踪两部分:

  1. 识别算法:对视觉进行深度学习神经网络识别,找到图片中人体的位置。当画面中出现多个人体时,先识别出当前帧中的所有人体,然后基于深度学习提取每帧视频中识别出的人体特征,逐一比较以确定同一个人在前后帧中的轨迹。
  2. 跟踪算法:用户可在画面中选择想要机器人跟随的目标人体,机器人可实现实时锁定和持续跟踪。识别算法可判断人与机器人的方向和距离,使机器人做出相应响应(平移或旋转),并根据机器人与被跟踪人员的距离实时调整速度:
    • 太近:目标过近时,机器人停止运动以防止碰撞。
    • 较近:目标较近时,机器人实时动态减速以靠近目标。
    • 较远:目标较远时,机器人以最大速度运动。

本示例中使用的 yolov8 和 sdk_hub 源码分别来自 ultralytics 和 hub-sdk。

注意: 程序启动时需要初始化视频解码和深度学习推理环境,耗时约 40s。如果长时间无法启动功能,请连接控制器到机器人检查视频流是否正常工作。

  1. 打开终端,输入以下命令启动程序:
Terminal window
cd /home/ysc/lite_cog/track/src # for ROS1
cd /home/ysc/lite_cog_ros2/track/src # for ROS2
python3 run_tracker.py
  1. 使用 App 使机器人起立并开启自主模式。

  2. 当有人出现时,系统会对所有已识别的人员编号并显示在屏幕上。使用键盘输入想要跟随的人员编号并按回车确认。

注意: 输入目标编号时,请确保视频窗口在最上层。

  1. 机器人将跟踪并识别目标。

  2. 跟踪过程中可按回车键重置目标,或当目标丢失显示 “Miss Object” 时重置。

  3. 按 Ctrl+C 结束程序。

本示例在 ~/lite_cog/track 和 ~/lite_cog_ros2/track 工作空间中提供了两个包,分别对应不同的 ROS 版本。两者的区别仅在 /src/RobotController 文件夹中 RobotController.py 的 kUseRos1Transfer = True 这一行,用于指定使用 ROS1 还是 ROS2 进行消息发送。值为 True 时使用 ROS1,值为 False 时使用 ROS2。

people_tracking 包结构如下:

People_tracking
├── model
│ ├── export_engine.sh
│ ├── yolov8n_amd.engine
│ ├── yolov8n_arm.engine
│ ├── yolov8n.onnx
│ └── yolov8n.pt
└── src
├── GStreamerWrapper
│ └── GStreamerWrapper.py
├── hub_sdk
├── RobotController
│ ├── FpsCounter
│ │ ── FpsCounter.py
│ ├── RobotController.py
│ ├── ROSTransfer
│ │ ├── ROS1Transfer.py
│ │ ├── ROS2Transfer.py
│ │ └── TransferConstants.py
│ └── YoloWrapper
│ ├── CocoTypeId.py
│ └── YoloWrapper.py
├── run_tracker.py
├── test
│ ├── pull.py
│ ├── pull.sh
│ └── yolov8.py
└── ultralytics

各文件说明:

  1. run_tracker.py:主程序。
  2. GStreamerWrapper:基于 DeepStream 的 GStreamer 硬件解码器,用于获取 RTSP 视频流。
  3. RobotController.py:主要运行逻辑体现在其 Run() 函数中,用于识别视频流获取的图像中的人体,然后发送运动指令。
  4. ultralytics:开源 Yolov8 程序包,用于对视频流获取的图像帧进行推理和跟踪,是 RobotController 中 YoloWrapper 的运行依赖。ultralytics/cfg 文件夹是各种 Yolov8 配置文件的存储地址,每个配置文件都有完整的注释。
  5. sdk_hub:开源 sdk_hub 程序包,是 Yolov8 包的运行依赖。