#camera #computer-vision #gen-i-cam #usb3 #uvc #gige

cameleon

cameleon是一个安全、快速且灵活的GenICam兼容相机库

14次发布

0.1.13 2024年8月23日
0.1.12 2023年8月29日
0.1.11 2023年5月22日
0.1.9 2023年3月18日
0.1.3 2021年6月13日

视频分类中排名16

Download history 111/week @ 2024-04-29 89/week @ 2024-05-06 144/week @ 2024-05-13 81/week @ 2024-05-20 82/week @ 2024-05-27 172/week @ 2024-06-03 138/week @ 2024-06-10 111/week @ 2024-06-17 125/week @ 2024-06-24 129/week @ 2024-07-01 124/week @ 2024-07-08 487/week @ 2024-07-15 466/week @ 2024-07-22 403/week @ 2024-07-29 313/week @ 2024-08-05 190/week @ 2024-08-12

每月下载1,387

MPL-2.0许可证

690KB
17K SLoC

cameleon is a safe, fast, and flexible library for GenICam compatible cameras

Crates.io Documentation MPL-2.0 Build Status

cameleon是一个为GenICam兼容相机提供安全、快速和灵活的库。

概述

cameleon是一个用于操作GenICam兼容相机的库。我们的主要目标是提供一个安全、快速且灵活的GenICam相机库。

目前,cameleon只支持USB3 Vision相机,但计划支持其他协议,包括GigE Vision。更多详细信息请参阅路线图

使用方法

USB3 Vision相机

要使用USB3 Vision相机,您需要安装libusb,请参阅如何安装libusb

首先,添加以下依赖项。

[dependencies]
cameleon = { version = "0.1", features = ["libusb"] }

然后,您可以枚举连接到主机的所有相机,并开始流式传输。

use cameleon::u3v;

// Enumerates all cameras connected to the host.
let mut cameras = u3v::enumerate_cameras().unwrap();

if cameras.is_empty() {
    println!("no camera found");
    return;
}


let mut camera = cameras.pop().unwrap();

// Opens the camera.
camera.open().unwrap();
// Loads `GenApi` context. This is necessary for streaming.
camera.load_context().unwrap();

// Start streaming. Channel capacity is set to 3.
let payload_rx = camera.start_streaming(3).unwrap();

for _ in 0..10 {
    let payload = match payload_rx.recv_blocking() {
        Ok(payload) => payload,
        Err(e) => {
            println!("payload receive error: {e}");
            continue;
        }
    };
    println!(
        "payload received! block_id: {:?}, timestamp: {:?}",
        payload.id(),
        payload.timestamp()
    );
    if let Some(image_info) = payload.image_info() {
        println!("{:?}\n", image_info);
        let image = payload.image();
        // do something with the image.
        // ...
    }

    // Send back payload to streaming loop to reuse the buffer. This is optional.
    payload_rx.send_back(payload);
}

// Closes the camera.
camera.close().unwrap();

更多示例请参阅此处

项目布局

Cameleon由几个crate组成。

  • cameleon: 提供控制相机的高级API。这是主要crate。
  • cameleon-genapi: 提供GenApi XML的解析器和解释器。
  • cameleon-device: 提供特定设备的协议解码器和基本I/O操作,还提供模拟器。
  • cameleon-gentl: 提供作为C库的GenTL接口。
  • cameleon-impl: 为其他crate提供内部API。cameleon-impl仅适用于cameleon项目。
  • cameleon-impl-macros:为其他crate提供过程宏。建议仅由cameleon项目使用cameleon-impl-macros

常见问题解答

USB3 Vision

如何安装libusb

Linux/macOS

您需要将libusb安装到pkg-config可以找到的位置。基本上,您只需通过系统包管理器(如sudo apt install libusb-1.0-0-devbrew install libusb)安装libusb即可。

如果您使用Linux,可能需要编辑USB设备的权限。您可以通过编辑udev规则来添加权限,配置示例可在此处找到:这里

Windows

您需要使用vcpkg安装libusb,请参阅此处了解如何使用vcpkg安装libusb

此外,您还需要为您的设备安装驱动程序。您可以在此处找到驱动安装的资源。
注意:请确保将驱动程序安装到复合设备,而不是其子设备。
为此,您需要使用zadig列出连接到主计算机的所有设备,如下所示。
describe zadig list option

然后安装WinUSB到您的设备。
describe how to install WinUSB driver to your composite device

帧率为什么这么低?

帧率可能受到多个因素的影响。

  1. 相机的参数设置

AcquisitionFrameRateExposureTime会直接影响帧率。因此,您需要首先设置这些参数以提高帧率。此外,如果DeviceLinkThroughputLimitMode设置为On,您需要增加DeviceLinkThroughputLimit的值。

  1. 许多设备同时在同一USB主机控制器上传输

在这种情况下,建议将相同的传输速率限制分配给连接的相机,确保总传输速率不超过主机控制器的最大带宽。

  1. usbfs_memory_mb设置为低值

如果您使用Linux,可能需要增加usbfs_memory_mb限制。默认情况下,Linux系统上的USB-FS仅允许所有USB设备使用16MB的缓冲内存。这对于高分辨率图像流来说相当低。我们建议您将此值设置为1000MB。您可以通过以下方式设置此值

echo 1000 > /sys/module/usbcore/parameters/usbfs_memory_mb

路线图

v0.2.0

  • 添加对GigE相机的支持
  • 实现仿真器
  • 添加保存和加载相机参数的支持

v0.3.0

  • 实现有效载荷块解析器
  • 添加对GenTL的支持

v0.4.0

  • 添加对UVC相机的支持

发布周期

我们每四周更新一次小版本,直到版本达到1.0.0

贡献

感谢您对为Cameleon做出贡献感兴趣!我们非常高兴您加入我们的开发。
要开始开发,请参阅CONTRIBUTING.md

许可

本项目采用MPL 2.0许可。

依赖

~5.5MB
~107K SLoC