#cross-platform #webcam #capture #camera

nokhwa

一个简单易用的跨平台 Rust 摄像头捕获库

26 个版本

0.10.4 2023 年 5 月 14 日
0.10.3 2022 年 12 月 28 日
0.10.0-rc.22022 年 11 月 17 日
0.9.4 2021 年 12 月 17 日
0.3.2 2021 年 7 月 10 日

#4 in 多媒体

Download history 446/week @ 2024-04-14 355/week @ 2024-04-21 353/week @ 2024-04-28 270/week @ 2024-05-05 545/week @ 2024-05-12 490/week @ 2024-05-19 320/week @ 2024-05-26 470/week @ 2024-06-02 413/week @ 2024-06-09 490/week @ 2024-06-16 449/week @ 2024-06-23 407/week @ 2024-06-30 482/week @ 2024-07-07 549/week @ 2024-07-14 569/week @ 2024-07-21 688/week @ 2024-07-28

2,312 每月下载次数
11 个 Crates (10 直接) 中使用

Apache-2.0

450KB
9K SLoC

cargo version docs.rs version

nokhwa

Nokhwa(녹화): 韩语单词,意为“记录”。

一个简单易用的跨平台 Rust 摄像头捕获库

使用 nokhwa

您可以通过将 nokhwa 添加到您的 Cargo.toml 中将其添加到您的 crate 中

[dependencies.nokhwa]
version = "0.10.0"
# Use the native input backends, enable WGPU integration
features = ["input-native", "output-wgpu"]

您可能只会使用由 Camera 结构体提供的功能。如果您需要更底层的访问,您可以选择使用在 nokhwa::backends::capture::* 中找到的原始捕获后端。

示例

// first camera in system
let index = CameraIndex::index(0); 
// request the absolute highest resolution CameraFormat that can be decoded to RGB.
let requested = RequestedFormat::<RgbFormat>::new(RequestedFormatType::AbsoluteHighestFrameRate);
// make the camera
let mut camera = Camera::new(index, requested).unwrap();

// get a frame
let frame = camera.frame().unwrap();
println!("Captured Single Frame of {}", frame.buffer().len());
// decode into an ImageBuffer
let decoded = frame.decode_image::<RgbFormat>().unwrap();
println!("Decoded Frame of {}", decoded.len());

examples 文件夹中可以找到使用 nokhwa 制成的命令行应用程序。

API 支持

下表列出了当前 Nokhwa API 的支持情况。

  • Backend 列表示后端。
  • Input 列表示从摄像头读取帧。
  • Query 列表示系统设备列表支持。
  • Query-* 列表示读取设备功能。
  • Platform 列表示该平台上有何可用。
后端 输入 查询 查询-设备 平台
Video4Linux(input-native) Linux
MSMF(input-native) Windows
AVFoundation(input-native) Mac
OpenCV(input-opencv)^ Linux, Windows, Mac
WASM(input-wasm) 浏览器(Web)

✅: 正常工作,🔮 : 实验,❌ : 不支持,🚧: 计划/进行中

^ = 可能存在错误。也支持 IP 摄像头。

功能

默认功能不包含任何内容。以 input-* 开头的任何内容都是一个功能,该功能可以启用特定的后端。

input-* 功能

  • input-native:使用V4L2(Linux)、MSMF(Windows)或AVFoundation(Mac OS)
  • input-opencv:启用opencv后端。(跨平台)
  • input-jscam:启用使用JSCamera结构体,它使用浏览器API。(Web)

相反,任何以output-*开头的都控制着某个功能,该功能控制着某物的输出(通常是来自摄像头的帧)

output-*功能

  • output-wgpu:启用API,可以直接将帧复制到wgpu纹理中。
  • output-threaded:启用基于线程/回调的摄像头。

其他功能

  • decoding:启用mozjpeg解码。默认启用。
  • docs-only:文档功能。在docs.rs构建中启用。
  • docs-nolink:构建文档时不包含任何链接。在docs.rs构建中启用。
  • test-fail-warning:在警告时失败。在CI中启用。

您可以选择使用,以减少膨胀。

问题

如果您正在创建问题,请确保

  • 尚未创建
  • 附加您所做的事情、您的环境、复现步骤和回溯。谢谢!

贡献

欢迎贡献!

  • 请使用rustfmt格式化所有代码,并遵循clippy的lints(除非有必要不这样做)
  • 请限制使用unsafe
  • 除非另有规定,所有贡献都受Apache 2.0许可证的约束

最低服务Rust版本

nokhwa可能在较旧的rustc版本上构建,但对于最新的稳定Rust没有保证。

赞助商

请考虑捐赠!这有助于我让父母看起来不像失败者!

依赖项

~2–39MB
~548K SLoC