MMPose Python API完全手册:30个核心接口速查

【免费下载链接】mmpose OpenMMLab Pose Estimation Toolbox and Benchmark. 【免费下载链接】mmpose 项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose

目录

模型初始化

init_model

def init_model(config: Union[str, Path, Config],
               checkpoint: Optional[str] = None,
               device: str = 'cuda:0',
               cfg_options: Optional[dict] = None) -> nn.Module

功能:从配置文件初始化姿态估计模型
参数

  • config: 配置文件路径或Config对象
  • checkpoint: 模型权重文件路径
  • device: 运行设备,默认为'cuda:0'
  • cfg_options: 配置覆盖选项

示例

from mmpose.apis import init_model
model = init_model(
    'configs/body_2d_keypoint/rtmpose/body8/rtmpose-m_8xb256-420e_body8-256x192.py',
    'https://download.openmmlab.com/mmpose/v1/body_2d_keypoint/rtmpose/body8/rtmpose-m_8xb256-420e_body8-256x192-63eb25f7_20230623.pth',
    device='cuda:0'
)

2D姿态估计

inference_topdown

def inference_topdown(model: nn.Module,
                      img: Union[np.ndarray, str],
                      bboxes: Optional[Union[List, np.ndarray]] = None,
                      bbox_format: str = 'xyxy') -> List[PoseDataSample]

功能:使用自顶向下模型进行姿态估计
参数

  • model: 初始化的模型对象
  • img: 输入图像路径或数组
  • bboxes: 边界框坐标,形状为(N, 4)
  • bbox_format: 边界框格式,'xyxy'或'xywh'

示例

from mmpose.apis import inference_topdown
import cv2

img = cv2.imread('demo.jpg')
bboxes = [[50, 50, 200, 300]]  # xyxy格式
results = inference_topdown(model, img, bboxes)
keypoints = results[0].pred_instances.keypoints[0]

inference_bottomup

def inference_bottomup(model: nn.Module, img: Union[np.ndarray, str])

功能:使用自底向上模型进行姿态估计
参数

  • model: 初始化的模型对象
  • img: 输入图像路径或数组

示例

from mmpose.apis import inference_bottomup

results = inference_bottomup(model, 'demo.jpg')
for person in results[0].pred_instances:
    print(person.keypoints)

3D姿态估计

inference_pose_lifter_model

def inference_pose_lifter_model(model,
                                pose_results_2d,
                                with_track_id=True,
                                image_size=None,
                                norm_pose_2d=False)

功能:从2D姿态结果估计3D姿态
参数

  • model: 3D姿态提升模型
  • pose_results_2d: 2D姿态检测结果
  • with_track_id: 是否使用跟踪ID关联多帧
  • image_size: 图像尺寸
  • norm_pose_2d: 是否归一化2D姿态

示例

from mmpose.apis import inference_pose_lifter_model

pose3d_results = inference_pose_lifter_model(
    pose_lifter_model,
    pose2d_results,
    image_size=(1920, 1080)
)
print(pose3d_results[0].pred_instances.keypoints_3d)

convert_keypoint_definition

def convert_keypoint_definition(keypoints, pose_det_dataset, pose_lift_dataset)

功能:转换不同数据集之间的关键点定义
参数

  • keypoints: 关键点坐标数组
  • pose_det_dataset: 2D检测数据集名称
  • pose_lift_dataset: 3D提升数据集名称

示例

from mmpose.apis import convert_keypoint_definition

converted_kpts = convert_keypoint_definition(
    coco_keypoints, 
    'coco', 
    'h36m'
)

姿态跟踪

_track_by_iou

def _track_by_iou(res, results_last, thr)

功能:使用IoU进行姿态跟踪
参数

  • res: 当前帧检测结果
  • results_last: 上一帧跟踪结果
  • thr: IoU阈值

_track_by_oks

def _track_by_oks(res, results_last, thr, sigmas=None)

功能:使用OKS进行姿态跟踪
参数

  • res: 当前帧检测结果
  • results_last: 上一帧跟踪结果
  • thr: OKS阈值
  • sigmas: 关键点标准差

示例

from mmpose.apis import _track_by_oks

track_id, results_last, match_result = _track_by_oks(
    current_result, 
    last_results, 
    thr=0.3,
    sigmas=sigmas
)

可视化工具

visualize

def visualize(
    img: Union[np.ndarray, str],
    keypoints: np.ndarray,
    keypoint_score: np.ndarray = None,
    metainfo: Union[str, dict] = None,
    visualizer: PoseLocalVisualizer = None,
    show_kpt_idx: bool = False,
    skeleton_style: str = 'mmpose',
    show: bool = False,
    kpt_thr: float = 0.3,
)

