视频全身姿态估计
更新时间:2026-07-29
简介
视频全身 2D 关键点估计算子,用 DWPose(ONNX:yolox_l 检测 + dw-ll_ucoco_384 姿态)对视频抽帧估计全身关键点(body/hands/faces/foot)。离线 GPU 运行(CPU 亦可,慢)。
功能描述
• 从视频均匀抽取 frame_num 帧(BGR),用 DWPose 逐帧推理全身关键点。
• 输出逐帧的 body 与 hands 关键点(外层为帧,中层为点,内层为 [x,y],归一化到 [0,1])。
• 依赖 onnxruntime(GPU 版 onnxruntime-gpu)+ opencv-contrib-python 与两个 ONNX 权重(yolox_l.onnx / dw-ll_ucoco_384.onnx)。
• 支持 GPU(需 CUDAExecutionProvider)/CPU 自动选择;单帧推理失败时该帧返回空点集,权重需预置不自动下载。
算子参数
输入
| 输入 | 含义 |
|---|---|
| video | 视频(本地 / bos / http,经 run_on_local_path 落地),单个输入列 |
输出
| 输出 | 含义 |
|---|---|
| result | struct{num_frames: int32, body: list<list<list<float64>>>, hands: list<list<list<float64>>>};body/hands 为逐帧关键点,内层 [x,y] 归一化到 [0,1] |
参数
| 参数名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| model_path | str | "/opt/aihc/models/dwpose" | 存放两个 ONNX 权重的目录 |
| det_onnx | str | "yolox_l.onnx" | 检测 ONNX 文件名 |
| pose_onnx | str | "dw-ll_ucoco_384.onnx" | 姿态 ONNX 文件名 |
| frame_num | int | 3 | 均匀采样帧数,须 >= 1 |
调用示例
Python
1from __future__ import annotations
2
3import os
4
5import daft
6from daft import col
7
8from daft.aihc.common.udf import aihc_udf
9from daft.aihc.functions.video.video_whole_body_pose_estimation import (
10 VideoWholeBodyPoseEstimation,
11)
12
13VIDEO = "bos://your-bucket/sample.mp4" # MOCK
14MODEL_PATH = "/opt/aihc/models/dwpose" # MOCK
15
16os.environ.setdefault("BOS_ENDPOINT", "http://bj.bcebos.com")
17os.environ.setdefault("BOS_REGION", "bj")
18
19if __name__ == "__main__":
20 if os.getenv("DAFT_RUNNER", "native") == "ray":
21 import ray
22
23 ray.init(ignore_reinit_error=True)
24 daft.set_runner_ray()
25 daft.set_execution_config(actor_udf_ready_timeout=6000, min_cpu_per_task=0)
26
27 samples = {"video": [VIDEO]}
28 ds = daft.from_pydict(samples)
29 ds = ds.with_column(
30 "result",
31 aihc_udf(
32 VideoWholeBodyPoseEstimation,
33 construct_args={
34 "model_path": MODEL_PATH,
35 "det_onnx": "yolox_l.onnx",
36 "pose_onnx": "dw-ll_ucoco_384.onnx",
37 "frame_num": 3,
38 },
39 num_cpus=1,
40 num_gpus=1,
41 concurrency=1,
42 batch_size=1,
43 )(col("video")),
44 )
45 ds.show()
评价此篇文章
