7 个版本
0.1.5 | 2024年7月10日 |
---|---|
0.1.4 | 2024年6月28日 |
0.1.3 | 2024年4月3日 |
0.1.2 | 2024年3月17日 |
0.0.1 | 2024年1月27日 |
#21 in 机器人学
185KB
3.5K SLoC
kornia-rs:Rust的低级计算机视觉库
kornia-rs
是一个用 Rust 编写的低级计算机视觉库 🦀
使用此库以线程安全和高效的方式在您的机器学习和数据科学项目中执行图像 I/O、可视化和其他低级操作。
入门指南
cargorun --examplehello_world
use kornia_rs::image::Image;
use kornia_rs::io::functional as F;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// read the image
let image_path = std::path::Path::new("tests/data/dog.jpeg");
let image: Image<u8, 3> = F::read_image_jpeg(image_path)?;
println!("Hello, world!");
println!("Loaded Image size: {:?}", image.size());
println!("\nGoodbyte!");
Ok(())
}
Hello, world!
Loaded Image size: ImageSize { width: 258, height: 195 }
Goodbyte!
功能
- 🦀该库主要用 Rust 编写。
- 🚀 多线程且高效的图像 I/O、图像处理和高级计算机视觉操作。
- 🔢 n 维后端基于
ndarray
包。 - 🐍 使用 PyO3/Maturin 创建 Python 绑定。
- 📦 我们支持 Linux amd64/arm64、Macos 和 Windows。
- 支持的 Python 版本是 3.7/3.8/3.9/3.10/3.11
支持的图像格式
- 从 AVIF、BMP、DDS、Farbeld、GIF、HDR、ICO、JPEG (libjpeg-turbo)、OpenEXR、PNG、PNM、TGA、TIFF、WebP 读取图像。
图像处理
- 将图像转换为灰度,调整大小,裁剪,旋转,翻转,填充,归一化,反归一化,以及其他图像处理操作。
视频处理
- 从相机捕获视频帧。
🛠️ 安装
>_ 系统依赖
根据您想使用的功能,您可能需要在您的系统中安装以下依赖项
turbojpeg
sudo apt-get install nasm
gstreamer
sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
** 检查 gstreamer 安装指南:https://docs.rs/gstreamer/latest/gstreamer/#installation
🦀 Rust
将以下内容添加到您的 Cargo.toml
[dependencies]
kornia-rs = { version = "0.1.2", features = ["gstreamer"] }
或者,您可以使用 cargo
命令添加依赖项
cargo add kornia-rs
🐍 Python
pip install kornia-rs
示例:图像处理
以下示例展示了如何读取图像,将其转换为灰度并调整大小。然后,将图像记录到rerun
录制流中。
查看examples
目录中的所有示例,以了解更多用例。
use kornia_rs::image::Image;
use kornia_rs::io::functional as F;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// read the image
let image_path = std::path::Path::new("tests/data/dog.jpeg");
let image: Image<u8, 3> = F::read_image_jpeg(image_path)?;
let image_viz = image.clone();
let image_f32: Image<f32, 3> = image.cast_and_scale::<f32>(1.0 / 255.0)?;
// convert the image to grayscale
let gray: Image<f32, 1> = kornia_rs::color::gray_from_rgb(&image_f32)?;
let gray_resize: Image<f32, 1> = kornia_rs::resize::resize_native(
&gray,
kornia_rs::image::ImageSize {
width: 128,
height: 128,
},
kornia_rs::resize::InterpolationMode::Bilinear,
)?;
println!("gray_resize: {:?}", gray_resize.size());
// create a Rerun recording stream
let rec = rerun::RecordingStreamBuilder::new("Kornia App").connect()?;
// log the images
let _ = rec.log("image", &rerun::Image::try_from(image_viz.data)?);
let _ = rec.log("gray", &rerun::Image::try_from(gray.data)?);
let _ = rec.log("gray_resize", &rerun::Image::try_from(gray_resize.data)?);
Ok(())
}
Python使用
加载图像,直接将其转换为numpy数组,以便与其他库集成。
import kornia_rs as K
import numpy as np
# load an image with using libjpeg-turbo
img: np.ndarray = K.read_image_jpeg("dog.jpeg")
# alternatively, load other formats
# img: np.ndarray = K.read_image_any("dog.png")
assert img.shape == (195, 258, 3)
# convert to dlpack to import to torch
img_t = torch.from_dlpack(img)
assert img_t.shape == (195, 258, 3)
将图像写入磁盘
import kornia_rs as K
import numpy as np
# load an image with using libjpeg-turbo
img: np.ndarray = K.read_image_jpeg("dog.jpeg")
# write the image to disk
K.write_image_jpeg("dog_copy.jpeg", img)
使用turbojpeg
后端编码或解码图像流
import kornia_rs as K
# load image with kornia-rs
img = K.read_image_jpeg("dog.jpeg")
# encode the image with jpeg
image_encoder = K.ImageEncoder()
image_encoder.set_quality(95) # set the encoding quality
# get the encoded stream
img_encoded: list[int] = image_encoder.encode(img)
# decode back the image
image_decoder = K.ImageDecoder()
decoded_img: np.ndarray = image_decoder.decode(bytes(image_encoded))
使用具有SIMD加速的kornia-rs
后端调整图像大小
import kornia_rs as K
# load image with kornia-rs
img = K.read_image_jpeg("dog.jpeg")
# resize the image
resized_img = K.resize(img, (128, 128), interpolation="bilinear")
assert resized_img.shape == (128, 128, 3)
🧑💻 开发
先决条件:在您的系统中安装rust
和python3
。
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
在本地目录中克隆仓库
git clone https://github.com/kornia/kornia-rs.git
🦀 Rust
编译项目并运行测试
cargo test
对于特定测试,您可以运行以下命令
cargo test image
🐍 Python
为了构建Python轮文件,我们使用maturin
包。使用以下命令构建轮文件
make build-python
要运行测试,请使用以下命令
make test-python
💜 贡献
这是Kornia的子项目。加入社区以与我们取得联系,或者只需赞助项目:https://opencollective.com/kornia
依赖项
~6–17MB
~235K SLoC