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
每月下载1,387次
690KB
17K SLoC
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-dev
或brew install libusb
)安装libusb
即可。
如果您使用Linux,可能需要编辑USB设备的权限。您可以通过编辑udev
规则来添加权限,配置示例可在此处找到:这里。
Windows
您需要使用vcpkg
安装libusb
,请参阅此处了解如何使用vcpkg
安装libusb
。
此外,您还需要为您的设备安装驱动程序。您可以在此处找到驱动安装的资源。
注意:请确保将驱动程序安装到复合设备,而不是其子设备。
为此,您需要使用zadig
列出连接到主计算机的所有设备,如下所示。
然后安装WinUSB
到您的设备。
帧率为什么这么低?
帧率可能受到多个因素的影响。
- 相机的参数设置
AcquisitionFrameRate
和ExposureTime
会直接影响帧率。因此,您需要首先设置这些参数以提高帧率。此外,如果DeviceLinkThroughputLimitMode
设置为On
,您需要增加DeviceLinkThroughputLimit
的值。
- 许多设备同时在同一USB主机控制器上传输
在这种情况下,建议将相同的传输速率限制分配给连接的相机,确保总传输速率不超过主机控制器的最大带宽。
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