Astra SDK  v2.1.3
Unity SDK 使用说明

开发环境

系统要求

Windows 7及以上32/64bit版本

开发工具要求

Unity 5.3.6及以上版本

运行环境

Windows运行环境

Windows7及以上版本

Android运行环境

Android 4.4及以上版本(要兼容Android 8及以上版本需要升级Unity到5.6.5及以上版本)

概念及特性说明

设备 :指我们公司的体感器设备,主要包括Astra、Astra Pro等

流 :指我们的设备上的传感器所产生及经过处理后产生的数据流,包括彩色数据流、深度数据流、深度背景分离数据流、彩色抠图数据流、骨架点数据流

帧 :指流中的单独一帧数据,流是由一系列的数据帧组成,可以从每一帧中获取对应流的数据

多人追踪 :本SDK支持多人跟踪,最多可以同时跟踪5人,提供5个人的骨架点位

骨架点 :目前最多支持19个人体关节点(Head, Shoulder spine,Left Shoulder,Left Elbow,Left hand,Right Shoulder,Right Elbow,Right Hand,Mid spine,Base spine,Left Hip,Left Knee,Left Foot,Right Hip,Right Knee,Right Foot,Left Wrist,Right Wrist,Neck)的跟踪,可以根据自己需求减少骨架关节点位的识别数,关节点位包含有点位的深度坐标、世界坐标和点位的3D方向,另外还支持手势的抓握状态识别

性能调节 :本SDK支持多种场景下的对于不同平台及要求的性能调节

主要功能演示

彩色图输出

深度图输出

深度背景分离图输出

彩色抠图输出

骨架点输出

SDK接入说明

将Astra Unity SDK的unitypackage导入到Unity中,导入后目录结构如下图所示

其中:

Assets/Frameworks/Orbbec/Doc文件夹中存放了说明文档。

Assets/Frameworks/Orbbec/Plugins文件夹中包含对应各平台所需要的库文件

Assets/Frameworks/Orbbec/Samples文件夹包含了基础版本示例场景

Assets/Frameworks/Orbbec/Extension/Simple文件夹包含了简化版API。

Assets/Frameworks/Orbbec/Extension/Tracking文件夹包含了一套用户标定逻辑,基于简化版API。

Assets/Frameworks/Orbbec/Extension/Simple/Samples文件夹包含了简化版API的示例场景。

Assets/Plugins/Android文件夹存放了AndroidManifest.xml文件,用于Android平台发布。

主要类型说明

AstraSimpleSDK

用于创建StreamManager和DeviceManager

StreamManager

设备的初始化、销毁,设置和获取彩色图和深度图的分辨率模式,打开和关闭流,设置骨架模式和精度,纹理的自动刷新和License的设置

StreamData

获取彩色、深度、抠图、Label、Body流数据

DepthStreamData

获取深度图的数据、宽、高、数据格式、帧序号和纹理

ColorStreamData

获取彩色图的数据、宽、高、数据格式、帧序号和纹理

ColorizedBodySteamData

获取深度背景分离图的数据、宽、高、数据格式、帧序号和纹理

MaskedColorStreamData

获取彩色抠图的数据、宽、高、数据格式、帧序号和纹理

BodyStreamData

获取Body数据的数组、用户标签数据及地面检测功能

更详细的api文档见 UnityAPI.chm.

API使用说明

设备的初始化

StreamManager streamManager = AstraSimpleSDK.streamManager;
streamManager. SetInitSuccessCallback(OnInitCallback);
streamManager. Initialize();

打开流

streamManager. OpenStream(StreamType.Depth);

StreamType包括:

Depth(深度流),对应数据为深度信息

Color(彩色流),对应数据为彩色图RGB24格式信息

Infrared(IR流),对应数据为IR信息

MaskedColor(彩色抠图流),对应数据为RGBA32格式的抠图数据,将人从背景中抠出来的效果

ColorizedBody(深度背景分离图流),对应数据为RGBA32格式数据,按颜色区分不同的人

Body(Body流),内含用户标签数组,所有识别出的Body列表,其中每个Body可包含质心点、骨架关节信息、手势抓握等信息。

获取深度流数据

StreamData streamData = streamManager.GetStreamData ();
DepthStreamData depthData = streamData. depthData;
if (depthData != null)
{
depthImage.texture = depthData.texture;
}

获取彩色流数据

StreamData streamData = streamManager.GetStreamData ();
ColorStreamData colorData = streamData. colorData;
if (colorData != null)
{
colorImage.texture = colorData .texture;
}

