Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。
Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有快速数据传输、低功耗、易于集成以及高度可扩展性等特点。
Baumer GAPI SDK是由Baumer公司提供的软件开发工具包,专门为其工业相机产品定制而成。该SDK旨在为开发人员提供一系列功能强大的工具和接口,以便轻松地与Baumer的工业相机进行通信、图像采集和处理等操作。
Baumer工业相机的Camera Explorer软件功能强大,内容丰富,通过该软件可以有效的获取相机相关的全部信息,在对于相机检测项目的开发中,有时需要获取相机中图像Buffer信息和相关的数据流信息,而Camera Explorer软件可以有效的显示相关的信息。
Baumer工业相机通过其SDK(软件开发工具包)可以获取相机的温度信息。相机的温度是指相机内部的温度,这个参数在工业相机的使用和性能评估中非常重要。
工业相机通过SDK获取相关生产信息涉及到多个技术背景。首先,工业相机通常配备高性能图像传感器和处理器,能够拍摄高质量的图像和视频。其次,SDK(Software Development Kit,软件开发工具包)则是由相机制造商提供的软件包,其中包含了与相机通信、图像处理等相关的API和工具。借助SDK,开发人员能够自定义相机的功能,如设定曝光时间、调整焦距等。
在获取相关生产信息方面,工业相机可以通过SDK与生产线上的其他设备进行集成,例如机器人、传感器和生产数据系统。这种集成使得工业相机能够捕获生产过程中的关键数据,并将其传输到生产信息系统中进行处理和分析。这些数据可能包括产品质量检测、物料追踪、生产效率等方面的信息。
因此,要实现工业相机通过SDK获取相关生产信息,开发人员需要深入了解工业相机的API和功能,以及与生产线集成的方式和数据传输协议。同时还需要考虑数据安全性和实时性等方面的要求,确保从相机获取的信息能够有效地支持生产过程的监控和优化。
Baumer相机通常使用特定的型号、序列号或其他唯一标识符。通过SDK中的相机列表查询功能,可以获取连接到计算机上的所有相机的属性。
SDK提供接口查询所有相机的信息,开发者可以对比相机的制造商信息(如制造商ID、相机型号)来判断是否为Baumer相机。
本文介绍使用BGAPI SDK对Baumer工业相机进行开发时,使用SDK获取Baumer工业相机相关信息、如SN、DeviceID、DeviceFirmwareVersion等等,通过获取连接相机的特征名称过滤掉其它非Baumer相机,从而避免异常调用的报错。
下面介绍在C++里 Baumer工业相机如何通过BGAPISDK初始化时过滤其它非Baumer相机的方式
#include
#include
#include "bgapi2_genicam/bgapi2_genicam.hpp"
using namespace BGAPI2;
#include
void CGigeDemoDlg::OnBnClickedBtninitialize()
{
#pragma region//初始化BGAPI采集类
USES_CONVERSION;
m_imgProcessor = new BGAPI2::ImageProcessor();
m_pSystemList = SystemList::GetInstance();
m_pSystemList->Refresh();
int syscount = m_pSystemList->size();
#pragma endregion
#pragma region//循环检查获取的Systemlist序列信息:即获取网口和USB相机的系统配置文件来查询当前已连接相机
int sysindex = 0;
for(SystemList::iterator sysIterator = m_pSystemList->begin();sysIterator != m_pSystemList->end();sysIterator++)
{
CString sysDisplay0 = A2W(sysIterator->second->GetDisplayName());
CString sysModel0 = A2W(sysIterator->second->GetModel()); //bgapi_gige
CString sysPathName0 = A2W(sysIterator->second->GetPathName());
if(sysModel0.Find(_T("gige"))!=-1) //此例程只连接网口Gige相机
{
//m_pSystem = (*m_pSystemList)[sysindex];//将Gige接口赋予m_pSystem
m_pSystem = sysIterator->second;
break;
}
sysindex++;
}
#pragma endregion
#pragma region //陆续执行Gige接口查询和连接、接口上相机设备的查询和连接、相机设备的数据流的注册和连接、相机设备的信息获取和初始化开启
if(m_pSystem!=NULL)
{
#pragma region//测试获取Gige相机接口的相关参数(供参考)
CString sysType;CString sysVersion;CString sysName;CString sysID;
CString sysVendor;CString sysModel;CString sysPathName;CString sysDisplay;
//USES_CONVERSION;
sysName = A2W(m_pSystem->GetFileName());
sysType = A2W(m_pSystem->GetTLType());
sysVersion = A2W(m_pSystem->GetVersion());
sysID = A2W(m_pSystem->GetID());
sysVendor = A2W(m_pSystem->GetVendor()); //Baumer
sysModel = A2W(m_pSystem->GetModel()); //bgapi_gige
sysPathName = A2W(m_pSystem->GetPathName());
sysDisplay = A2W(m_pSystem->GetDisplayName());
#pragma endregion
#pragma region //System开启后执行查询网口interface操作
if(!m_pSystem->IsOpen()) //使用IsOpen检查,可以关闭相机后重新打开初始化功能
m_pSystem->Open();
if(m_pSystem->IsOpen())
{
m_pInterfaceList = m_pSystem->GetInterfaces();
m_pInterfaceList->Refresh(100);
int infcount = m_pInterfaceList->size(); //可以找到多个interface网络接口(包含实际接口和虚拟接口)
for(InterfaceList::iterator ifIterator = m_pInterfaceList->begin(); ifIterator != m_pInterfaceList->end();ifIterator++)
{
CString infType = A2W(ifIterator->second->GetTLType());
CString infName = A2W(ifIterator->second->GetDisplayName());
BGAPI2::Interface* m_pInterface0 = ifIterator->second;
bool isopen1 = m_pInterface0->IsOpen();
//检查该接口是否已经被占用使用中,被占用则检查下一个
if(m_pInterface0->IsOpen())
continue;
//打开该接口
if(!m_pInterface0->IsOpen())
m_pInterface0->Open();
//接口确认开启的情况下检查接口连接的设备数量
if(m_pInterface0->IsOpen())
{
BGAPI2::DeviceList* m_pDeviceList0 = m_pInterface0->GetDevices();
m_pDeviceList0->Refresh(100);
int devcount = m_pDeviceList0->size();//检查接口上是否连接相机设备
if(devcount>0)
{
BGAPI2::Device * m_pDevice0 = (*m_pDeviceList0)[0];
CString vendorName = A2W(m_pDevice->GetVendor());
// 若接口连接不是Baumer相机则跳出接口循环
if(vendorName !=_T("Baumer"))
continue
//判断相机设备是否可连接
CString Accessstatus = A2W(m_pDevice0->GetAccessStatus());
//"RO"代表被占用,"RW"代表可连接,"U"代表未知情况
if(Accessstatus!=_T("RW"))
continue; //若不可连接,则继续检查下一个接口
//此处确认可连接相机连接接口后跳出循环,若要连接多个相机请自主修改
m_pInterface = ifIterator->second;
break;
}
}
}
}
#pragma endregion
#pragma region //打开该接口上已存在的连接相机设备:此处只连接一个相机
if(m_pInterface==NULL) //若没有可用接口连接相机设备,则返回
return;
CString infName = A2W(m_pInterface->GetDisplayName());//获取接口名称
if(m_pInterface->IsOpen()) //检查网口是否开启
{
m_pDeviceList = m_pInterface->GetDevices();
m_pDeviceList->Refresh(100);
int devcount = m_pDeviceList->size(); //一般为1
if(devcount>0)
m_pDevice = (*m_pDeviceList)[0];
if(m_pDevice!=NULL) //检查相机设备是否存在和开启
if(!m_pDevice->IsOpen())
m_pDevice->Open();
}
#pragma endregion
#pragma region //打开该接口上已存在的相机设备并进行数据流连接
if(m_pDevice==NULL) //若接口上无可用相机设备,则返回
return;
//获取相机设备名称
CString devName = A2W(m_pDevice->GetDisplayName());
//获取相机厂商名称
CString vendorName = A2W(m_pDevice->GetVendor());
// 若相机不是Baumer相机则跳出循环
if(vendorName !=_T("Baumer"))
continue
bool DevicealreadyOpen = false; //相机设备数据流是否已开启
if(m_pDevice->IsOpen())
{
CString infID = A2W(m_pDevice->GetID()); //获取相机设备ID
m_pDatastreamList = m_pDevice->GetDataStreams();//获取相机设备数据流序列
m_pDatastreamList->Refresh();
int iDscount = m_pDatastreamList->size();//一般为1
if(iDscount>0)
m_pDataStream = (*m_pDatastreamList)[0];
if(m_pDataStream!=NULL)
{
if(!m_pDataStream->IsOpen())
m_pDataStream->Open();
else
DevicealreadyOpen =true;
}
}
#pragma endregion
#pragma region //设置相机上对应数据流的buffer序列、注册相机回调函数,初始化相机参数设置
if(m_pDataStream==NULL) //若相机设备上无可用数据流,则返回
return;
if(m_pDataStream->IsOpen()&!DevicealreadyOpen) //检查相机设备是否被占用或者设备数据流是否开启
{
m_pBufferList = m_pDataStream->GetBufferList();//获取相机设备数据流的Buffer序列
for(int i=0; i<6; i++) //设置的Buffer序列为4组
{
m_pBuffer = new BGAPI2::Buffer();
m_pBufferList->Add(m_pBuffer);
}
for (BGAPI2::BufferList::iterator bfIterator = m_pBufferList->begin();bfIterator != m_pBufferList->end();bfIterator++)
{
bfIterator->second->QueueBuffer();
}
int iQBuffer = m_pBufferList->GetQueuedCount();
int x=0;
//为相机对应数据流注册回调函数事件
m_pDataStream->RegisterNewBufferEvent(BGAPI2::Events::EVENTMODE_EVENT_HANDLER);
m_pDataStream->RegisterNewBufferEventHandler(this,(Events::NewBufferEventHandler) &BufferHandler);
//获取当前相机的触发模式的数据
String strTrgStatus;
strTrgStatus = m_pDevice->GetRemoteNode("TriggerMode")->GetString();
CString strTrgStatusC = A2W(strTrgStatus);
//初始化相机时将触发模式设为Off
m_pDevice->GetRemoteNode("TriggerMode")->SetString("Off");
m_pDevice->GetRemoteNodeList()->GetNodePresent("ExposureAuto");
//开启相机流
m_pDataStream->StartAcquisitionContinuous();
//将相机名称显示在对应编辑框内
m_edtCameraType.SetWindowTextW(devName);
//将相机的曝光值和增益值显示在界面上
if (m_pDevice->GetRemoteNodeList()->GetNodePresent("ExposureTime"))
{
long iShutter;CString strShutter;
float fGain;CString strGain;
iShutter = (long)m_pDevice->GetRemoteNode("ExposureTime")->GetDouble();
strShutter.Format(_T("%ld"),iShutter);
fGain = (float)m_pDevice->GetRemoteNode("Gain")->GetDouble();
strGain.Format(_T("%.2f"),fGain);
//将相机曝光值显示界面上
m_edtShutter.SetWindowTextW(strShutter);
//将相机增益值显示界面上
m_edtGain.SetWindowText(strGain);
}
//Enable the button_inialize
GetDlgItem(ID_BTNINITIALIZE)->EnableWindow(FALSE);
//AfxMessageBox(devName+_T("已连接"));
}
#pragma endregion
}
else
{
AfxMessageBox(_T("未找到可用的相机接口"));
}
#pragma endregion
}
在使用Baumer工业相机的SDK进行初始化时,过滤掉其它非Baumer相机具有多个明显的优势,主要包括:
提高系统稳定性:
简化开发过程:
优化性能:
增强功能利用:
降低技术支持成本:
一致性和可预测性:
增加客户信任:
综上所述,过滤其它非Baumer相机的优势体现在提高稳定性、简化开发、优化性能和增强支持等多个方面,这对于行业应用,尤其是在要求高精度和高可靠性的场合至关重要。
在工业自动化、机器视觉和图像处理领域,使用Baumer工业相机通过BGAPI SDK进行初始化时过滤其它非Baumer相机,具有多方面的行业优势,具体包括:
保证系统的兼容性:
增强图像处理质量:
优化资源配置:
简化维护和管理:
提升开发效率:
技术支持与服务优势:
增强客户信任和满意度:
符合行业标准和规范:
总之,利用BGAPI SDK初始化Baumer工业相机并过滤其它非Baumer相机,在提高系统稳定性、简化开发过程、实现高效能和优化维护等多个方面为行业应用提供了显著优势。这些因素共同提升了企业的生产效率和技术竞争力。
在工业应用中,使用Baumer工业相机通过BGAPI SDK进行初始化,并过滤其它非Baumer相机,可以针对多个特定领域实现高效和优化的解决方案。以下是一些主要的行业应用示例:
制造业质量控制:
自动化装配线:
机器人视觉系统:
医疗成像:
印刷检测:
食品和药品检测:
光学字符识别 (OCR):
总结来说,Baumer工业相机通过BGAPI SDK进行初始化并过滤其他非Baumer相机,能够在多个行业应用中提供稳定、可靠的解决方案。这种做法不仅提升了生产效率和质量控制,还增强了系统整体的安全性和性能表现。