3个不稳定版本
0.2.0 | 2024年7月15日 |
---|---|
0.1.3 | 2024年7月12日 |
0.1.2 | 2024年4月27日 |
0.1.1 |
|
0.1.0 |
|
#118 在 硬件支持
每月253次下载
5.5MB
2K SLoC
包含 (Windows DLL, 1MB) src/GxIAPI.dll
已弃用
这个库基本上已经停止维护了,或者说已经被整合进了新的库之中,新的库是GXCI,它包含大恒相机SDK本地相机部分的全部原生实现,并且提供了对应的HAL封装,可以在github和crates上查看
此项目已弃用,或已被整合到新的项目中,新项目是GXCI,可在github和crates上查看,它包含大恒图像SDK本地相机部分的全部原生实现,并提供了HAL功能。
简介
gxi_hako是一款基于GxIAPI的Rust库,用于开发大恒工业相机的接口;
目前已实现本地相机的所有接口,枚举类型尚未完全迁移,并在utils中编写了一些工具类函数,便于使用
gxi_hako is developing the interface of Daheng Industrial Camera using Rust based on GxIAPI library;
At present, all interfaces for the local camera have been implemented, and the enums have not been completely migrated. Some utility functions have been written in utils to facilitate use.
概述
SDK开发文档包含在 ./doc/sdk 中,这里只提供SDK开发文档的英文版本,中文版本未在此提供(因为crates.io的10MB限制)。
您也可以从已安装的大恒图像SDK中获取SDK开发文档。
快速入门
以下代码与examples目录中的 list_devices_info.rs 相同
use std::mem::size_of;
use gxi_hako::{
gx::{
gx_interface::*,
gx_struct::*,
},
utils::{
debug::print_device_info,
builder::GXDeviceBaseInfoBuilder,
},
};
fn main() {
unsafe {
// You can change the library path as you need
let gx = GXInstance::new("C:\\Program Files\\Daheng Imaging\\GalaxySDK\\APIDll\\Win64\\GxIAPI.dll").expect("Failed to load library");
gx.gx_init_lib().expect("Failed to initialize library");
let mut device_num = 0;
gx.gx_update_device_list(&mut device_num, 1000)
.expect("Failed to update device list");
if device_num > 0 {
let mut base_info: Vec<GX_DEVICE_BASE_INFO> = (0..device_num).map(|_| {
GXDeviceBaseInfoBuilder::new().build()
}).collect();
// or you can use the following code to initialize the vector without using the builder
// let mut base_info = vec![
// GX_DEVICE_BASE_INFO {
// szVendorName: [0; GX_INFO_LENGTH_32_BYTE],
// szModelName: [0; GX_INFO_LENGTH_32_BYTE],
// szSN: [0; GX_INFO_LENGTH_32_BYTE],
// szDisplayName: [0; GX_INFO_LENGTH_128_BYTE],
// szDeviceID: [0; GX_INFO_LENGTH_64_BYTE],
// szUserID: [0; GX_INFO_LENGTH_64_BYTE],
// accessStatus: GX_ACCESS_STATUS_CMD::Unknown,
// deviceClass: GX_DEVICE_CLASS::Unknown,
// reserved: [0; 300],
// };
// device_num as usize
// ];
let mut size = (device_num as usize) * size_of::<GX_DEVICE_BASE_INFO>();
let status = gx
.gx_get_all_device_base_info(base_info.as_mut_ptr(), &mut size)
.expect("Failed to get all device base info");
if status == 0 {
// Assuming 0 is GX_STATUS_SUCCESS
println!(
"Device base info retrieved successfully. Number of devices: {}",
device_num
);
for device in &base_info {
print_device_info(&device);
}
} else {
println!("Failed to retrieve device base info, status: {}", status);
}
} else {
println!("No Devices found.");
}
gx.gx_close_lib().expect("Failed to close library");
println!("Library closed.")
}
}
用法
您可以在 gx_interface 文档中看到GXInstance部分(其中实现GXInterface trait并带有rust-doc),链接为 这里
示例
提供了5个示例,分别是:
- list_devices_info.rs: 列出所有设备的详细信息
- open_device_by_index.rs: 通过索引打开设备
- open_device_by_sn.rs: 通过序列号打开设备
- get_image.rs: 从相机获取图像
- callback_capture.rs: 注册回调函数以实时捕获图像
您可以使用以下命令运行示例
cargo run --example list_devices_info
依赖项
OpenCV环境
这里的OpenCV库仅用于轻松提供GUI以显示图像,因此如果您不想显示图像,可以忽略此部分。
安装LLVM和OpenCV 4.9.0
在 Windows 10/11 中,我想要使用以下命令使用 choco 安装 LLVM 和 OpenCV 4.9.0
choco install llvm opencv
以下是一些网站
添加路径环境变量
您可以将以下路径添加到路径环境变量中
- opencv 二进制路径 ...\opencv\build\bin
- opencv x64 二进制路径 ...\opencv\build\x64\vc16\bin
- choco 二进制路径 C:\ProgramData\chocolatey\bin
- LLVM 二进制路径 C:\Program Files\LLVM\bin
以下是一个示例
D:\ProgramUnsigned\Embedded\opencv\build\bin
D:\ProgramUnsigned\Embedded\opencv\build\x64\vc16\bin
C:\ProgramData\chocolatey\bin
C:\Program Files\LLVM\bin
添加 opencv 环境变量(系统变量)
OPENCV_INCLUDE_PATHS ...\opencv\build\include OPENCV_LINK_LIBS opencv_world490 OPENCV_LINK_PATHS ...\opencv\build\x64\vc16\lib
以下是一个示例
OPENCV_INCLUDE_PATHS D:\ProgramUnsigned\Embedded\opencv\build\include
OPENCV_LINK_LIBS opencv_world490
OPENCV_LINK_PATHS D:\ProgramUnsigned\Embedded\opencv\build\x64\vc16\lib
将 opencv_world490.dll 复制到目标目录(如果需要的话)
有时,您需要将 opencv_world490.dll 复制到与 exe 文件相同的目标目录。
GxIAPI 环境
您还需要安装 GxIAPI SDK,可以从官方网站下载。
只需为您的平台安装 SDK。
相机环境
您需要将相机连接到计算机,并确保相机已开启电源。
然后所有环境都准备好了。
相机支持
- USB3.0 相机
- Mer Camera (Mono8, Mono10)
- Gige 相机
平台支持
现在,仅支持 Windows。
许可
MIT 许可协议下许可。
贡献
嗯嗯... 占位符
致谢
pLaShOlDeR~
待办事项
- Get-Set 函数补全
- 本地相机函数补全
- 项目重构,等有空的时候重构
- 基本的示例
- 发布 crate,重构完就发布
- 更多的示例
- 更多的 doc 说明
- async/await 的支持,引入 tokio
- 补全网络相机(Gige)相关的函数
- 补全 FeatureID 的枚举
- Linux 平台支持
- 更多相机类型
DLL 实现状态
- 302 0 0001C020 GXCloseDevice
- 101 1 0001BBC0 GXCloseLib
- 700 2 0001E9E0 GXExportConfigFile
- 707 3 0001EA50 GXExportConfigFileW ?在开发文档里面没介绍这个函数
- 602 4 0001E920 GXFlushEvent
- 505 5 0001E6E0 GXFlushQueue
- 201 6 0001BDE0 GXGetAllDeviceBaseInfo
- 414 7 0001D5F0 GXGetBool
- 419 8 0001E080 GXGetBuffer
- 418 9 0001DF50 GXGetBufferLength
- 205 A 0001BE80 GXGetDeviceIPInfo
- 423 B 0001C0B0 GXGetDevicePersistentIpAddress
- 411 C 0001D3C0 GXGetEnum
- 410 D 0001CF50 GXGetEnumDescription
- 409 E 0001CE20 GXGetEnumEntryNums
- 506 F 0001E970 GXGetEventNumInQueue
- 422 10 0001C1E0 GXGetFeatureName
- 408 11 0001CCF0 GXGetFloat
- 406 12 0001C960 GXGetFloatRange
- 504 13 0001E670 GXGetImage
- 404 14 0001C730 GXGetInt
- 403 15 0001C590 GXGetIntRange
- 204 16 0001BC40 GXGetLastError
- 709 17 0001F370 GXGetOptimalPacketSize (Windows Only)
- 416 18 0001DAA0 GXGetString
- 415 19 0001D820 GXGetStringLength
- 425 1A 0001D970 GXGetStringMaxLength
- 705 1B 0001EEF0 GXGigEForceIp
- 704 1C 0001ECC0 GXGigEIpConfiguration
- 706 1D 0001F170 GXGigEResetDevice
- 701 1E 0001EAC0 GXImportConfigFile
- 708 1F 0001EB40 GXImportConfigFileW ?在开发文档里面没介绍这个函数
- 100 20 0001BB70 GXInitLib
- 400 21 0001C260 GXIsImplemented
- 401 22 0001C370 GXIsReadable
- 402 23 0001C480 GXIsWritable
- 301 24 0001BFB0 GXOpenDevice
- 300 25 0001BF10 GXOpenDeviceByIndex
- 702 26 0001EBC0 GXReadRemoteDevicePort
- 710 27 0001F3E0 GXReadRemoteDevicePortStacked
- 500 28 0001E5B0 GXRegisterCaptureCallback
- 600 29 0001E730 GXRegisterDeviceOfflineCallback
- 603 2A 0001E820 GXRegisterFeatureCallback
- 421 2B 0001E480 GXSendCommand
- 507 2C 0001F100 GXSetAcqusitionBufferNumber
- 413 2D 0001D720 GXSetBool
- 420 2E 0001E350 GXSetBuffer
- 424 2F 0001C160 GXSetDevicePersistentIpAddress
- 412 30 0001D4F0 GXSetEnum
- 407 31 0001CBE0 GXSetFloat
- 405 32 0001C860 GXSetInt
- 417 33 0001DDC0 GXSetString
- 501 34 0001E620 GX注销捕获回调
- 601 35 0001E7B0 GX注销设备离线回调
- 604 36 0001E8B0 GX注销功能回调
- 206 37 0001BD70 GX更新所有设备列表
- 200 38 0001BD00 GX更新设备列表
- 703 39 0001EC40 GX写入远程设备端口
- 711 3A 0001F450 GX写入远程设备端口堆栈 (仅限Windows)
依赖项
~4–28MB
~393K SLoC