#camera-image #interface #api #linux-macos #zwo #asi #cameraunit

bin+lib cameraunit_asi

使用相机捕获图像的高效且直观的接口

14 个稳定版本

4.1.0 2024年5月14日
4.0.2 2024年4月4日
3.0.1 2024年4月4日
2.4.1 2023年10月3日
2.1.2 2023年9月30日

#178硬件支持

Download history 182/week @ 2024-05-14 10/week @ 2024-05-21 3/week @ 2024-06-04 4/week @ 2024-06-11

每月1,021 次下载

MIT/Apache

115KB
2K SLoC

cameraunit_asi

cameraunit_asi实现了由cameraunit提供的API特性和从ZWO基于CCD/CMOS探测器的帧捕获功能。此crate提供了对ASI相机SDK C库的封装,以安全的方式访问相机进行图像捕获和其他维护功能。图像以cameraunit::ImageData的形式获取,并包含丰富的元数据。

目前,这个Rust驱动程序旨在用于Linux和macOS平台。

您可以使用cameraunit_asi

  • 访问连接的ZWO ASI相机,
  • 从支持的像素格式(image crate作为后端)获取图像,
  • 将这些图像保存到FITS文件(需要cfitsio C库,并使用fitsio crate),
  • 或者使用内部的image::DynamicImage对象获取JPEGPNGBMP等。

先决条件

  1. 在您的系统上安装libusb-1.0-dev
  2. 获取ZWO ASI Camera SDK
  3. 从ZIP文件中提取ASI_linux_mac_SDK_VX.XX.tar.bz2,然后提取其内容(tar -xf ASI_linux_mac_SDK_VX.XX.tar.bz2),这将把内容提取到当前目录下的ASI_linux_mac_SDK_VX.XX
  4. ASI_linux_mac_SDK_VX.XX/include/ASICamera2.h复制到/usr/local/include,或任何您include路径中的其他目录。
  5. 打开位于ASI_linux_mac_SDK_VX.XX/lib目录下的README.txt,以确定适用的系统平台。按照附加命令安装udev规则,以便无需sudo即可访问相机。
  6. ASI_linux_mac_SDK_VX.XX/lib/your_target_platform/libASICamera*复制到您的库路径中的一个目录(可能是/usr/local/lib),并确保LD_LIBRARY_PATH(Linux)或DYLD_LIBRARY_PATH(macOS)包含库路径。

用法

将此添加到您的Cargo.toml

[dependencies]
cameraunit_asi = "4.1"

并将此添加到您的源代码

use cameraunit::{CameraUnit, CameraInfo, ImageData};
use cameraunit_asi::{num_cameras, open_first_camera, ASIImageFormat};

示例

最少,以下可以打开第一个可用的相机,捕获单个图像,并将其保存为FITS文件

let nc = num_cameras();
if nc <= 0 {
    return;
}
let (mut cam, _caminfo) = open_first_camera()
    .map_err(|x| println!("Opening camera: {}", x.to_string()))
    .unwrap();
cam.set_exposure(Duration::from_millis(700))
    .map_err(|x| println!("Setting exposure: {}", x.to_string()))
    .unwrap();
cam.start_exposure()
    .map_err(|x| println!("Start exposure: {}", x.to_string()))
    .unwrap();
while !cam
    .image_ready()
    .map_err(|x| println!("Check exposure: {}", x.to_string()))
    .unwrap()
{
    sleep(Duration::from_secs(1));
}
let img = cam
    .download_image()
    .map_err(|x| println!("Downloading image: {}", x.to_string()))
    .unwrap();
img.save_fits(Path::new("./"), "test", "asicam_test", true, true)
    .unwrap();

注意,未使用的_caminfo对象实现了cameraunit::CameraInfo特质,可以被克隆并在多个线程之间传递。

对于更完整的示例,请参考附带程序(链接)

安装

可以使用以下命令安装示例程序

$ cargo install cameraunit_asi

并使用以下命令执行

$ asicamera_capture

依赖项

~17–27MB
~346K SLoC