获取深度背景分离流数据

StreamData streamData = streamManager.GetStreamData ();
ColorizedBodyStreamData colorizedBodyData = streamData. colorizedBodyData;
if (colorizedBodyData!= null)
{
labelImage.texture = colorizedBodyData.texture;
}

获取彩色抠图流数据

StreamData streamData = streamManager.GetStreamData ();
MaskedColorStreamData maskedColorData = streamData. maskedColorData;
if (maskedColorData != null)
{
maskedColorImage.texture = maskedColorData .texture;
}

获取Body流数据

StreamData streamData = streamManager.GetStreamData ();
BodyStreamData bodyData = streamData. bodyData;
if (bodyData != null)
{
Body[] bodies = bodyData .bodies;
}

获取骨架数据

Joint[] joints = body.Joints;
foreach (var joint in joints)
{
var jointType = joint.Type;
if (joint.status == JointStatus.Tracked)
{
var pos = joint.WorldPosition;
}
}
JointStatus
Joint status enumeration
Definition: Body.hpp:162

关闭流

streamManager. CloseStream(StreamType.Depth);

关闭体感器

streamManager. Terminate();

其他操作

// 设置深度图分辨率模式.需初始化体感器成功后通过GetAvailableDepthModes获取列表.
AstraSimpleSDK.streamManager. SetDepthMode(Astra.ImageMode mode);
// 返回当前设置的深度分辨率模式.
Astra.ImageMode mode = AstraSimpleSDK.streamManager.GetDepthMode();
// 设置彩色图分辨率模式.需初始化体感器成功后通过GetAvailableColorModes获取列表.
AstraSimpleSDK.streamManager.SetColorMode(Astra.ImageMode mode);
// 返回当前设置的彩色图分辨率模式.
Astra.ImageMode mode = AstraSimpleSDK.streamManager.GetColorMode();
// 获取可用的深度图分辨率模式列表.需初始化体感器成功后调用才有效.
Astra.ImageMode[] modes = AstraSimpleSDK.streamManager.GetAvailableDepthModes();
// 获取可用的彩色图分辨率模式列表.需初始化体感器成功后调用才有效.
Astra.ImageMode[] modes = AstraSimpleSDK.streamManager.GetAvailableColorModes();
// 判断该数据流是否已开启.
bool isStreamOpened = AstraSimpleSDK.streamManager.IsStreamOpend(StreamType type);
// 是否开启自动刷新纹理. 开启后StreamData中的texture将自动刷新.
AstraSimpleSDK.streamManager.UsingTexture(TextureType type , bool use);
// 判断当前纹理类型是否已开启自动刷新.
AstraSimpleSDK.streamManager.IsUsingTexture(TextureType type);
// 设置body特征. 人体分割/ 人体分割+骨架 / 人体分割+骨架+手抓握状态.
AstraSimpleSDK.streamManager.SetBodyFeatures(byte bodyId, Astra.BodyTrackingFeatures features);
// 设置默认body特征. 人体分割/ 人体分割+骨架 / 人体分割+骨架+手抓握状态.
AstraSimpleSDK.streamManager.SetDefaultBodyFeatures(Astra.BodyTrackingFeatures features);
// 获取默认body特征. 人体分割/ 人体分割+骨架 / 人体分割+骨架+手抓握状态.
Astra.BodyTrackingFeatures features = AstraSimpleSDK.streamManager.GetDefaultBodyFeatures();
// 设置骨架计算精度.精度越高对CPU要求越高.
AstraSimpleSDK.streamManager .SetSkeletonOptimization(Astra.SkeletonOptimization optimization);
// 获取骨架计算精度.
Astra.SkeletonOptimization optimization = AstraSimpleSDK.streamManager .GetSkeletonOptimization();
// 设置骨架轮廓. 全身模式 / 4点模式 / 上半身模式.
AstraSimpleSDK.streamManager .SetSkeletonProfile(Astra.SkeletonProfile profile);
// 获取骨架轮廓. 全身模式 / 4点模式 / 上半身模式.
Astra.SkeletonProfile profile = AstraSimpleSDK.streamManager .GetSkeletonProfile();
// 是否已成功的初始化完成.
bool isInitialized = AstraSimpleSDK.streamManager .isInitialized;
// 设置序列号.
AstraSimpleSDK.streamManager .SetLicense(String licenseString);
Definition: ImageMode.cs:10
Definition: ApiStatus.cs:4