Baumer工业相机堡盟工业相机如何通过BGAPISDK进行定序器编程:根据每次触发信号移动感兴趣区域(C#)

Baumer工业相机

Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。

Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有快速数据传输、低功耗、易于集成以及高度可扩展性等特点。

Baumer工业相机由于其性能和质量的优越和稳定,常用于高速同步采集领域,通常使用各种图像算法来提高其捕获的图像的质量。

Baumer工业相机BGAPISDK和定序器编程的技术背景

Baumer工业相机的BGAPI SDK是Baumer公司开发的针对其相机产品系列的一套软件开发工具包。该SDK提供了一组API,使开发人员可以编写专业应用程序,从而控制、捕获、处理和显示Baumer相机的图像和数据。BGAPI SDK支持多种编程语言,包括C++、C#、Visual Basic、LabVIEW、Matlab等,并提供了大量示例代码和文档,以帮助用户轻松上手,快速完成应用程序的开发。

BGAPI SDK提供了丰富的功能,可以控制Baumer相机的所有参数,包括曝光时间、增益、白平衡、触发模式等,以及支持各种数据格式,例如Raw、BMP、JPG等,同时还提供了实时显示、数据采集、图像处理等功能,为开发人员提供了高度定制化的解决方案。此外,BGAPI SDK还支持多相机系统的开发,并可支持各种计算机操作系统,如Windows、Linux、Mac OS等。

工业相机的 定序器Sequencer 功能是一种高级的编程功能,允许用户将多种拍摄参数设置成独立的序列,实现对相机的自动切换控制以满足多种不同的应用需求。使用 Sequencer 功能可以实现在一个拍摄周期内,完成多个曝光、图像传输和处理任务,从而提高工程效率和质量。

本文介绍的通过集成BGAPI SDK进行定序器编程:根据每次触发信号移动感兴趣区域的功能。

Baumer工业相机通过BGAPISDK进行定序器编程功能

下面介绍在C#里Baumer工业相机如何通过BGAPISDK进行定序器编程:根据每次触发信号移动感兴趣区域的功能。

1.引用合适的类文件

代码如下(示例):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Data;
using System.Globalization;
using System.Diagnostics;
using System.IO;

2.Baumer工业相机通过BGAPISDK进行定序器编程:根据每次触发信号移动感兴趣区域的功能。

本示例将介绍如何通过定序器在图像中将感兴趣区域(ROI)移动到预定位置,以便采集移动物体的重要细节。定序器的每一步操作都通过外部信号触发。这样可以将配置参数进行封装,用户仅传输和处理当前图像分析任务所需的数据。

如图所示为所述序列产生的图像效果。通过在图像中移动感兴趣区域,可直接在相机内对药瓶图像进行虚拟剪裁。

在这里插入图片描述

// STOP ACQUISITION AND LOAD DEFAULT PARAMETERS
mDevice.RemoteNodeList["AcquisitionStop"].Execute();
mDevice.RemoteNodeList["UserSetSelector"].Value = "Default";
mDevice.RemoteNodeList["UserSetLoad"].Execute();

// CONFIGURING GPIO “Line0” AS THE TRIGGER INPUT
mDevice.RemoteNodeList["TriggerMode"].Value = "On";
mDevice.RemoteNodeList["TriggerSource"].Value = "Line0";
mDevice.RemoteNodeList["TriggerActivation"].Value = "RisingEdge";
mDevice.RemoteNodeList["TriggerDelay"].Value = (double)0.0;
mDevice.RemoteNodeList["LineSelector"].Value = "Line0";
mDevice.RemoteNodeList["LineInverter"].Value = false;
mDevice.RemoteNodeList["LineDebouncerHighTimeAbs"].Value = (double)1.0;
mDevice.RemoteNodeList["LineDebouncerLowTimeAbs"].Value = (double)1.0;

// SWITCH TO SEQUENCER CONFIG MODE
mDevice.RemoteNodeList["SequencerConfigurationMode"].Value = "On";

// SET 0 (FIRST STEP OF THE SEQUENCE)
mDevice.RemoteNodeList["SequencerSetSelector"].Value = (long)0;
mDevice.RemoteNodeList["SequencerSetLoad"].Execute();

mDevice.RemoteNodeList["TriggerMode"].Value = "On";

// ROI AT TOP LEFT (VGA)
mDevice.RemoteNodeList["OffsetX"].Value = (long)0;
mDevice.RemoteNodeList["OffsetY"].Value = (long)0;
mDevice.RemoteNodeList["Width"].Value = (long)320;
mDevice.RemoteNodeList["Height"].Value = (long)240;
mDevice.RemoteNodeList["OffsetX"].Value = (long)0;
mDevice.RemoteNodeList["OffsetY"].Value = (long)0;

mDevice.RemoteNodeList["SequencerPathSelector"].Value = (long)0;
mDevice.RemoteNodeList["SequencerTriggerSource"].Value = "ExposureActive";
mDevice.RemoteNodeList["SequencerTriggerActivation"].Value = "RisingEdge";
mDevice.RemoteNodeList["SequencerSetNext"].Value = (long)1;
mDevice.RemoteNodeList["SequencerSetSave"].Execute();

// SET 1 (SECOND STEP OF THE SEQUENCE)
mDevice.RemoteNodeList["SequencerSetSelector"].Value = (long)1;
mDevice.RemoteNodeList["SequencerSetLoad"].Execute();

mDevice.RemoteNodeList["TriggerMode"].Value = "On";

// ROI AT CENTER (VGA)
mDevice.RemoteNodeList["OffsetX"].Value = (long)0;
mDevice.RemoteNodeList["OffsetY"].Value = (long)0;
mDevice.RemoteNodeList["Width"].Value = (long)320;
mDevice.RemoteNodeList["Height"].Value = (long)240;
mDevice.RemoteNodeList["OffsetX"].Value = (long)160;
mDevice.RemoteNodeList["OffsetY"].Value = (long)120;

mDevice.RemoteNodeList["SequencerPathSelector"].Value = (long)0;
mDevice.RemoteNodeList["SequencerTriggerSource"].Value = "ExposureActive";
mDevice.RemoteNodeList["SequencerTriggerActivation"].Value = "RisingEdge";
mDevice.RemoteNodeList["SequencerSetNext"].Value = (long)2;
mDevice.RemoteNodeList["SequencerSetSave"].Execute();

// SET 2 (THIRD STEP OF THE SEQUENCE)
mDevice.RemoteNodeList["SequencerSetSelector"].Value = (long)2;
mDevice.RemoteNodeList["SequencerSetLoad"].Execute();

mDevice.RemoteNodeList["TriggerMode"].Value = "On";

// ROI AT BOTTOM RIGHT (VGA)
mDevice.RemoteNodeList["OffsetX"].Value = (long)0;
mDevice.RemoteNodeList["OffsetY"].Value = (long)0;
mDevice.RemoteNodeList["Width"].Value = (long)320;
mDevice.RemoteNodeList["Height"].Value = (long)240;
mDevice.RemoteNodeList["OffsetX"].Value = (long)320;
mDevice.RemoteNodeList["OffsetY"].Value = (long)240;

mDevice.RemoteNodeList["SequencerPathSelector"].Value = (long)0;
mDevice.RemoteNodeList["SequencerTriggerSource"].Value = "ExposureActive";
mDevice.RemoteNodeList["SequencerTriggerActivation"].Value = "RisingEdge";
mDevice.RemoteNodeList["SequencerSetNext"].Value = (long)0;

mDevice.RemoteNodeList["SequencerSetSave"].Execute();

mDevice.RemoteNodeList["SequencerSetStart"].Value = (long)0;

// SEQUENCER CONFIG END
mDevice.RemoteNodeList["SequencerConfigurationMode"].Value = "Off";


// START CAMERA SEQUENCER
mDevice.RemoteNodeList["SequencerMode"].Value = "On";
mDataStream.StartAcquisition();
mDevice.RemoteNodeList["AcquisitionStart"].Execute();

// WAIT FOR TRIGGERS TO CAPTURE IMAGES WITH CHANGING ROI’S

// STOP CAMERA SEQUENCER
mDevice.RemoteNodeList["AcquisitionStop"].Execute();
mDataStream.StopAcquisition();
mDevice.RemoteNodeList["SequencerMode"].Value = "Off";

Baumer工业相机进行定序器编程功能的优势

工业相机进行定序器编程功能具有以下优势:

多视角拍摄:通过在一个拍摄周期内自动切换多个不同的视角,可以快速地获取目标物体的各个方向的图像,从而提高图像处理和分析的准确性。

多波长照明切换:在光源有多个波长时,Sequencer 可以实现在不同波长光源之间快速切换,以获得目标物体在不同光泽度和对比度的图像,便于对不同材质或颜色的物体进行图像处理和分析。

参数自动调节:在处理不同类型的物体时,Sequencer 功能可以自动切换到不同的相机参数设置,例如自动调整曝光时间、增益等参数,以提高图像质量。

定时/帧率控制:通过 Sequencer 功能,可以对工业相机的拍摄间隔和帧率进行精确控制,满足不同应用场景下对实时性、稳定性的需求。

节省硬件资源:使用 Sequencer 功能可以减少额外的硬件成本。在多相机系统中,可以仅使用一个相机同时满足多种拍摄需求,从而降低系统成本和复杂度。

异步触发:当需要在拍摄周期内实现不同拍摄任务之间的独立触发时,Sequencer 功能能够满足这种需求,且实现快速切换和精确控制。

Baumer工业相机进行定序器编程功能的行业应用

工业相机进行定序器编程功能在许多行业中都有广泛的应用。以下列举了一些典型的行业应用场景:

制造业:在制造业中,工业相机用于捕捉生产过程中的图像,自动检测生产线上的产品质量、尺寸、颜色等信息,从而实现实时监控和优化工艺流程。典型应用包括自动化装配线、印刷电路板(PCB)检测、钣金检测等。

机器视觉:在机器视觉系统中,工业相机可用于实现目标检测、定位和跟踪等任务。例如,在智能运输系统中,通过对交通信息的实时捕捉和分析,工业相机可以进行道路状况监测、车辆识别和违规行为检测等功能。

医疗行业:工业相机在医疗行业中的应用包括生物显微镜下的细胞分析、体外诊断设备、基因测序仪等。定序器编程功能可以实现对图像采集的自动化和准确性,提高研究和诊断质量。

食品和农业:工业相机可用于食品加工和农业生产中的品质检测、分拣和包装等环节。例如,在果蔬分选中,通过图像识别,可快速筛选出优质食品,保证食品安全和生产质量。

电子及半导体:在电子及半导体行业,工业相机用于监测芯片制造过程中的缺陷,如裂缝、划痕和污染等。通过定序器编程功能,可以实现对工艺过程的实时监控和控制。

能源行业:在太阳能、风能等新能源领域,工业相机可用于监测组件安装和维护过程中的缺陷。此外,它也可以用于智能电网中的故障检测和预防。

安防监控:工业相机在安防监控领域也有广泛应用,如边界防护、人员进出控制、车牌识别等。通过定序器编程功能,可以实现高效、准确的图像捕捉。

这些仅仅是工业相机进行定序器编程功能在各行业中应用的一部随着科技的发展和工业相机技术的成熟,其应用场景将更加广泛,为各行各业的自动化生产提供有效支持。

猜你喜欢

转载自blog.csdn.net/xianzuzhicai/article/details/131410260