Astra SDK
v2.1.3
|
The Astra SDK 支持各种类型的流类型。底层的流类型由摄像头生成并且通过SDK传输给应用程序 。上层的流类型则是通过SDK的插件从底层的流类型高效地运算得到的。一般来说,我们应该首选 可用的上层流。
流类型 | 描述 |
---|---|
ColorStream | 来自摄像头的RGB像素数据。不能和InfraredStream同时打开.每个ColorFrame 中的数组 data 包含 0-255之间的数值,这些数值代表每个像素每个色彩通道的值. |
DepthStream | 来自摄像头的深度数据。每个 DepthFrame 中的数组data 包含了摄像头 视场范围内每个像素的值,单位是毫米 |
InfraredStream | 来自摄像头的IR数据。不能和ColorStream同时打开. |
流类型 | 描述 |
---|---|
PointStream | 从深度数据计算的世界坐标点云(XYZ)。 每个 PointFrame 的data 数组元素是 astra::Vector3f 类型的, 通过访问其x , y 和 z 值可以方便地访问每个像素 |
HandStream | 从深度数据计算出来的手点。 对每一个 HandFrame , 在任一给定时间点从 HandFrame::handpoint_count 函数可以得到点的数量, 通过 HandFrame::handpoints 函数还可以得到 astra::HandFrame::HandPointList |
BodyStream | 从深度数据计算的骨架信息.包括最多5个人体的19个关节点的2d坐标 ,3d坐标,在深度图上的掩码和地面信息.使用BodyStream需要从orbbec 获取授权码.未授权时只能测试用,测试用程序在程序启动后仅能提供约 30分钟骨架数据. |
MaskedColorStream | 从ColorStream和BodyStream计算出的数据.识别到人的地方会显示 人对应的彩色数据,RGBA8888格式. |
ColorizedBodyStream | 从BodyStream计算出的数据.不同的人使用不同的颜色上色.RGB格式. |
Astra SDK 提供了两个方法来获取流数据。根据您应用的特定需求和其复杂度, 两个方法中总有 一个更为适用的方法。
通过轮询的方法来获取流数据是一种比较直接的方法。在Hello World教程里我们采用的就是这种 方法。使用这种方法很简单,你只需要调用 StreamReader
的 get_latest_frame
函 数,然后用模板函数 get<T>
来返回得到特定类型的帧。在这里 T
必须是一个有效的帧 类型。函数 get_latest_frame
是阻塞式的,在下一帧数据到来之前,程序将被挂起。如果 你想限制阻塞时间,可以给 get_latest_frame
函数传递一个 timeout
变量。
通过侦听的方法来获取数据需要事先做一些设置,这种方法允许开发者将帧的处理委托给一个或多 个不同的类。 Astra SDK 提供了一个叫 FrameListener
的抽象类,该类只实现了一 个叫 FrameListener::on_frame_ready
的函数。当数据帧到来的时候, 该类会立即调用 FrameListener::on_frame_ready
并且将帧的引用作为参数传入。
frame_listener
继承的listener类示例定义了 listener 类,您还必须在您的应用程序里将这个listener实例化并且用 StreamReader::add_listener
函数将其添加到 StreamReader
之后才能使用它。
astra_update
的循环调用必须持续到程序要关 闭的时候,或者别的特定事件发生的时候。添加了listener之后,我们需要通过循环调用 astra_update
函数来触发事件。通过这种调 用,SDK可以检查是否有新的一帧数据到来,如果是,比如在本例子里,将调用 DepthFrameListener::on_frame_ready
函数,并且传入当前帧的引用。
如果想要了解更实际的listener使用,可以查看 Simple Depth Reader.