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 在 机器学习
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
切换视频流镜像