Baumer工业相机堡盟工业相机如何通过BGAPI SDK初始化时过滤其它非Baumer相机(C)


Baumer工业相机

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

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

Baumer GAPI SDK是由Baumer公司提供的软件开发工具包,专门为其工业相机产品定制而成。该SDK旨在为开发人员提供一系列功能强大的工具和接口,以便轻松地与Baumer的工业相机进行通信、图像采集和处理等操作。

Baumer工业相机的Camera Explorer软件功能强大,内容丰富,通过该软件可以有效的获取相机相关的全部信息,在对于相机检测项目的开发中,有时需要获取相机中图像Buffer信息和相关的数据流信息,而Camera Explorer软件可以有效的显示相关的信息。

Baumer工业相机通过其SDK(软件开发工具包)可以获取相机的温度信息。相机的温度是指相机内部的温度,这个参数在工业相机的使用和性能评估中非常重要。

Baumer工业相机通过SDK初始化时过滤其它非Baumer相机的技术背景

工业相机通过SDK获取相关生产信息涉及到多个技术背景。首先,工业相机通常配备高性能图像传感器和处理器,能够拍摄高质量的图像和视频。其次,SDK(Software Development Kit,软件开发工具包)则是由相机制造商提供的软件包,其中包含了与相机通信、图像处理等相关的API和工具。借助SDK,开发人员能够自定义相机的功能,如设定曝光时间、调整焦距等。

在获取相关生产信息方面,工业相机可以通过SDK与生产线上的其他设备进行集成,例如机器人、传感器和生产数据系统。这种集成使得工业相机能够捕获生产过程中的关键数据,并将其传输到生产信息系统中进行处理和分析。这些数据可能包括产品质量检测、物料追踪、生产效率等方面的信息。

因此,要实现工业相机通过SDK获取相关生产信息,开发人员需要深入了解工业相机的API和功能,以及与生产线集成的方式和数据传输协议。同时还需要考虑数据安全性和实时性等方面的要求,确保从相机获取的信息能够有效地支持生产过程的监控和优化。

Baumer相机通常使用特定的型号、序列号或其他唯一标识符。通过SDK中的相机列表查询功能,可以获取连接到计算机上的所有相机的属性。

SDK提供接口查询所有相机的信息,开发者可以对比相机的制造商信息(如制造商ID、相机型号)来判断是否为Baumer相机。

通过SDK过滤其它非Baumer相机的代码分析

本文介绍使用BGAPI SDK对Baumer工业相机进行开发时,使用SDK获取Baumer工业相机相关信息、如SN、DeviceID、DeviceFirmwareVersion等等,通过获取连接相机的特征名称过滤掉其它非Baumer相机,从而避免异常调用的报错。

下面介绍在C里 Baumer工业相机如何通过BGAPISDK初始化时过滤其它非Baumer相机的方式

1、引用合适的类文件

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "bgapi2_genicam/bgapi2_genicam.h"

2、初始化时过滤其它非Baumer相机

