nokhwa
Nokhwa(녹화):韩语单词,意为"记录"。
一个简单易用的跨平台 Rust 网络摄像头捕获库
使用 nokhwa
可以通过在 Cargo.toml
中添加以下内容来将 Nokhwa 添加到你的 crate 中:
[dependencies.nokhwa]
version = "0.10.0"
# 使用原生输入后端,启用 WGPU 集成
features = ["input-native", "output-wgpu"]
大多数情况下,你只需使用 Camera
结构体提供的功能。如果需要更低级别的访问,可以选择使用 nokhwa::backends::capture::*
中的原始捕获后端。
示例
// 系统中的第一个摄像头
let index = CameraIndex::Index(0);
// 请求可解码为 RGB 的最高分辨率 CameraFormat
let requested = RequestedFormat::new::<RgbFormat>(RequestedFormatType::AbsoluteHighestFrameRate);
// 创建摄像头
let mut camera = Camera::new(index, requested).unwrap();
// 获取一帧
let frame = camera.frame().unwrap();
println!("捕获单帧大小为 {}", frame.buffer().len());
// 解码为 ImageBuffer
let decoded = frame.decode_image::<RgbFormat>().unwrap();
println!("解码后帧大小为 {}", decoded.len());
examples
文件夹中有一个使用 nokhwa
制作的命令行应用。
API 支持
下表列出了当前 Nokhwa API 的支持情况。
Backend
列表示后端。Input
列表示从摄像头读取帧的支持。Query
列表示系统设备列表支持。Query-Device
列表示读取设备功能的支持。Platform
列表示该功能可用的平台。
后端 | 输入 | 查询 | 设备查询 | 平台 |
---|---|---|---|---|
Video4Linux(input-native ) | ✅ | ✅ | ✅ | Linux |
MSMF(input-native ) | ✅ | ✅ | ✅ | Windows |
AVFoundation(input-native ) | ✅ | ✅ | ✅ | Mac |
OpenCV(input-opencv )^ | ✅ | ❌ | ❌ | Linux, Windows, Mac |
WASM(input-wasm ) | ✅ | ✅ | ✅ | 浏览器(Web) |
✅: 可用, 🔮 : 实验性, ❌ : 不支持, 🚧: 计划中/进行中
^ = 可能存在 bug。同时支持 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 的建议(除非必要) - 请限制
unsafe
的使用 - 所有贡献均在 Apache 2.0 许可下,除非另有说明
最低支持的 Rust 版本
nokhwa
可能在旧版本的 rustc
上构建,但除了最新的稳定版 Rust 外,不保证其他版本。
赞助商
请考虑捐赠!这有助于我在父母面前不那么像个失败者!