功能:可视化姿态估计结果
参数

  • img: 图像路径或数组
  • keypoints: 关键点坐标
  • keypoint_score: 关键点置信度
  • metainfo: 数据集元信息
  • visualizer: 可视化器实例
  • show_kpt_idx: 是否显示关键点索引
  • skeleton_style: 骨骼样式('mmpose'或'openpose')
  • show: 是否显示图像
  • kpt_thr: 关键点置信度阈值

示例

from mmpose.apis import visualize

img = visualize(
    'input.jpg',
    keypoints,
    keypoint_score=scores,
    skeleton_style='openpose',
    show=True,
    kpt_thr=0.5
)

数据处理

collect_multi_frames

def collect_multi_frames(video, frame_id, indices, online=False)

功能:从视频中收集多帧图像
参数

  • video: 视频读取器对象
  • frame_id: 当前帧索引
  • indices: 帧索引偏移量列表
  • online: 是否为在线模式(不使用未来帧)

extract_pose_sequence

def extract_pose_sequence(pose_results, frame_idx, causal, seq_len, step=1)

功能:从姿态结果中提取序列帧
参数

  • pose_results: 多帧姿态结果
  • frame_idx: 当前帧索引
  • causal: 是否为因果模式
  • seq_len: 序列长度
  • step: 采样步长

推理器接口

Pose2DInferencer

class Pose2DInferencer(BaseMMPoseInferencer)

功能:2D姿态推理器类
主要方法

  • __init__: 初始化推理器
  • preprocess: 预处理输入数据
  • forward: 模型前向推理
  • visualize: 可视化结果

示例

from mmpose.apis import Pose2DInferencer

inferencer = Pose2DInferencer(
    model='body',
    device='cuda:0'
)
results = inferencer('input.jpg')

MMPoseInferencer

class MMPoseInferencer(BaseMMPoseInferencer)

功能:统一姿态推理器接口
主要方法

  • __init__: 初始化推理器
  • preprocess: 预处理输入数据
  • forward: 模型前向推理
  • visualize: 可视化结果

示例

from mmpose.apis import MMPoseInferencer

inferencer = MMPoseInferencer(
    pose2d='body',
    pose3d='body3d',
    device='cuda:0'
)
results = inferencer('input.jpg')

API速查表

接口类别 函数名称 主要功能
模型初始化 init_model 初始化姿态估计模型
2D姿态估计 inference_topdown 自顶向下姿态估计
2D姿态估计 inference_bottomup 自底向上姿态估计
3D姿态估计 inference_pose_lifter_model 3D姿态提升
3D姿态估计 convert_keypoint_definition 关键点定义转换
姿态跟踪 _track_by_iou IoU跟踪
姿态跟踪 _track_by_oks OKS跟踪
可视化 visualize 姿态结果可视化
数据处理 collect_multi_frames 多帧采集
推理器 Pose2DInferencer 2D姿态推理器
推理器 MMPoseInferencer 统一推理器接口

使用流程示例

mermaid

完整示例代码

# 模型初始化
model = init_model(
    'configs/body_2d_keypoint/rtmpose/body8/rtmpose-m_8xb256-420e_body8-256x192.py',
    'https://download.openmmlab.com/mmpose/v1/body_2d_keypoint/rtmpose/body8/rtmpose-m_8xb256-420e_body8-256x192-63eb25f7_20230623.pth',
    device='cuda:0'
)

# 2D姿态估计
image = cv2.imread('demo.jpg')
results = inference_topdown(model, image)

# 可视化结果
visualize(
    image,
    results[0].pred_instances.keypoints[0],
    results[0].pred_instances.keypoint_scores[0],
    show=True,
    kpt_thr=0.5
)

注意事项

  1. 模型初始化时,若未指定checkpoint,将使用随机权重
  2. 自顶向下模型需要先进行人体检测获取bbox
  3. 3D姿态估计需要先获取2D姿态结果
  4. 可视化时支持两种骨骼样式:mmpose和openpose
  5. 跟踪功能需要连续帧之间的结果关联

通过本手册,您可以快速查找和使用MMPose的核心API接口,加速姿态估计相关应用的开发。建议结合官方文档和示例代码深入学习每个接口的高级用法。

【免费下载链接】mmpose OpenMMLab Pose Estimation Toolbox and Benchmark. 【免费下载链接】mmpose 项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose

更多推荐