跳到主要内容

人手关键点检测

功能介绍

人手关键点检测算法示例订阅图片和包含人手框信息的智能 msg,利用 BPU 进行算法推理,发布包含人手关键点信息的算法 msg。

人手关键点索引如下图:

人手关键点索引编号示意图

代码仓库:

(https://github.com/D-Robotics/hand_lmk_detection)

(https://github.com/D-Robotics/mono2d_body_detection)

应用场景:人手关键点检测算法主要用于捕捉人手部的骨骼关键点,可实现自定义手势识别等功能,主要应用于智能家居、虚拟现实、游戏娱乐等领域。

支持平台

平台运行方式示例功能
RDK X3, RDK X3 ModuleUbuntu 20.04 (Foxy), Ubuntu 22.04 (Humble)启动 MIPI/USB 摄像头,并通过 Web 展示推理渲染结果
RDK X5, RDK X5 ModuleUbuntu 22.04 (Humble)启动 MIPI/USB 摄像头,并通过 Web 展示推理渲染结果

算法信息

模型平台输入尺寸推理帧率(fps)
handLMKsX38x21806
模型平台输入尺寸推理帧率(fps)
handLMKsX58x21948

准备工作

RDK 平台

  1. RDK 已烧录好 Ubuntu 系统镜像。

  2. RDK 已成功安装 TogetheROS.Bot。

  3. RDK 已安装 MIPI 或者 USB 摄像头。

  4. 确认 PC 机能够通过网络访问 RDK。

使用介绍

人手关键点检测(hand_lmk_detection)package 订阅 sensor package 发布的图片以及人体检测和跟踪 package 发布的人手框检测结果,经过推理后发布算法 msg,通过 websocket package 实现在 PC 端浏览器上渲染显示发布的图片和对应的算法结果。

使用 MIPI 摄像头发布图片

# 配置tros.b环境
source /opt/tros/setup.bash
# 从tros.b的安装路径中拷贝出运行示例需要的配置文件。
cp -r /opt/tros/${TROS_DISTRO}/lib/mono2d_body_detection/config/ .
cp -r /opt/tros/${TROS_DISTRO}/lib/hand_lmk_detection/config/ .

# 配置MIPI摄像头
export CAM_TYPE=mipi

# 启动launch文件
ros2 launch hand_lmk_detection hand_lmk_detection.launch.py

使用 USB 摄像头发布图片

# 配置tros.b环境
source /opt/tros/setup.bash
# 从tros.b的安装路径中拷贝出运行示例需要的配置文件。
cp -r /opt/tros/${TROS_DISTRO}/lib/mono2d_body_detection/config/ .
cp -r /opt/tros/${TROS_DISTRO}/lib/hand_lmk_detection/config/ .

# 配置USB摄像头
export CAM_TYPE=usb

# 启动launch文件
ros2 launch hand_lmk_detection hand_lmk_detection.launch.py

结果分析

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

[mono2d_body_detection-3] (MOTMethod.cpp:39): MOTMethod::Init config/iou2_euclid_method_param.json
[mono2d_body_detection-3]
[mono2d_body_detection-3] (IOU2.cpp:34): IOU2 Mot::Init config/iou2_euclid_method_param.json
[mono2d_body_detection-3]
[mono2d_body_detection-3] (MOTMethod.cpp:39): MOTMethod::Init config/iou2_method_param.json
[mono2d_body_detection-3]
[mono2d_body_detection-3] (IOU2.cpp:34): IOU2 Mot::Init config/iou2_method_param.json
[mono2d_body_detection-3]
[mono2d_body_detection-3] (MOTMethod.cpp:39): MOTMethod::Init config/iou2_method_param.json
[mono2d_body_detection-3]
[mono2d_body_detection-3] (IOU2.cpp:34): IOU2 Mot::Init config/iou2_method_param.json
[mono2d_body_detection-3]
[mono2d_body_detection-3] (MOTMethod.cpp:39): MOTMethod::Init config/iou2_method_param.json
[mono2d_body_detection-3]
[mono2d_body_detection-3] (IOU2.cpp:34): IOU2 Mot::Init config/iou2_method_param.json
[mono2d_body_detection-3]
[hand_lmk_detection-4] [WARN] [1660269063.553205182] [hand_lmk_det]: input fps: 31.43, out fps: 31.47
[hand_lmk_detection-4] [WARN] [1660269064.579457516] [hand_lmk_det]: input fps: 30.21, out fps: 30.21
[hand_lmk_detection-4] [WARN] [1660269065.612579058] [hand_lmk_det]: input fps: 30.01, out fps: 30.01
[hand_lmk_detection-4] [WARN] [1660269066.612778892] [hand_lmk_det]: input fps: 30.00, out fps: 30.00
[hand_lmk_detection-4] [WARN] [1660269067.646101309] [hand_lmk_det]: input fps: 30.01, out fps: 30.01
[hand_lmk_detection-4] [WARN] [1660269068.679036184] [hand_lmk_det]: input fps: 30.04, out fps: 30.04

输出 log 显示,程序运行成功,推理时算法输入和输出帧率为 30fps,每秒钟刷新一次统计帧率。

在 PC 端的浏览器输入 http://IP:8000 即可查看图像和算法渲染效果(IP 为 RDK 的 IP 地址):

Web 端人手关键点检测算法渲染效果截图