MMPose Python API完全手册:30个核心接口速查
·
MMPose Python API完全手册:30个核心接口速查
目录
模型初始化
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 | 统一推理器接口 |
使用流程示例
完整示例代码
# 模型初始化
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
)
注意事项
- 模型初始化时,若未指定checkpoint,将使用随机权重
- 自顶向下模型需要先进行人体检测获取bbox
- 3D姿态估计需要先获取2D姿态结果
- 可视化时支持两种骨骼样式:mmpose和openpose
- 跟踪功能需要连续帧之间的结果关联
通过本手册,您可以快速查找和使用MMPose的核心API接口,加速姿态估计相关应用的开发。建议结合官方文档和示例代码深入学习每个接口的高级用法。
更多推荐


所有评论(0)