#bindings #image #opencv #capture #how #pragmatic #raspicam

sys raspicam-rs

对 raspicam C++ 库的实用 Rust 绑定

4 个版本

0.1.3 2022 年 10 月 12 日
0.1.2 2022 年 10 月 11 日
0.1.1 2022 年 10 月 11 日
0.1.0 2022 年 10 月 11 日

#1760硬件支持

MIT 许可证

1.5MB
26K SLoC

C 22K SLoC // 0.2% comments C++ 3.5K SLoC // 0.2% comments Rust 567 SLoC // 0.0% comments Shell 32 SLoC // 0.1% comments

raspicam-rs

docs.rs Crates.io

Rust 对神奇的 C++ raspicam 库的绑定(可选 OpenCV 工具)!

这是我之前参与的一个基于 Rust 的机器人项目,该项目需要高帧率、低延迟和全彩支持: ez-aquarii

先决条件

您必须安装 32 位版本。Raspberry Pi 摄像头库在 64 位安装上无法工作。请参阅:https://github.com/raspberrypi/userland/issues/688


先决条件之一是您必须编译 raspicam 库并将其安装。此存储库有一个安装脚本,方便您一键完成所有操作

curl https://raw.githubusercontent.com/bluskript/raspicam-rs/master/install.sh | sudo bash

安装依赖项

sudo apt install clang libclang-dev

如果您使用 OpenCV 集成,还需安装 libopencv-dev 并在 crate 中启用 OpenCV 功能

raspicam-rs = { version = "0.1.2", features = ["opencv"] }
opencv = "0.70.0"

示例用法:展示如何捕获单个图像并将其保存

use image::RgbImage;
use raspicam_rs::{
    bindings::{RASPICAM_EXPOSURE, RASPICAM_FORMAT},
    RaspiCam,
};

fn main() {
    RaspiCam::new();
    let mut raspicam = raspicam_rs::RaspiCam::new();
    raspicam
        .set_capture_size(480, 480)
        .set_frame_rate(90)
        .set_format(RASPICAM_FORMAT::RASPICAM_FORMAT_RGB)
        .open(true)
        .unwrap();
    let img = RgbImage::from_raw(480, 480, raspicam.grab().unwrap().to_vec()).unwrap();
    img.save("frame.png").unwrap();
}

如何配置

这些绑定使用类似于构建器模式的机制来配置摄像头。您可以连续执行配置命令

let mut raspicam = raspicam_rs::RaspiCam::new();
raspicam
    .set_brightness(50)
    .set_contrast(0)
    .set_exposure(RASPICAM_EXPOSURE::RASPICAM_EXPOSURE_OFF)
    .set_format(RASPICAM_FORMAT::RASPICAM_FORMAT_RGB)
    .set_sensor_mode(7)
    .open(true);

如果直接没有相应的方法,您可以像这样调用内部 C++ 对象的方法

let mut camera = raspicam_rs::RaspiCam::new();
raspicam.obj.pin_mut().startCapture();

实现高 FPS、低延迟和全彩

根据我的经验,通过使用低分辨率(例如 480x480)、传感器模式 7、快门速度 15000 和设置帧率为 90,可以实现高 FPS 全彩实时处理

低延迟摄像头捕获的实际演示(此库之前的版本,但可以实现相同的结果): 查看这里

依赖关系

~2.6–7.5MB
~134K SLoC