Skip to main content
sample_hand_detection 示例应用使用基于 Python 的 ROS 2 节点从图像或摄像头流中检测手部和手部关键点。它使用 Qualcomm® AI Engine Direct SDK (QNN) 进行模型推理。 该模型来自 MediaPipe Hand Landmark Detector,这是一个机器学习流水线,可预测图像中手部的边界框和姿势骨架。该示例应用允许你输入名为 input_image.jpg 的静态图像或实时摄像头流,然后将结果作为 ROS topic /handlandmark_result 发布。
注意有关更多信息,请参见 GitHub 上的 sample_hand_detection。

图:sample_hand_detection 的示例效果

sample_hand_detection 的流水线流程

图:sample_hand_detection 的流水线流程

sample_hand_detection 中使用的 ROS 节点

ROS 节点说明
qrb_ros_cameraQualcomm ROS 2 包,使用参数捕获图像并将其发布到 ROS topic。
qrb_ros_nn_inference加载训练好的 AI 模型,接收预处理后的图像,执行推理并发布结果。
qrb_ros_hand_detector订阅一个图像 topic(来自静态图像或摄像头),执行预处理和后处理,并发布检测结果。
palm_preprocessor通过调整大小、归一化图像和转换图像格式来准备手掌检测的输入图像数据,以满足模型的要求。
palm_postprocessor解释手掌检测模型的原始输出,提取边界框和置信度分数,应用过滤和可选的 NMS,并将结果映射到原始图像坐标。
landmark_preprocessor基于手掌检测结果处理裁剪出的手部区域。调整并归一化图像,并可能应用几何变换以对齐手部方向。
landmark_postprocessor解码关键点检测模型的输出,提取手部关键点并将它们映射回原始图像空间。

sample_hand_detection 中使用的 ROS topic

ROS topic类型发布者
/handlandmark_resultsensor_msgs.msg.Imageqrb_ros_hand_detector
/palm_detector_input_tensorqrb_ros_tensor_list_msgs.msg.TensorListqrb_ros_hand_detector
/palm_detector_output_tensorqrb_ros_tensor_list_msgs.msg.TensorListqrb_ros_nn_inference
/landmark_detector_input_tensorqrb_ros_tensor_list_msgs.msg.TensorListqrb_ros_hand_detector
/landmark_detector_output_tensorqrb_ros_tensor_list_msgs.msg.TensorListqrb_ros_nn_inference
/image_rawsensor_msgs.msg.Imageqrb_ros_camera

前提条件

你已完成 设置运行示例应用的环境 中的设置。

开箱即用运行 sample_hand_detection

1

在开发套件上运行示例

SSH Session
2

在主机计算机上查看结果

  1. 启动 rqt。
    SSH Session
  2. 依次选择以下按钮: Plugins —> Visualization —> Image View
  3. 选择 handlandmark_result 以查看结果。

构建并运行 sample_hand_detection

以下步骤以 Dragonwing IQ-9075 Evaluation Kit 为例构建 sample_hand_detection 包。
1

在主机计算机上构建并打包

  1. 构建示例应用项目。
  2. 打包并将示例应用推送到设备。
2

在开发套件上安装并运行

  1. 安装示例应用。
    SSH Session
  2. 按照 开箱即用运行 sample_hand_detection 中的步骤运行示例应用。