开发环境
系统要求
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;
{
var pos = joint.WorldPosition;
}
}
JointStatus
Joint status enumeration
Definition: Body.hpp:162
关闭流
streamManager. CloseStream(StreamType.Depth);
关闭体感器
streamManager. Terminate();
其他操作
Astra.
ImageMode[] modes = AstraSimpleSDK.streamManager.GetAvailableDepthModes();
Astra.
ImageMode[] modes = AstraSimpleSDK.streamManager.GetAvailableColorModes();
bool isStreamOpened = AstraSimpleSDK.streamManager.IsStreamOpend(StreamType type);
AstraSimpleSDK.streamManager.UsingTexture(TextureType type , bool use);
AstraSimpleSDK.streamManager.IsUsingTexture(TextureType type);
AstraSimpleSDK.streamManager.SetBodyFeatures(
byte bodyId,
Astra.BodyTrackingFeatures features);
AstraSimpleSDK.streamManager.SetDefaultBodyFeatures(
Astra.BodyTrackingFeatures features);
Astra.BodyTrackingFeatures features = AstraSimpleSDK.streamManager.GetDefaultBodyFeatures();
AstraSimpleSDK.streamManager .SetSkeletonOptimization(
Astra.SkeletonOptimization optimization);
Astra.SkeletonOptimization optimization = AstraSimpleSDK.streamManager .GetSkeletonOptimization();
AstraSimpleSDK.streamManager .SetSkeletonProfile(
Astra.SkeletonProfile profile);
Astra.SkeletonProfile profile = AstraSimpleSDK.streamManager .GetSkeletonProfile();
bool isInitialized = AstraSimpleSDK.streamManager .isInitialized;
AstraSimpleSDK.streamManager .SetLicense(String licenseString);
Definition: ImageMode.cs:10
Definition: ApiStatus.cs:4