企业建网站的好处,库存网站建设定制,手机网站单页怎么做,实训小结网站建设大恒工业相机SDK开发概览 一、开发环境搭建1、C# 环境配置#xff08;VS2019#xff09;2、C 环境配置#xff08;VS2019#xff09;3、python 环境配置#xff08;Pycharm#xff09; 二、相机二次开发流程三、相机相机属性参数配置四、图像采集单帧采集回调采集 注意事… 大恒工业相机SDK开发概览 一、开发环境搭建1、C# 环境配置VS20192、C 环境配置VS20193、python 环境配置Pycharm 二、相机二次开发流程三、相机相机属性参数配置四、图像采集单帧采集回调采集 注意事项千兆网相机心跳包HDR相机 一、开发环境搭建
1、Galaxy的安装 Galaxy_windows2023年5月版本 下载完成后对软件进行安装切记自己的安装目录 安装完成后检查自己的相机是否是网口相机如果是网口相机则需要进行IP配置当相机与计算及网口处于同一网段下才可以打开相机并控制相机。
IPConfig工具可以查找到所有网段的设备通过自动配置的方式配置相机IP此时网口必须为固定IP 复位设备 功效等同于给设备掉电上电一次相机内程序全部重新加载 重连设备 功效等同于软件接口关闭设备执行此操作后允许用户重新打开设备 打开GalaxyViewer软件中可以实现正常采集图像表示SDK的系统环境正常。 Windows环境下当Galaxy安装完成后会在安装目录下生成APIDll、示例程序、驱动、开发文档等
1、C# 环境配置VS2019
1新建一个C#控制台应用工程》引用》右键》添加引用。点击浏览在安装目录中选择dll 2在安装目录下》GalaxySDK》APIDll》根据工程架构不同选择不同的dll文件x64选择Win64其他选择Win32 3根据目标框架不同选择.NET3.5或者.NET4.0 选择项目菜单点击属性查看目标框架 小于4.0版本则使用.NET3.5大于4.0版本则使用.NET4.0版本 4选择GxIAPINET.dll文件点击添加点击确定 5引用中显示已添加GxIAPINET后在程序中添加using GxIAPINET 至此大恒工业相机C#的开发环境已经配置完毕
2、C 环境配置VS2019
1新建一个C控制台项目 2打开项目菜单选择工程属性 3配置头文件 选择C/C》常规》包含附加目录 添加安装目录下GalaxySDK》Samples》CSDK》inc文件夹 4配置链接器 选择链接器》常规》包含附加目录 查看自己的工程是x86还是x64 根据工程的不同添加安装目录下GalaxySDK》Samples》CSDK》lib》x86文件夹或者x64文件夹 5配置链接器 选择链接器》输入》附加依赖项输入GxIAPICPPEx.lib 添加完链接库的名称后再我们cpp工程中引用一下GalaxyIncludes库就可以对我们的库进行调用了 至此大恒工业相机C的开发环境已经配置完毕
3、python 环境配置Pycharm
1新建一个工程将GalaxySDK》Samples》Python SDK中的gxipy文件夹拷贝到工程目录下 2添加PIL库打开文件》Settings选择Project》Python Interpreter后点击 号 2搜索pillow选择这个库点击Install Package进行安装 3安装numpy搜索numpy选择这个库点击Install Package进行安装 同样可以对我们的GalaxyAPI进行调用了 至此大恒工业相机python的开发环境已经配置完毕
二、相机二次开发流程 相机的初始化相关接口及功能
IGXFactory接口类实现对全局资源的初始化IGXFactory接口类实现对所有设备的枚举IGXDeviceInfo接口类实现接收所有枚举出的设备信息
C示例程序
IGXFactory::GetInstance().Init();//初始化
GxIAPICPP::gxdeviceinfo_vector deviceInfo; //定义设备列表
IGXFactory::GetInstance().UpdateDeviceList(1000, deviceInfo);//枚举设备
size_t num deviceInfo.size();
std::cout 检测到相机 num台\n;//显示设备数量C#示例程序 IGXFactory.GetInstance().Init();//初始化
ListIGXDeviceInfo deviceInfo new ListIGXDeviceInfo();//创建一个设备列表
IGXFactory.GetInstance().UpdateDeviceList(1000, deviceInfo);//枚举所有设备
//IGXFactory.GetInstance().UpdateAllDeviceList(1000, deviceInfo);//枚举所有设备
int num deviceInfo.Count;//获取设备数量
Console.WriteLine(检测到相机num台);4. IGXDeviceInfo接口类获取设备的类型、厂商名称、 设备展示名称、设备SN号、 IP地址、用户id、mac地址等信息
GX_DEVICE_CLASS_LIST deviceclass deviceInfo[0].GetDeviceClass();//获取设备类型USB3.0、USB2.0、Gige
string vendorname deviceInfo[0].GetVendorName();//获取设备厂商名称
string displayname deviceInfo[0].GetDisplayName();//获取设备展示名称
string ip deviceInfo[0].GetIP();//获取设备ip地址
string sn deviceInfo[0].GetSN();//获取设备SN号
string userid deviceInfo[0].GetUserID();//获取设备用户id
string mac deviceInfo[0].GetMAC();//获取设备mac地址Python示例程序
DeviceManager接口类实现对设备的枚举、获取设备数量信息以及通过关键字获取设备的sn号、IP地址、Mac地址、厂商名称、设备名称等信息 大恒相机设备控制等功能 2. IGXFactory接口类通过sn、ip、userid、mac等方式打开设备获取IGXDevice设备对象
CGXDevicePointer Cam;
/通过SN打开第一台设备
Cam IGXFactory::GetInstance().OpenDeviceBySN(sn GX_ACCESS_EXCLUSIVE);//通过IP打开第一台设备
Cam IGXFactory::GetInstance().penDeviceByIP(ipGX_ACCESS_EXCLUSIVE);//通过UserID打开第一台设备
Cam IGXFactory::GetInstance().OpenDeviceByUserID(userid, GX_ACCESS_EXCLUSIVE);
Cam IGXFactory::GetInstance().OpenDeviceByMAC(macGX_ACCESS_EXCLUSIVE);//通MAC地址打开第一台设备IGXDevice Cam null;
//通过SN打开第一台设备
Cam IGXFactory.GetInstance().OpenDeviceBySN(sn, GX_ACCESS_MODE.GX_ACCESS_EXCLUSIVE);//通过IP打开第一台设备
Cam IGXFactory.GetInstance().OpenDeviceByIP(ip, GX_ACCESS_MODE.GX_ACCESS_EXCLUSIVE);//通过UserID打开第一台设备
cam IGXFactory.GetInstance().OpenDeviceByUserID(userid,GX_ACCESS_MODE.GX_ACCESS_EXCLUSIVE)//
Cam IGXFactory.GetInstance().OpenDeviceByMAC(mac, GX_ACCESS_MODE.GX_ACCESS_EXCLUSIVE);//通MAC地址打开第一台设备GX_ACCESS_CONTROL以控制的方式打开相机GX_ACCESS_EXCLUSIVE以独占的方式发开相机GX_ACCESS_READONLY以只读的方式打开相机 IGXDevice接口类 获取流通到个数 获取IGXStream流通道对象获取IGXFeatureControl、GetRemoteFeatureControl 属性控制器 C
//获取流通个数
int stream_num Cam-GetStreamCount();
//打开第一台设备以及设备下面第一个流
CGXStreamPointer Cam_stream Cam-OpenStream(0);
//获取远端设备属性控制器
CXFeatureControlpointer Cam RemoteControl Cam-GetRemoteFeatureControl();
//获取本地属性控制器
CGXFeatureControlPointer Cam_Control Cam-GetFeatureControl();
//关闭设备
Cam-Close();C#
//获取流通道个数
uint stream_num Cam.GetStreamCount();
//打开设备的流
IGXStream Cam_Stream Cam.OpenStream();
//获取远端设备属性控制器
IGXFeatureControl Cam_RemoteControl Cam.GetRemoteFeatureControl();
//获取本地属性控制器
IGXFeatureControl Cam_Control Cam.GetFeatureControl();
//关闭设备
Cam.Close();Python DeviceManager接口类通过序号、sn、ip、userid、mac等方式打开设备获取Device设备对象
# 通过索引序号打开设备
cam device_manager.open_device_by_index(1)
# 通过SN号打开设备
cam device_manager.open_device_by_sn(sn)
#通过ip地址开设备
cam device_manager.open_device_by_ip(_ip)
# 通过mac地址打开设备
cam device_manager .open_device_by_mac(mac)
# 通过user id打开设备
cam device_manager.open_device_by_user_id(user_id)Device接口类设置触发模式、曝光、增益、获取流通道个数、打开流通道、获取流通道对象、关闭设备
# set continuous acquisition
cam.TriggerMode.set(gx .GxSwitchEntry .0FF)
# set exposure
cam.ExposureTime.set(10000)
# set gain
cam.Gain.set(10.0)
stream_num cam.get_stream_channel_num()
# start data acquisition
cam.stream_on()
cam_stream cam.data_stream[0]
cam.close_device()IGXStream、DataStream 接口对象注册、注销回调采集函数。 C
//注册回调采集
pCaptureEventHandler new CSampleCaptureEventHandler();
Cam_stream-RegisterCaptureCallback(pCaptureEventHandlerNULL);
//注销回调采集
Cam_stream-UnregisterCaptureCallback();C#
//注册回调采集
Cam_Stream.RegisterCaptureCallback(Cam,OnFrameCallbackFun)
//注销回调采集
Cam_Stream.UnregisterCaptureCallback();python
#注册采集回调函数
cam_stream.register_capture_callback(capture_callback)
# 注销采集回调函数
cam_stream.unregister_capture_caltback()IGXStream、DataStream 接口对象进行单帧采集 C
//单采集
CImageDataPointer image Cam_stream-GetImage(2000);//超时msC#
//单采集
IImageData image Cam_Stream.GetImage(2000);//超时msPython
# 单帧采集
raw_image cam_stream.get_image()三、相机相机属性参数配置
相机属性的数据类型
IIntFeature IGXFeatureControl::GetIntFeature 整型IFloatFeature IGXFeatureControl::GetFloatFeature 浮点型IBoolFeature IGXFeatureControl::GetBoolFeature 布尔型IEnumFeature IGXFeatureControl::GetEnumFeature 枚举型IStringFeature IGXFeatureControl::GetStringFeature 字符串ICommandFeature IGXFeatureControl::GetCommandFeature 命令类型IRegisterFeature IGXFeatureControl::GetRegisterFeature 寄存器类型 当不知道该属性可以被写入时可通过IsReadable()和IsWritable()方法进行查询如
bool bIsReadable cam_control.IsReadable(ExposureTime);
if (bIsReadable)cam_control.GetFloatFeature(ExposureTime).GetValue():
elseMessageBox.Show(此属性不可读);
bool bIsWriteable cam_control.IsWritable(Gain);
if (bIswriteable)cam_control.GetFloatFeature(Gain).SetValue(6);
elseMessageBox.Show(此属性不可写):对于int类型和float类的属性可以获取该参数可设置的最大值、最小值、步进值而float类型还可以获取参数的单位
cam_control.GetIntFeature(width).GetInc();
cam_control.GetIntFeature(width).GetMin();
cam control.GetIntFeature(width).GetMax();
cam_control.GetFloatFeature(ExposureTime).GetMin();
cam_control.GetFloatFeature(ExposureTime).GetUnit()
cam_control.GetFloatFeature(ExposureTime).GetInc();对于枚举类型的参数可以获取该参数的枚举项列表
Liststring m_enum cam_control.GetEnumFeature(AutoExposure).GetEnumEntryList();对于字符串类型的参数可以获取该参数的最大支持写入长度
long maxlength cam_control.GetStringFeature(DeviceUserID).GetStringMaxLength();四、图像采集
单帧采集
采集前必须先调用 StartGrab 开启流通道的采集然后再给设备发送开采命令否则开采命令无效
//单采集
Cam_Stream.StartGrab();
Cam_RemoteControl.GetCommandFeature(AcquisitionStart).Execute();
IImageData image Cam_Stream.GetImage(1000);//超时ms
if (image.Getstatus() GX_FRAME_STATUS_LIST.GX FRAME_STATUS_SUCCESS)
{
//获取到完整帧图像进行图像处理
image.Destroy();
}回调采集
采集图像必须先注册回调采集函数再调用 StartGrab 开启流通道采集、再给设备发送开采命令
//注册回调采集
Cam_Stream.RegisterCaptureCallback(Cam, OnFrameCallbackFun):
Cam_Stream.StartGrab();
Cam_RemoteControl.GetCommandFeature(AcquisitionStart).Execute();回调函数
public static void OnFrameCallbackFun(object obj, IFrameData objIFrameData)
{
//用户私有参数 obi用户在注册回调函数的时候传入了设备对象在回调函数内部可以将此
//参数还原为用户私有参数IGXDevice objIGXDevice obj as IGXDevice;if (objIFrameData.Getstatus() GX_FRAME_STATUS_LIST.GX FRAME_STATUS_SUCCESS){UInt64 nwidth objIFrameData.Getwidth();UInt64 nHeight objiFrameData.GetHeight();GX_PIXEL_FORMATENTRY emPixelFormat objIFrameData.GetPixelFormat();}
}回调采集图像的数据类型为IFrameData单帧采集的数据类型为IImageData两者的区别为IImageData类多了一个**Destroy()**方法
注意事项
千兆网相机心跳包
在程序正常运行时、相机和PC之间会有心跳检测信号保证相机处在连线状态。 当程序在Debug时程序在单步调试时PC无法给发送心跳包、因此当停留时间超过心跳检测超时时间则会出现设备掉线情况。
通常将心跳检测时间设置的大一些解决这种情况
打开设备后没有执行关闭设备程序退出了程序再次调用相机时会出现设备无法打开的情况。 使用Ipconfig中的复位设备将设备状态重置
HDR相机
HDR相机中参数与其他相机的参数有冲突现象因此在使用HDR相机时直接参考HDR相机例程 当HDR相机开启HDR模式后其他例程在相机初始话曝光等参数时会出现错误。最好运行HDR专用例程。 PS哈终于写完了累死其他品牌的相机用到再说 有问题可以加QQ群907873019 【大恒工业相机SDK开发C#版】相机初始化采集第一张图像