OpenPose 版本发布全史:从 1.0.0rc1 到 1.7.1 的关键特性演进、API 变迁与性能优化解读
【免费下载链接】openposeOpenPose: Real-time multi-person keypoint detection library for body, face, hands, and foot estimation项目地址: https://gitcode.com/gh_mirrors/op/openpose
导读
本文以 OpenPose 官方发布说明(doc/08_release_notes.md)为主体,系统梳理该项目从 2017 年 4 月首个 RC 版本到 2020 年底 1.7.x 的全部版本演进脉络。你将了解到身体/人脸/手部关键点检测能力是如何逐步加入的,BODY_25 模型、3D 重建、相机标定、追踪与识别模块分别在哪个版本落地,以及--write_json、--net_resolution、--display等核心命令行参数在历次版本中的命名变迁与语义修正。文章同时结合仓库源码(include/openpose/flags.hpp、src/openpose/pose/poseParameters.cpp 等)对关键特性做实现级佐证,帮助读者把版本历史与当前代码库的接口一一对应起来。
一、版本总览与时间线
根据发布说明,OpenPose 共经历了 3 个候选发布(RC)版本和 8 个正式版本(1.0.0 → 1.7.1,其中 1.7.1 为文档撰写时的"当前版本")。按时间线整理如下:
| 版本 | 发布日期 | 标志性内容 |
|---|---|---|
| 1.0.0rc1 | 2017-04-24 | 首个版本:身体关键点检测,支持图片目录/视频/摄像头输入 |
| 1.0.0rc2 | 2017-05-10 | 渲染分辨率提升至 32k+,demo 由 rtpose 更名 openpose |
| 1.0.0rc3 | 2017-06-08 | 新增人脸关键点检测,Windows 10 兼容 |
| 1.0.0 | 2017-07-08 | 新增手部关键点检测,Windows 分支合入 master |
| 1.0.1 | 2017-07-11 | Windows 库改为 DLL 动态库(便携) |
| 1.0.2 | 2017-09-03 | OpenCV 3.3 兼容、Caffe 转为 DLL、新增 3D 重建 demo |
| 1.1.0 | 2017-09-19 | Ubuntu 下引入 CMake 安装器、IP 摄像头支持前的最后一个 RC 系版本 |
| 1.2.0 | 2017-11-03 | IP 摄像头支持、多尺度大幅加速、动态--net_resolution |
| 1.2.1 | 2018-01-09 | 新增--write_json、浮点格式热力图保存 |
| 1.3.0 | 2018-03-24 | 移除 Boost 依赖、3D 重建模块化、--display取代--no_display |
| 1.4.0 | 2018-09-01 | 发布 BODY_25 模型、相机标定模块、追踪/识别模块雏形 |
| 1.5.0 | 2019-05-16 | CUDA 大幅加速、单人体追踪器、Unity 绑定、Pybind11 版 Python API |
| 1.5.1 | 2019-09-03 | 3D 三角化精度提升、AppVeyor Windows 自动测试 |
| 1.6.0 | 2020-04-26 | 多相机(3D)异步模式、Matrix/String 封装隔离三方头文件 |
| 1.7.0 | 2020-11-15 | CUDA 11.X/cuDNN 8.X、Ubuntu 20.04 兼容、Python API 异步模式 |
| 1.7.1(当前) | — | --net_resolution_dynamic、依赖版本更新、文档重构 |
说明:发布说明末尾指出,所有历史版本均可从官方 Releases 页面下载(本文不引用外部链接,读者可直接在仓库 README.md 与 doc/00_index.md 中查看各版本对应的安装与使用方式)。
二、早期 RC 版本(1.0.0rc1 → 1.0.0rc3):身体关键点检测与跨平台起步
2.1 1.0.0rc1:核心功能的首次落地
首个版本确立了 OpenPose 的主干功能:
- 身体关键点检测与渲染,支持 Ubuntu 14 与 16;
- 三种输入源:图片目录(image directory)、视频、网络摄像头(webcam);
- 结果既可实时显示,也可保存到磁盘。
这三个能力沿用至今,对应到当前 include/openpose/flags.hpp 中的--image_dir、--video、--camera三个输入 flag,以及--write_images/--write_video/--write_json三个输出 flag。
2.2 1.0.0rc2:渲染分辨率与命名规范化
- 渲染最大分辨率从 720p 提升到32k 以上(这为后续 4K、8K 图像处理奠定了基础);
- demo 可执行文件由
rtpose更名为openpose; - 修复了 demo 与部分自定义编译 OpenCV 版本的兼容问题(改用
exec而非start)。
2.3 1.0.0rc3:人脸检测与 Windows 支持
rc3 是早期版本中变化最大的一次:
- 新增人脸关键点检测;
- Windows 10 兼容;
- GPU 数量自动检测(对应现代版
--num_gpu -1的语义,见 include/openpose/flags.hpp); - MPI 可视化风格向 COCO 靠拢;
- 抛出异常前先打印错误描述,便于 Windows cmd 中定位问题。
值得关注的是 rc3 开启了一系列参数重命名,这些命名贯穿后续所有版本:
| rc3 前 | rc3 后 | 影响范围 |
|---|---|---|
--write_pose | --write_keypoint | 同时适用于 face/hands |
--write_pose_json | --write_keypoint_json | 同时适用于 face/hands |
--write_pose_format | --write_keypoint_format | 同时适用于 face/hands |
PoseSaver | KeypointSaver | 保存器类名 |
PoseJsonCocoSaver | CocoJsonSaver | COCO JSON 保存器类名 |
其中--write_keypoint_json在后来的 1.2.1 版本又被--write_json取代并在 1.4.0 中被移除,而CocoJsonSaver至今仍保留在 src/openpose/filestream/cocoJsonSaver.cpp 中,对应 flag 为--write_coco_json。
三、正式版 1.0.0 → 1.1.0:手部检测、DLL 化与 CMake 安装器
3.1 1.0.0:手部关键点检测
1.0.0 是第一个正式版,主要新增:
- 手部关键点检测(与 1.0.0rc3 的人脸检测一起,构成"全身关键点"能力);
- Windows 分支合并进 master;
- 人脸与手部检测改用
Maximum而非NMS(因为人脸/手部每帧只有 1 个目标); - 多尺度精度提升:新增
Datum::scaleRatios保存多尺度下的相对尺度比例; - 默认渲染切换为 GPU 渲染(CPU 渲染作为可选),整体提速约 5%;
- 姿态、人脸、手部的渲染阈值均可配置(对应现在的
--render_threshold、--face_render_threshold、--hand_render_threshold); - 新增
--camera_fps控制--write_video输出视频帧率(1.5.0 中更名为--write_video_fps,默认值也从 30 改为 -1); - 参数解析逻辑从各 demo 抽取到
utilities/flagsToOpenPose(对应 src/openpose/utilities/flagsToOpenPose.cpp)。
1.0.0 还确立了一个影响深远的 JSON 输出约定:--write_keypoint_json输出中的键名从统一的body_parts改为按部位区分的pose_keypoints、face_keypoints、hand_left_keypoints、hand_right_keypoints。这一结构在 doc/02_output.md 中有完整示例,并沿用至今天的--write_json。
3.2 1.0.1 与 1.0.2:Windows 便携化与 3D 重建 demo
- 1.0.1:Windows 库转为DLL 动态库,实现跨机器便携分发;
- 1.0.2:
- OpenCV 3.3 兼容、Caffe 转为 DLL、OpenPose 在带 Nvidia 显卡的 Windows 10 上完全便携;
- 新增3D 重建 demo(多视角关键点三角化);
- 摄像头索引自动检测;
floatPtrToUCharCvMat提速约 30%;- COCO 提取器改为从图片文件名中解析图片 ID(格式
string_%d),使其不仅能用于验证集,也能用于测试集; - 头文件 include 从双引号统一改为尖括号。
3.3 1.1.0:CMake 安装器与精度微调
- 新增Ubuntu 下 CMake 安装器(此后 CMake 逐渐取代 Makefile 成为文档默认安装方式,1.3.0 起 CMake 成为文档默认);
- 增加
-Wsign-compare警告并清理代码; - 通过引入耳朵-肩膀连接,验证集上 1 尺度 mAP 提升约 0.4。
四、1.2.x:动态分辨率、IP 摄像头与--write_json的诞生
4.1 1.2.0:速度与灵活性的双重跃升
1.2.0 在性能与输入灵活性上均有重要突破:
- 不同宽高比图像处理提速:约 3.7k 张 COCO 验证图、1 尺度下提速约 20%;
- 多尺度处理大幅提速降内存:4 尺度下总耗时从约 770 秒降至约 450 秒(约 40%),每 GPU 内存从约 8.9 GB 降至约 6.7 GB;
- 新增 IP 摄像头支持(对应
--ip_camera,支持 RTSP/HTTP 协议); - 输出分辨率动态化:输出图像不再要求固定尺寸,
--resolution更名为--output_resolution,FrameDisplayer/OpOutputToCvMat 等组件改为从每帧图像自行推断尺寸; - 网络分辨率动态化:新增
-1选项用于--net_resolution,自动选择与输入最匹配的宽高比;网络分辨率可在运行中动态改变(例如逐帧处理不同尺寸图片); - 新增独立的人脸检测器(基于 OpenCV face detector,更快的
--face_detector 1模式); - 人脸与手部检测器支持返回逐关键点热力图;
- 构建系统重构:
USE_CUDNN不再必需,CPU_ONLY更名为USE_CUDA,且USE_CAFFE/USE_CUDA仅编译期需要,运行期 OpenPose 头文件不再包含 Boost/Caffe 依赖,只要求 OpenCV; - 新增
--disable_multi_thread以降低延迟(适合实时 webcam 场景); - 新增
--number_people_max的-1自动选择模式及后续的--number_people_max能力(该 flag 在 1.3.0 正式加入)。
这些动态分辨率能力如今沉淀在 include/openpose/wrapper/wrapper.hpp 与 include/openpose/core/scaleAndSizeExtractor.hpp 等类中。
4.2 1.2.1:--write_json与热力图浮点格式
- 热力图支持浮点格式保存,并新增
--heatmaps_scale选项(0 表示 [-1,1] 区间、1 表示 [0,1]、2 表示取整到 [0,255]、3 表示不缩放,见 include/openpose/flags.hpp); - 新增
--write_json,作为--write_keypoint_json的新版本:额外包含**身体部件候选(part candidates)**及后续新增的扩展信息(如 person ID); - GPU 数量检测考虑用户指定的起始 GPU 索引;
- 修复 >4K 图像的渲染问题;
PoseParameters拆分为PoseParameters与PoseParametersRender,常量改为函数形式以增强可读性——这正是当前 include/openpose/pose/poseParameters.hpp 中getPoseDefaultNmsThreshold()、getPoseDefaultConnectInterThreshold()等函数的由来。
五、1.3.0:3D 重建模块化与依赖精简
1.3.0 是一个面向模块化与跨平台的分水岭:
- 移除 Boost 依赖;Caffe 改为 submodule;CMake 安装器兼容 Windows;新增 freeglut 下载脚本(Windows 3D 重建 demo 用);
- 3D 重建从 demo 升级为 OpenPose 正式模块(include/openpose/3d/ 目录下的
poseTriangulation、jointAngleEstimation等),可配合不同相机品牌或自定义图像源使用; - 新增
--3d_views(配合--image_dir/--video加载立体图像)、--3d_min_views(3D 重建所需最少相机数); - 3D 重建模块强制
number_people_max 1,以避免多人场景下的重建歧义; - Flir 相机参数改为运行时从磁盘读取而非编译期硬编码;
--write_json纳入 3D 关键点;新增*_keypoints_2d命名以区分 3D 关键点;- 新增
--number_people_max与--camera_resolution; - VideoSaver 兼容多相机设置,多视角画面拼接保存;
- GUI 改进:显示原始帧号而非线程内帧 id;小窗 GUI 自适应缩放提示文本;
l/k快捷键功能互换; --no_display更名为--display,可选值扩展为NoDisplay/Display2D/Display3D/DisplayAll(当前语义见 include/openpose/flags.hpp 中display的注释:-1 自动选择、0 无显示、1 同时 2D+3D、2 仅 2D、3 仅 3D)。
性能与正确性修复方面:NMS 只对身体部件热力图通道执行(不再作用于 PAF 通道),获得约 1% 加速;修复 PoseRenderer 切换渲染元素时的 core dump 与 3D 可视化退出崩溃。
六、1.4.0:BODY_25 模型、相机标定与追踪雏形
1.4.0 是特性最密集的版本之一。
6.1 BODY_25 模型发布
发布说明明确指出 BODY_25 模型"包含 COCO 的 17 个关键点 + 脖子 + 髋部中点 + 6 个脚部关键点",且比原 COCO 模型准确率约高 3%、速度快约 30%。其完整关键点映射定义于 src/openpose/pose/poseParameters.cpp 的POSE_BODY_25_BODY_PARTS:
{0,"Nose"}, {1,"Neck"}, {2,"RShoulder"}, {3,"RElbow"}, {4,"RWrist"}, {5,"LShoulder"}, {6,"LElbow"}, {7,"LWrist"}, {8,"MidHip"}, {9,"RHip"}, {10,"RKnee"}, {11,"RAnkle"}, {12,"LHip"}, {13,"LKnee"}, {14,"LAnkle"}, {15,"REye"}, {16,"LEye"}, {17,"REar"}, {18,"LEar"}, {19,"LBigToe"}, {20,"LSmallToe"}, {21,"LHeel"}, {22,"RBigToe"}, {23,"RSmallToe"}, {24,"RHeel"}, {25,"Background"}BODY_25 由此成为默认模型(include/openpose/flags.hpp 中--model_pose默认值为"BODY_25"),并衍生出 BODY_25E、BODY_25D、BODY_25B、BODY_19、BODY_23、BODY_135、CAR 等模型族(见 include/openpose/pose/enumClasses.hpp)。其模型 prototxt 存放于 models/pose/body_25/pose_deploy.prototxt。
6.2 相机标定模块
新增基于 OpenCV 的内参/外参相机标定工具箱,对应 include/openpose/calibration/ 与 examples/calibration/calibration.cpp。标定细节可参考 doc/advanced/calibration_module.md。
6.3 3D 重建精度与多 GPU 策略
- 引入非线性最小化进一步优化三角化(仅 Ubuntu),精度提升约 5%;
- 重投影误差低于阈值时跳过优化(速度优先)、高于离群阈值时剔除离群点;
- ≥3 视角剔除离群点、≥4 视角应用 RANSAC;
- 多 GPU 场景下每个 GPU 处理一个相机视角(替代原先按时间片切分),大幅降低延迟;
- 3D 关键点与相机参数单位从毫米改为米,以降低数值误差。
6.4 追踪与识别模块雏形
新增初始 alpha 版本的tracking与identification模块(源码中可见但默认禁用),包括PersonIdExtractor(含贪心矩阵 OP-LK 匹配)与PersonTracker(include/openpose/tracking/)。此设计随后在 1.5.0 演变为可用的--tracking单人体追踪器。
6.5 性能与体验优化
- 平均延迟减半;CMake 默认未开启 Release 模式的问题修复后整体提速约 15%;
- 从 bodyPartConnectorBase 热循环中移除
checkEQ(其耗时随人数指数增长),身体检测对人数变化更稳定; Datum::outputData从 C×H×W 改为H×W×C,与cv::Mat互拷大幅提速;- 新增
WITH_OPENCV_WITH_OPENGL编译选项加速 GUI 显示; - 队列空/满时最小化 CPU 占用,避免整机卡顿、过热与功耗问题;
- GUI 渲染通道快捷键改为更直观的映射:1 骨架、2 背景热力图、3 全部热力图叠加、4 PAF 叠加、5+ 各部位热力图;
- 移除弃用的
--write_keypoint_json(1.2.1 起由--write_json等价替代)。
七、1.5.x:CUDA 全面加速、追踪器与新一代 Python API
7.1 1.5.0:CUDA 性能跃升
1.5.0 对 CUDA 路径做了系统性优化,发布说明给出了量化收益:
| 优化点 | 收益 |
|---|---|
| 贪心身体部件连接器移植到 CUDA | 默认配置下提速约 30%,最大精度配置下约 10%,且默认配置下精度小幅提升 0.5% |
| 身体部件连接器二次优化 | 额外提速 5–30% |
| NMS | 提速约 2–4 倍 |
| 图像 resize 与多尺度 resize | 各提速约 2 倍 |
| 渲染 | 提速约 25–30% |
| CvMatToOpOutput/OpOutputToCvMat 的 resize 移至 CUDA | 延迟下降,且线性加速对更多 GPU 泛化更好 |
对应的 CUDA 实现可在 src/openpose/net/bodyPartConnectorBase.cu(greedy connector)、src/openpose/net/nmsBase.cu(NMS)、src/openpose/net/resizeAndMergeBase.cu(resize)中查看。其中身体部件连接器阈值已在 1.5.1 中改为使用defaultNmsThreshold(取代硬编码的 0.15),见 src/openpose/net/bodyPartConnectorBase.cu 中getPoseDefaultNmsThreshold()的调用。
7.2 单人体追踪器与--tracking
新增初始单人体追踪器(--trackingflag),用于进一步提速或视觉平滑。对应实现位于 src/openpose/tracking/personTracker.cpp 与 src/openpose/tracking/pyramidalLK.cpp。
7.3 新增命令行参数
1.5.0 集中新增了一批仍在使用的重要 flag(全部定义见 include/openpose/flags.hpp):
--frame_step:帧间隔抽样,如--frame_step 5处理第 0、5、10… 帧;--maximize_positives:将原硬编码的COCO_CHALLENGE变为用户可配置,降低人体候选阈值(提升召回、可能降低精度);--verbose(后演进为--cli_verbose):打印处理进度;--fps_max:限制最大处理帧率,便于慢速观察 GUI 结果;--prototxt_path/--caffemodel_path:自定义网络结构与权重路径;--face_detector/--hand_detector:选择人脸/手部矩形检测器(0=OpenPose 身体检测器、1=OpenCV 人脸检测器、2=用户自供、3=开启手部追踪);原--hand_tracking被并入--hand_detector 3;--upsampling_ratio:贪心关联解析前对帧执行的上采样比例;--body:取代--body_disable,可关闭姿态网络但仍运行贪心关联解析(作用于用户提供的热力图)。
7.4 API 重构与 Python 生态
- Wrapper 简化为模板类WrapperT,并新增非模板等价类Wrapper(include/openpose/wrapper/wrapper.hpp 中
typedef WrapperT<BASE_DATUM> Wrapper); - 新增统一头文件
flags.hpp,避免各示例重复粘贴 flag 定义; - 示例目录重构:
tutorial_wrapper→tutorial_api_cpp、tutorial_python→tutorial_api_python、tutorial_thread→tutorial_api_thread、删除tutorial_pose(新示例见 examples/tutorial_api_cpp/ 与 examples/tutorial_api_python/); - 旧 Python wrapper 被Pybind11 版 wrapper取代,覆盖 C++ API 全部功能(python/openpose/openpose_python.cpp);
Array为 Pybind11 兼容新增getStride()、getPybindPtr()、pData绑定与指针构造接口;- 为几乎所有类添加虚析构函数(性能敏感的 Array、Point、Rectangle、CvMatToOpOutput、OpOutputToCvMat 除外),便于继承扩展;
errorAndLog中的辅助类改为命名空间,checkX()系列函数保留为类;- Wrapper 新增预处理能力(
WorkerType::PreProcessing)与可配置线程队列上限; Datum新增poseNetOutput,允许用户注入自定义网络输出;- 输出 JSON 升级到version 1.3,可包含 person ID。
7.5 视频保存与相机相关改进
--write_video可从图片序列(--image_dir)生成视频;- 新增
--write_video_3d保存 3D 输出视频、write_video_with_audio(需.mp4+ ffmpeg); --camera_fps更名为--write_video_fps(语义更准确:只影响输出视频帧率,默认值改为 -1);--frame_keep_distortion反转为--frame_undistort(默认不矫正);--camera_parameter_folder更名为--camera_parameter_path(支持直接指定 XML 文件路径);- 帧去畸变不再限于 FLIR 相机,可作用于所有输入源。
7.6 1.5.1:三角化与稳定性修正
- 修复 >3 相机时的 3D 三角化小 bug,精度显著提升;
- 增加 Nvidia NVCaffe 社区支持;
--3d_min_views默认值从 -1(要求全部视角)改为max(2, min(4, #cameras-1)),在召回与精度间取得更好平衡;- CPU 版本精度提升约 0.2%(对彼此很近的关键点赋予最小可能 PAF 分数);
- 修复
06_face_from_image.cpp、07_hand_from_image.cpp、09_keypoints_from_heatmaps在 1.5.0 中因 GPU resize 导致的失效问题; - 新增 Windows AppVeyor 自动测试(appveyor.yml)。
八、1.6.0:多相机异步模式与三方依赖隔离
1.6.0 的重点是可移植性与依赖解耦:
- 多相机(3D)异步模式:
WrapperT::waitAndEmplace()与tryEmplace()支持TDatums尺寸 >1;新增createMultiviewTDatum()从单张拼接图像与相机参数矩阵自动生成多视角TDatums;配套示例 examples/tutorial_api_cpp/11_asynchronous_custom_input_multi_camera.cpp; - 创建Matrix(cv::Mat 容器)与 String(std::string 容器),替换头文件中的三方类型,使 OpenPose 导出时不再要求三方库头文件与静态库(动态库如
dll/so仍需要),用户可用自己版本的 OpenCV、Eigen 而不冲突; - 新增
openpose_private目录收纳需要三方头文件/静态库的内部头文件(include/openpose_private/); - 新增
ScaleMode::ZeroToOneFixedAspect与PlusMinusOneFixedAspect(在保持各轴宽高比的同时归一化坐标); - 内部函数改名以避免与其他库的宏冲突:
dLog()→opLogIfDebug()、log()→opLog()、check()→checkBool()及全部checkX()系列(include/openpose/utilities/check.hpp); - 修复多人+高分辨率场景下骨架渲染缺失问题(如 4K 下约 32 人的视频);
- Debug 版本正确链接三方库的 debug 库,不再在启动时打印 Caffe 网络巨量日志。
九、1.7.x:新硬件兼容与当前版本能力
9.1 1.7.0:CUDA 11 与 Ubuntu 20.04
- 兼容CUDA 11.X 与 cuDNN 8.X,支持 Nvidia 30XX 系列显卡;
- 兼容Ubuntu 20.04,移除 GCC/Clang 编译警告;
- Python API 支持异步模式;
- CMake 新增
DOWNLOAD_SERVER变量,指定模型与三方库的下载源; USE_MKL在 Ubuntu 默认禁用(与 Intel CPU 绑定的 MKL 在非 Intel CPU 或 Ubuntu 20 上不兼容);- 修复 90°/270° 图像旋转。
9.2 当前版本(未来 1.7.1):--net_resolution_dynamic与文档重构
发布说明中"Current version - Future OpenPose 1.7.1"一节记录了截至仓库当前快照的最新改动:
- 新增
--net_resolution_dynamic(默认 1,仅作用于图片与自定义输入):避免低显存 GPU 在--net_resolution -1x368时出现 out-of-memory;设置为 0 则恢复 1.7.0 之前"尽可能大"的行为(大显存追求最大精度时建议 0)。其具体裁剪规则在 include/openpose/flags.hpp 中有完整注释:-1宽度会被裁剪为net_resolution_dynamic × 656(368 高度对应的 16:9 基准宽度); - 第三方依赖更新:Windows 下 OpenCV 4.2→4.5、Eigen 3.3.4→3.3.8、wget 1.19.1→1.20.3;
- AppVeyor 改为直接测试 OpenPoseDemo.exe;
- 文档重构:README 大幅简化,doc 按
advanced、deprecated、installation等子目录重组(即当前 doc/ 目录结构);标定文档链接到仓库自带的棋盘格 PDF(doc/advanced/Chessboard_in_PDF/pattern.pdf); tutorial_add_module与tutorial_api_thread移入deprecated(仍可编译,但不再维护);- CI 从 Travis 迁移至 GitHub Actions。
十、跨版本核心接口变迁总结
10.1 输出与保存类 flag 的演进链
| 原始 flag | 演进过程 | 当前状态 |
|---|---|---|
--write_pose | rc3 →--write_keypoint | 已弃用(推荐--write_json) |
--write_pose_json | rc3 →--write_keypoint_json→ 1.2.1 由--write_json取代 | 1.4.0 移除 |
--write_pose_format | rc3 →--write_keypoint_format | 已弃用(--write_json默认 JSON) |
--no_display | 1.3.0 →--display(NoDisplay/Display2D/Display3D/DisplayAll) | 使用中 |
--camera_fps | 1.5.0 →--write_video_fps | 使用中 |
--frame_keep_distortion | 1.5.0 →--frame_undistort(语义反转) | 使用中 |
--camera_parameter_folder | 1.5.0 →--camera_parameter_path | 使用中 |
--hand_tracking | 1.5.0 并入--hand_detector 3 | 已移除 |
--write_coco_foot_json | 1.5.0 →--write_coco_json_variants | 使用中 |
10.2 JSON 输出格式的版本化
JSON 输出从 1.0.0 的body_parts单一键,演进为按部位区分的pose_keypoints_2d/face_keypoints_2d/hand_left_keypoints_2d/hand_right_keypoints_2d(1.3.0 起加_2d后缀以区分 3D),并逐步加入part_candidates(1.2.1)、3D 关键点(1.3.0)、person ID(1.5.0,JSON version 1.3)。当前完整格式示例见 doc/02_output.md,底层实现可查看 src/openpose/filestream/peopleJsonSaver.cpp。
10.3 关键点模型的语义稳定性
尽管版本迭代频繁,关键点索引语义保持稳定:BODY_25、COCO、MPI 的部件映射仍可通过getPoseBodyPartMapping()从 C++/Python API 获取(include/openpose/pose/poseParameters.hpp),并可直接在 Python 中验证:
poseModel = op.PoseModel.BODY_25 print(op.getPoseBodyPartMapping(poseModel)) print(op.getPoseNumberBodyParts(poseModel)) print(op.getPosePartPairs(poseModel)) print(op.getPoseMapIndex(poseModel))十一、从发布历史看项目演进规律
纵观 1.0.0rc1 到 1.7.1,可以提炼出几条清晰的演进主线,这也是阅读本仓库代码时的最佳路线图:
- 检测能力扩展:body(rc1)→ face(rc3)→ hand(1.0.0)→ 脚部关键点并入 BODY_25(1.4.0)→ 3D 关键点(1.2.x–1.4.0);
- 速度与内存:CPU 渲染(1.0.0)→ 多尺度优化(1.2.0)→ 移除热循环 checkEQ(1.4.0)→ CUDA 全链路加速(1.5.0)→ H×W×C 数据布局(1.4.0);
- 模块化与依赖解耦:flagsToOpenPose 抽取(1.0.0)→ 移除 Boost(1.3.0)→ net/ 模块(1.3.0)→ WrapperT/Wrapper(1.5.0)→ Matrix/String 与 openpose_private(1.6.0);
- 跨平台:Ubuntu(rc1)→ Windows(rc3/1.0.0)→ Mac OpenCL(1.5.0)→ Ubuntu 20.04(1.7.0);
- 生态:Python API(2018)→ Pybind11 重写(1.5.0)→ Unity 绑定(1.5.0)→ 训练代码与数据集(2019,另见 doc/10_community_projects.md)。
如需核对每个版本的完整改动清单,可直接阅读仓库内的 doc/08_release_notes.md;各版本对应的安装方式与前置条件见 doc/installation/0_index.md 与 doc/installation/1_prerequisites.md;而查看当前全部可用命令行参数的最快捷方式,是编译后运行build/examples/openpose/openpose.bin --help,并按 include/openpose/flags.hpp 头部注释的指引,只关注Flags from examples/openpose/openpose.cpp:之后的 OpenPose 自身参数。
【免费下载链接】openposeOpenPose: Real-time multi-person keypoint detection library for body, face, hands, and foot estimation项目地址: https://gitcode.com/gh_mirrors/op/openpose
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考