Baumer 産業用カメラ Baumer 産業用カメラ BGAPISDK を使用してシーケンサーをプログラムする方法: 各トリガー信号に従って関心領域を移動する (C#)

バウマー産業用カメラ

Baumer 産業用カメラ Baumer カメラは、物体検出、計数と認識、動作分析、画像処理などのさまざまなアプリケーション シナリオで使用できる高性能、高品質の産業用カメラです。

バウマーの 10 ギガビット カメラは優れた画像処理性能を備えており、高解像度の画像をリアルタイムで送信できます。さらに、このカメラは高速データ転送、低消費電力、簡単な統合、および高い拡張性を備えています。
Baumer
産業用カメラは、その優れた安定した性能と品質により、高速同期取得の分野でよく使用され、通常はさまざまな画像アルゴリズムを使用して撮影画像の品質を向上させます。

Baumer 産業用カメラ BGAPISDK とシーケンサー プログラミングの技術的背景

Baumer 産業用カメラ用 BGAPI SDK は、Baumer が自社のカメラ製品シリーズ用に開発したソフトウェア開発キットのセットです。SDK は、開発者が Baumer カメラからの画像とデータを制御、キャプチャ、処理、表示するためのプロフェッショナルなアプリケーションを作成できるようにする API セットを提供します。BGAPI SDK は、C++、C#、Visual Basic、LabVIEW、Matlab などを含む複数のプログラミング言語をサポートし、ユーザーがアプリケーション開発を簡単に開始して迅速に完了できるようにするための多数のサンプル コードとドキュメントを提供します。

BGAPI SDK は、露出時間、ゲイン、ホワイト バランス、トリガー モードなどを含むバウマー カメラのすべてのパラメーターを制御するための豊富な機能を提供し、Raw、BMP、JPG などのさまざまなデータ形式をサポートします。また、リアルタイム表示、データ取得、画像処理、その他の機能も提供し、開発者に高度にカスタマイズされたソリューションを提供します。さらに、BGAPI SDK はマルチカメラ システムの開発もサポートしており、Windows、Linux、Mac OS などのさまざまなコンピュータ オペレーティング システムをサポートできます。

産業用カメラのシーケンサ機能は、さまざまな撮影パラメータを独立したシーケンスに設定することで、さまざまな用途に応じたカメラの自動切り替え制御を実現する高度なプログラミング機能です。シーケンサー機能を使用すると、多重露光、画像送信、処理を1回の撮影サイクルで実現でき、エンジニアリングの効率と品質が向上します。

本稿で紹介するBGAPI SDKを組み込んだシーケンサプログラミング:各トリガー信号に応じて関心領域を移動する機能。

BGAPISDKによるBaumer産業用カメラのシーケンサプログラミング機能

ここでは、Baumer 産業用カメラのシーケンサーを C# の 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. BGAPISDK を介した Baumer 産業用カメラのシーケンサー プログラミング: 各トリガー信号に従って関心領域を移動する機能。

この例では、移動オブジェクトの重要な詳細をキャプチャするために、シーケンサーを使用して関心領域 (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";

バウマー産業用カメラのシーケンサプログラミング機能のメリット

産業用カメラのシーケンサプログラミング機能には次のような利点があります。

マルチアングル撮影:撮影サイクル内で複数の異なる画角を自動的に切り替えることで、対象物の全方位からの画像を高速に取得でき、画像処理・解析の精度が向上します。

多波長照明切り替え:光源に複数の波長がある場合、シーケンサーは異なる波長の光源を素早く切り替えて、異なる光沢とコントラストでターゲットオブジェクトの画像を取得できます。これは、画像処理や異なるオブジェクトの処理に便利です。素材や色を分析します。

自動パラメータ調整: さまざまな種類のオブジェクトを扱う場合、シーケンサー機能は、画質を向上させるために露光時間やゲインなどのパラメータを自動的に調整するなど、さまざまなカメラ パラメータ設定に自動的に切り替えることができます。

タイミング/フレーム レート制御: シーケンサー機能により、産業用カメラの撮影間隔とフレーム レートを正確に制御して、さまざまなアプリケーション シナリオにおけるリアルタイム性と安定性の要件を満たすことができます。

ハードウェア リソースの節約: シーケンサー機能を使用すると、追加のハードウェア コストを削減できます。マルチカメラ システムでは、複数の撮影要件を同時に満たすために 1 台のカメラのみを使用できるため、システムのコストと複雑さが軽減されます。

非同期トリガー: 撮影サイクル内の異なる撮影タスク間で独立したトリガーを実現する必要がある場合、シーケンサー機能がこの要求に応え、高速な切り替えと正確な制御を実現します。

Baumer産業用カメラのシーケンサプログラミング機能の産業応用

産業用カメラのシーケンサプログラミング機能は、多くの業界で広く使用されています。いくつかの典型的な業界アプリケーション シナリオを以下に示します。

製造業: 製造業では、産業用カメラを使用して生産プロセス中の画像を撮影し、生産ライン上の製品の品質、サイズ、色などの情報を自動的に検出し、プロセスのリアルタイム監視と最適化を実現します。一般的なアプリケーションには、自動組立ライン、プリント基板 (PCB) 検査、板金検査などが含まれます。

マシン ビジョン: マシン ビジョン システムでは、オブジェクトの検出、位置特定、追跡などのタスクに産業用カメラを使用できます。たとえば、インテリジェント交通システムでは、交通情報のリアルタイムの取得と分析を通じて、産業用カメラは道路状況の監視、車両の識別、違反検出などの機能を実行できます。

医療産業: 医療産業における産業用カメラの用途には、生物顕微鏡下での細胞分析、体外診断装置、遺伝子シーケンサーなどが含まれます。シーケンサプログラミング機能により、画像取得の自動化と高精度化を実現し、研究や診断の品質を向上させることができます。

食品と農業: 産業用カメラは、食品加工や農業生産における品質検査、仕分け、包装に使用できます。たとえば、果物や野菜の選別では、画像認識によって高品質の食品を迅速に選別し、食品の安全性と生産品質を確保できます。

エレクトロニクスおよび半導体: エレクトロニクスおよび半導体業界では、亀裂、傷、汚染などのチップ製造プロセスの欠陥を監視するために産業用カメラが使用されています。シーケンサプログラミング機能により、プロセスのリアルタイム監視・制御を実現します。

エネルギー産業: 太陽エネルギーや風力エネルギーなどの新エネルギー分野では、コンポーネントの設置やメンテナンス中の欠陥を監視するために産業用カメラを使用できます。さらに、スマートグリッドの障害検出と予防にも使用できます。

セキュリティ監視: 産業用カメラは、国境警備、人員アクセス制御、ナンバープレート認識などのセキュリティ監視の分野でも広く使用されています。シーケンサープログラミング機能により、効率的かつ正確な画像取り込みを実現します。

これらは、産業用カメラのシーケンサプログラミング機能のさまざまな業界への応用例の一部にすぎませんが、技術の発展と産業用カメラ技術の成熟に伴い、その応用シナリオはさらに広がり、さまざまな業界の自動生産を効果的にサポートします。 。

おすすめ

転載: blog.csdn.net/xianzuzhicai/article/details/131410260