Crates.io | nokhwa |
lib.rs | nokhwa |
version | 0.10.5 |
source | src |
created_at | 2021-05-17 07:04:56.488267 |
updated_at | 2024-10-12 14:35:10.837584 |
description | A Simple-to-use, cross-platform Rust Webcam Capture Library |
homepage | |
repository | https://github.com/l1npengtul/nokhwa |
max_upload_size | |
id | 398479 |
size | 335,574 |
Nokhwa(녹화): Korean word meaning "to record".
A Simple-to-use, cross-platform Rust Webcam Capture Library
Nokhwa can be added to your crate by adding it to your Cargo.toml
:
[dependencies.nokhwa]
version = "0.10.0"
# Use the native input backends, enable WGPU integration
features = ["input-native", "output-wgpu"]
Most likely, you will only use functionality provided by the Camera
struct. If you need lower-level access, you may instead opt to use the raw capture backends found at 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());
A command line app made with nokhwa
can be found in the examples
folder.
The table below lists current Nokhwa API support.
Backend
column signifies the backend.Input
column signifies reading frames from the cameraQuery
column signifies system device list supportQuery-Device
column signifies reading device capabilitiesPlatform
column signifies what Platform this is availible on.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 ) |
✅ | ✅ | ✅ | Browser(Web) |
✅: Working, 🔮 : Experimental, ❌ : Not Supported, 🚧: Planned/WIP
^ = May be bugged. Also supports IP Cameras.
The default feature includes nothing. Anything starting with input-*
is a feature that enables the specific backend.
input-*
features:
input-native
: Uses either V4L2(Linux), MSMF(Windows), or AVFoundation(Mac OS)input-opencv
: Enables the opencv
backend. (cross-platform)input-jscam
: Enables the use of the JSCamera
struct, which uses browser APIs. (Web)Conversely, anything that starts with output-*
controls a feature that controls the output of something (usually a frame from the camera)
output-*
features:
output-wgpu
: Enables the API to copy a frame directly into a wgpu
texture.output-threaded
: Enable the threaded/callback based camera.Other features:
decoding
: Enables mozjpeg
decoding. Enabled by default.docs-only
: Documentation feature. Enabled for docs.rs builds.docs-nolink
: Build documentation without linking to any libraries. Enabled for docs.rs builds.test-fail-warning
: Fails on warning. Enabled in CI.You many want to pick and choose to reduce bloat.
If you are making an issue, please make sure that
Contributions are welcome!
rustfmt
all your code and adhere to the clippy lints (unless necessary not to do so)unsafe
nokhwa
may build on older versions of rustc
, but there is no guarantee except for the latest stable rust.
Please consider donating! It helps me not look like a failure to my parents!