4 个版本 (破坏性更新)

使用旧的 Rust 2015

0.3.0 2018年8月4日
0.2.0 2018年7月24日
0.1.0 2018年7月18日
0.0.1 2018年7月9日

#383机器学习

MIT 许可证

64KB
1K SLoC

Rust 的 OpenNI2

正在开发中的 Rust 包装器,用于 OpenNI2。OpenNI2 对于处理能够同时提供颜色和深度流的多个传感器摄像头非常有用,尤其是由 PrimeSense(OpenNI 软件项目的创始成员)开发的传感器,如 Xbox Kinect 和 ASUS Xtion。

应用示例

extern crate openni2;
use std::{thread, time};
use openni2::{Status, Device, Stream, SensorType, OniDepthPixel};
fn callback(stream: &Stream<OniDepthPixel>) {
    // This function is only invoked when a frame *is* available to read
    let frame = stream.read_frame().expect("Frame not available to read!");
    let px = frame.pixels();
    let closest = px.iter()
        .enumerate()
        .fold((0u16, 0u16, ::std::u16::MAX), |closest, (n, &depth)| {
            let (x, y) = (n as u16 % frame.width(), n as u16 / frame.width());
            if depth < closest.2 && depth != 0 {
                (x, y, depth)
            } else {
                closest
            }
    });
    println!("[{:-6} {:-6} {:-6}]", closest.0, closest.1, closest.2);
}
fn main() -> Result<(), Status> {
    // Initialize the library
    openni2::init()?;
    // Open the first device we find, or abort early
    let device = Device::open_default()?;
    // Get a handle for opening a stream from its depth sensor. If the device
    // didn't have a depth sensor, it would return `Err` and abort the program.
    let stream = device.create_stream(SensorType::DEPTH)?;
    // Register a callback that will be called, with the stream as its first
    // argument, whenever a new frame is ready. When the listener falls out of
    // scope, the callback will be unregistered.
    let _listener = stream.listener(callback)?;
    // Start the stream, then let the callback run until we kill the program
    // ourselves.
    stream.start()?;
    let heartbeat = time::Duration::from_millis(250);
    loop {
        thread::sleep(heartbeat);
    }
}

示例

examples/data_dump.rs 展示了查询设备和流属性以及等待新帧的方法。

examples/closest_point.rs 展示了基于事件的回调以及在深度图中找到最近点的方法。

examples/device_callbacks.rs 展示了检测新连接/断开设备的设备回调

examples/simple_viewer.rs 是一个带有键盘控制的视频流查看器。

  • 1 查看叠加的颜色和深度流
  • 2 查看颜色流
  • 3 查看深度流
  • m 切换视频流镜像

依赖项