3D肢体关键点SDK-原生iOS
更新时间:2020-10-19
1 简介
当前3D肢体SDK共计输出16个人体关键点,点位顺序以MPII顺序为参考,具体点位顺序0-右脚踝、1-右膝、2-右股、3-左股、4-左膝、5-左脚踝、6-盆骨、7-胸部、8-脖子、9-头部、10-右手腕、11-右手肘、12-右肩、13-左肩、14-左手肘、15-左手腕。
当前SDK输出为人体16个关键点的3D归一化坐标,其中x,y为屏幕坐标,z为相对于人体根节点(人为规定关键点6为根节点)的相对深度。
2 快速入门
2.1 支持的系统和硬件版本
- 系统:支持 iOS12.到iOS13.系统。
- 硬件要求:要求设备上有相机模块。
- 网络:支持WIFI及移动网络,移动网络支持使用NET网关及WAP网关(CMWAP、CTWAP、UNIWAP、3GWAP)
2.2 开发包说明
Baidu-AR-3D-HumanPose-iOS-SDK.zip
|- sdk // SDK
|- pdf // 说明文档
|- Demo // 调用示例Demo
3 SDK集成步骤
第1步:添加授权文件
您可以通过“合作咨询”联系相关接口人申请授权。
- 确认LICENSE文件
dumixar.license
在Bundle资源中
第2步:导入相关库
- 确认下列模型文件已添加入Bundle资源中
person_detector.nb
persib_cls.nb
3dpose.nb
- 确认下列库文件已正确链接
libBARAuth.a
libMDLCore.a
libmodelcrypt.a
libmml_framework_ios.a
libpaddle_api_light_bundled.a
opencv2.framework
Photos.framework
Accelerate.framework
第3步:添加权限
确保APP已获取相机及网络权限
第4步:SDK初始化
接口可参考头文件 HumanPoseInterface.hpp
- SDK鉴权初始化
注意:SDK鉴权的初始化必须要最先进行
导入头文件
#import "BARLicense.h"
鉴权初始化需传入LICENSE数据
// 鉴权初始化
NSData *data = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"dumixar" ofType:@"license"]];
NSArray *features = [BARSDKPro setLicenseData:data onlineFeatures:^(NSArray *onLinefeatures) {
} unsupportedFeature:^(NSInteger unsupportedFeature) {
}];
- SDK初始化
需传入Bundle资源路径
// 3D肢体模块初始化
int init(const char* modeldir);
调用示例:
#include "HumanPoseInterface.hpp"
NSString* bundlePath = [NSBundle.mainBundle bundlePath];
int ret = humanPose->init([bundlePath UTF8String]);
第5步: 3D肢体关键点预测
/** 从asstes初始化
* @param data bgr格式的图像数据
* @param width 图像宽
* @param height 图像高
* @param angle 图像顺时针旋转为正所需的角度
* @return std::vector<DetObj> 返回值为人体信息
**/
std::vector<DetObj> humanPosePredictor(const unsigned char*data, int width, int height, int angle);
其中DetObj
具体定义如下:
// 3D肢体检测结果
struct DetObj {
float bbox[4]; //人物包围框
std::vector<float> keypoints; //3D肢体关键点,数据结构为x0,y0,z0,x1,y1,z1...,大小为16*3
} ;
4. 关于Demo展示
本SDK附带提供一个调用SDK及展示SDK 效果的基础Demo,在Demo中会有2D可视化及3D可视化两个展示方式:
- 2D展示为取3D关键点中的XY屏幕坐标进行可视化,与画面中人物关键点位置匹配
- 3D展示为在SceneKit 3D坐标系中对3D关键点的展示,由于3D坐标系与屏幕坐标系无法统一对应,所以Demo中展示时对3D关键点的坐标进行了缩放,且在3D坐标系中无法与2D屏幕画面中的人物关键点匹配位置。
- 3D展示视图中触控屏幕可对坐标系进行旋转,以查看不同角度的人物展示。