BGAPI2_RESULT run(BGAPI2_System * pSystem, bo_bool* pCamfound) {
    bo_bool bChanged = 0;
    bo_uint iNumInterfaces = 0;
    bo_uint iIndexInterface = 0;
    if (BGAPI2_System_Open(pSystem) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
    if (BGAPI2_System_UpdateInterfaceList(pSystem, &bChanged, 100) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
    if (BGAPI2_System_GetNumInterfaces(pSystem, &iNumInterfaces) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
    for (iIndexInterface = 0; iIndexInterface < iNumInterfaces && !*pCamfound; iIndexInterface++) {
        BGAPI2_Interface* pInterface = NULL;
        bo_uint iNumDevices = 0;
        if (BGAPI2_System_GetInterface(pSystem, iIndexInterface, &pInterface) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
        if (BGAPI2_Interface_Open(pInterface) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
        if (BGAPI2_Interface_UpdateDeviceList(pInterface, &bChanged, 200) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
        if (BGAPI2_Interface_GetNumDevices(pInterface, &iNumDevices) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
        if (iNumDevices > 0) {
            BGAPI2_Device* pDevice = NULL;
            char sModel[1024] = "";
            bo_uint64  iModelLength = sizeof(sModel);
            char sSerial[1024] = "";
            bo_uint64  iSerialLength = sizeof(sSerial);
            bo_bool bNodePresent = 0;
            BGAPI2_Node* pNode = NULL;
            BGAPI2_NodeMap* pNodeList = NULL;
            bo_uint iFramecount = 0;
            BGAPI2_Buffer * pOutBuffer[BUFFERCOUNT];
            bo_uint iNumDataStreams = 0;
            int iIndex = 0;
            BGAPI2_DataStream* pDataStream = NULL;
            if (BGAPI2_Interface_GetDevice(pInterface, 0, &pDevice) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
            if (BGAPI2_Device_Open(pDevice) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
            if (BGAPI2_Device_GetModel(pDevice, sModel, &iModelLength) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
            if (BGAPI2_Device_GetSerialNumber(pDevice, sSerial, &iSerialLength) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
             //若相机不是baumer相机,则需要过滤 
            if (BGAPI2_Device_GetVendor(pDevice, sSerial, &sVendor) != "Baumer") return BGAPI2_RESULT_ERROR;
            printf("%s(%s)\n", sModel, sSerial);
            if (BGAPI2_Device_GetRemoteNode(pDevice, "TriggerMode", &pNode) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
            if (BGAPI2_Node_SetString(pNode, "Off") != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
            if (BGAPI2_Device_GetRemoteNodeList(pDevice, &pNodeList) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
            if (BGAPI2_NodeMap_GetNodePresent(pNodeList, "ExposureTime", &bNodePresent) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
            if (bNodePresent) {
                if (BGAPI2_Device_GetRemoteNode(pDevice, "ExposureTime", &pNode) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
            } else {
                if (BGAPI2_Device_GetRemoteNode(pDevice, "ExposureTimeAbs", &pNode) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
            }
            if (BGAPI2_Node_SetDouble(pNode, 10000.0) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
            if (BGAPI2_Device_GetNumDataStreams(pDevice, &iNumDataStreams) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
            if (BGAPI2_Device_GetDataStream(pDevice, 0, &pDataStream) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
            if (BGAPI2_DataStream_Open(pDataStream) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
            for (iIndex = 0; iIndex < BUFFERCOUNT; iIndex++) {
                if (BGAPI2_CreateBuffer(&pOutBuffer[iIndex]) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
                if (BGAPI2_DataStream_AnnounceBuffer(pDataStream, pOutBuffer[iIndex]) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
                if (BGAPI2_DataStream_QueueBuffer(pDataStream, pOutBuffer[iIndex]) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
            }
            if (BGAPI2_DataStream_StartAcquisitionContinuous(pDataStream) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
            if (BGAPI2_Device_GetRemoteNode(pDevice, "AcquisitionStart", &pNode) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
            if (BGAPI2_Node_Execute(pNode) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
            for (iFramecount = 0; iFramecount < 12; iFramecount++) {
                BGAPI2_Buffer* pBufferFilled = NULL;
                BGAPI2_RESULT res = BGAPI2_DataStream_GetFilledBuffer(pDataStream, &pBufferFilled, 1000);
                if (res != BGAPI2_RESULT_SUCCESS) {
                    if (res == BGAPI2_RESULT_TIMEOUT) {
                        printf("Error: Buffer Timeout after 1000 msec\n");
                    } else {
                        printf("BGAPI2_DataStream_GetFilledBuffer errorcode: %d\n", res);
                    }
                } else {
                    bo_bool bIsIncomplete = 0;
                    if (BGAPI2_Buffer_GetIsIncomplete(pBufferFilled, &bIsIncomplete) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
                    if (bIsIncomplete == 1) {
                        printf("Error: Image is incomplete\n");
                    } else {
                        bo_uint64 frameId = 0;
                        if (BGAPI2_Buffer_GetFrameID(pBufferFilled, &frameId) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
                        printf("Image %lld received.\n", (long long)frameId);
                    }
                    if (BGAPI2_DataStream_QueueBuffer(pDataStream, pBufferFilled) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
                }
            } // Image Capture Loop end
            if (BGAPI2_NodeMap_GetNodePresent(pNodeList, "AcquisitionAbort", &bNodePresent) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
            if (bNodePresent == 1) {
                if (BGAPI2_Device_GetRemoteNode(pDevice, "AcquisitionAbort", &pNode) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
                if (BGAPI2_Node_Execute(pNode) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
            }
            if (BGAPI2_Device_GetRemoteNode(pDevice, "AcquisitionStop", &pNode) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
            if (BGAPI2_Node_Execute(pNode) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
            if (BGAPI2_DataStream_StopAcquisition(pDataStream) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
            if (BGAPI2_DataStream_DiscardAllBuffers(pDataStream) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
            for (iIndex = 0; iIndex < BUFFERCOUNT; iIndex++) {
                if (BGAPI2_DataStream_RevokeBuffer(pDataStream, pOutBuffer[iIndex], NULL) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
                if (BGAPI2_DeleteBuffer(pOutBuffer[iIndex], NULL) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
            }
            if (BGAPI2_DataStream_Close(pDataStream) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
            if (BGAPI2_Device_Close(pDevice) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
            *pCamfound = 1;
        }
        if (BGAPI2_Interface_Close(pInterface) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
    }
    if (BGAPI2_System_Close(pSystem) != BGAPI2_RESULT_SUCCESS) return BGAPI2_RESULT_ERROR;
    return BGAPI2_RESULT_SUCCESS;
}

int main() {
    int key = 0; // keyboard input number
    int result = 0;
    bo_bool camfound = 0;
    bo_uint iNumTLProducer = 0;
    bo_uint iIndexTLProducer = 0; // Gige = 0, USB3 = 1
    BGAPI2_RESULT res = BGAPI2_RESULT_SUCCESS;
    res = BGAPI2_UpdateSystemList();
    if (res == BGAPI2_RESULT_SUCCESS) {
        res = BGAPI2_GetNumSystems(&iNumTLProducer);
    }
    for (iIndexTLProducer = 0; iIndexTLProducer < iNumTLProducer && !camfound; iIndexTLProducer++) {
        BGAPI2_System * pSystem = NULL;
        if (res == BGAPI2_RESULT_SUCCESS) {
            res = BGAPI2_GetSystem(iIndexTLProducer, &pSystem);
        }
        if (res == BGAPI2_RESULT_SUCCESS) {
            res = run(pSystem, &camfound);
        }
        if (pSystem && BGAPI2_ReleaseSystem(pSystem) != BGAPI2_RESULT_SUCCESS) {
            res = BGAPI2_RESULT_ERROR;
        }
    }
    if (!camfound) {
        printf("no camera found on any system and interface.\n");
    }
    if (res != BGAPI2_RESULT_SUCCESS) {
        char myString[1024] = "";         // defines an char array
        bo_uint64  iStringlength = sizeof(myString);
        BGAPI2_GetLastError(&res, myString, &iStringlength);
        printf("\nError: %s", myString);
        result = 1;
    }
    printf("\nInput any number to close the program:");
    if (scanf("%d", &key)) {}  // use 'if' to avoid compiler warning of unused return value
    return result;
}

Baumer工业相机通过BGAPISDK初始化时过滤其它非Baumer相机的优势

在使用Baumer工业相机的SDK进行初始化时,过滤掉其它非Baumer相机具有多个明显的优势,主要包括:

  1. 提高系统稳定性

    • 通过仅初始化Baumer相机,可以避免因兼容性问题引起的异常和错误。不同品牌或型号的相机可能使用不同的驱动和通信协议,这种过滤确保系统仅与已验证的设备通信,从而提高了整体的稳定性。
  2. 简化开发过程

    • 开发者可以专注于Baumer相机的特性和功能,避免处理多个相机厂商的SDK差异性。减少了复杂性,提升了开发效率和代码的可维护性。
  3. 优化性能

    • 过滤掉非Baumer相机后,系统资源得以更高效地分配,避免了无用设备对系统性能的影响。这能够实现更快的相机初始化和图像处理速度,提高总体图像采集效率。
  4. 增强功能利用

    • Baumer相机中可能包含特定于其品牌的高级功能(如图像处理算法、特定参数调整等)。通过过滤,开发者能够直接利用这些功能,而无需担心非Baumer设备可能不支持这些特性。
  5. 降低技术支持成本

    • 仅使用Baumer相机可以减少技术支持的复杂性。当出现技术问题时,集中在单一品牌的设备上便于技术支持团队进行故障排查和问题解决。这样可以提高响应速度,缩短修复时间。
  6. 一致性和可预测性

    • 使用同一品牌的相机能够提供一致的性能和行为。这种一致性使得开发者能够更好地预测系统行为,简化了测试和部署过程。
  7. 增加客户信任

    • 当客户选择Baumer相机的时候,使用过滤功能可以确保他们的系统初始化过程中不会意外地采取其它品牌的产品,从而增强了客户对设备和系统的信任感。

综上所述,过滤其它非Baumer相机的优势体现在提高稳定性、简化开发、优化性能和增强支持等多个方面,这对于行业应用,尤其是在要求高精度和高可靠性的场合至关重要。

Baumer工业相机通过BGAPISDK初始化时过滤其它非Baumer相机的行业优势

在工业自动化、机器视觉和图像处理领域,使用Baumer工业相机通过BGAPI SDK进行初始化时过滤其它非Baumer相机,具有多方面的行业优势,具体包括:

  1. 保证系统的兼容性

    • Baumer的BGAPI SDK为其相机提供了专门的支持,确保设备和软件之间的无缝兼容。通过过滤非Baumer相机,可以避免因设备不兼容导致的技术问题,降低系统故障风险。
  2. 增强图像处理质量

    • Baumer工业相机设计用于工业环境,具备高质量图像获取能力以及低延迟响应。过滤掉其他品牌的相机,能够确保项目始终使用高性能设备,从而获得更佳的图像处理效果。
  3. 优化资源配置

    • 通过专注于Baumer相机,可以更有效地利用计算资源。特别是在数据处理和图像分析等高负荷任务中,集中使用同一品牌相机能够减少资源浪费,提高系统整体性能。
  4. 简化维护和管理

    • 在同一项目中使用统一品牌的相机,让系统维护、管理和更新工作变得更加简单。技术团队只需熟悉Baumer的产品特性,从而降低了培训和支持的复杂性。
  5. 提升开发效率

    • BGAPI SDK 的专用接口和功能适配,使得开发过程更加简单直观。开发者可以直接使用与Baumer相机兼容的函数,快速集成图像处理功能,缩短项目开发周期。
  6. 技术支持与服务优势

    • Baumer作为专业制造商,提供了针对其产品的优质售后服务和技术支持。一旦出现问题,过滤其它品牌设备后,技术支持团队能够更快速、更高效地提供解决方案。
  7. 增强客户信任和满意度

    • 在市场上,Baumer以其高品质和可靠性著称,使用其产品能够增强客户的信任感。在项目实施中,客户对设备性能的认可会提升他们的整体满意度。
  8. 符合行业标准和规范

    • Baumer产品往往符合行业内的标准和规范(如EMC、IP等级等),在自动化和机器视觉领域更容易满足对设备的合规要求。

总之,利用BGAPI SDK初始化Baumer工业相机并过滤其它非Baumer相机,在提高系统稳定性、简化开发过程、实现高效能和优化维护等多个方面为行业应用提供了显著优势。这些因素共同提升了企业的生产效率和技术竞争力。

Baumer工业相机通过BGAPISDK初始化时过滤其它非Baumer相机的行业应用

在工业应用中,使用Baumer工业相机通过BGAPI SDK进行初始化,并过滤其它非Baumer相机,可以针对多个特定领域实现高效和优化的解决方案。以下是一些主要的行业应用示例:

  1. 制造业质量控制

    • 在制造过程的质量控制环节,使用Baumer工业相机进行检测,确保产品在出厂前符合质量标准。通过过滤其他相机,系统能够专注于使用Baumer相机的高分辨率和高速度特性,确保实时监测和快速反馈。
  2. 自动化装配线

    • 在自动化装配流程中,精准的视觉检测至关重要。Baumer相机具备高速度、低延迟的特点,使其在高频次装配工序中保持优良性能。过滤非Baumer相机可以确保系统的稳定性和一致性,减少因设备不兼容导致的停机时间。
  3. 机器人视觉系统

    • 在机器人视觉系统中,Baumer相机可以提供准确的定位和识别能力。通过使用BGAPI SDK,过滤其他相机可确保视觉系统专注于Baumer相机的优势特性,例如高帧率和对光照变化的适应能力,进而提高机器人操作的效率和精准性。
  4. 医疗成像

    • 在医疗设备监控和成像领域,Baumer工业相机提供高质量的图像采集功能,确保对病人状态的准确判断。通过过滤其它品牌设备,确保系统仅使用经过验证的Baumer相机,以满足医疗行业对可靠性和精确度的严格要求。
  5. 印刷检测

    • 在印刷行业,Baumer相机能够进行快速而高效的质量检测。例如,它们可以用于检查印刷错误、颜色偏差等。通过过滤其他相机,能集中使用满足行业标准的Baumer相机,提升检测效率和结果的可靠性。
  6. 食品和药品检测

    • 在食品和药品行业,使用Baumer相机可以进行外观检查、尺寸测量和其他相关质控操作。在BGAPI SDK的支持下,可以确保系统与Baumer相机的紧密集成,提升检测的速度和准确度,从而满足各项监管要求。
  7. 光学字符识别 (OCR)

    • 在需要进行文字识别的应用场景,如条形码识别和产品标签读取时,Baumer相机可以提供高分辨率的图像,确保识别准确性。通过专注于Baumer相机,开发者可以利用其高性能来提升OCR系统的整体表现。

总结来说,Baumer工业相机通过BGAPI SDK进行初始化并过滤其他非Baumer相机,能够在多个行业应用中提供稳定、可靠的解决方案。这种做法不仅提升了生产效率和质量控制,还增强了系统整体的安全性和性能表现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

格林威

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值