フィルタの接続と構成
フィルターをプログラムに追加した後、フィルターを構成する必要があります。 これには、[プロパティ] ウィンドウで入力を適切な定数値に設定するか、入力を他のフィルターの出力に接続することが含まれます。 外部 AVDATA ファイルにリンクした入力を作成したり、HMI要素やグローバルパラメータに接続したりすることも可能です。
他のフィルターとの接続
フィルターは、接続を通じて他のフィルターからデータを受信します。 接続を作成するには、フィルターの出力をプログラム エディターの下にあるフィルターの入力にドラッグします (上向きの接続は許可されません)。 出力をドラッグすると、可能な宛先が強調表示されます。 プログラムのワークフローを作成する基本的な方法です。
便宜上、既存の接続をフォークして (既存の接続の垂直部分からドラッグする)、新しい接続を作成することもできます。
さらに、接続の先頭 (宛先ポートの近く) または接続の最初の水平セグメント (送信元ポートの近く) をドラッグすることで、既存の接続を別の出力ポートまたは入力ポートに再接続することができます。
フィルタ間の接続を作成するもう 1 つの方法は、[プロパティ] ウィンドウのみを使用することです。 一番右の列にあるプラグ () アイコンをクリックすると、この入力に対して可能な接続のリストが表示されます。 入力がすでに接続されている場合、プラグアイコンが点灯し、接続を別の接続に変更できます。
基本プロパティの設定
ほとんどのフィルターには、以下の図に示すように、[プロパティ] ウィンドウで設定できるいくつかのパラメーターがあります。 特定のアプリケーションで望ましい結果を得るには、これらのパラメーターを確認することが非常に重要です。 まず、プログラム エディター ウィンドウでフィルターを選択します。
注: プロパティ テーブルのヘッダーをクリックすると、追加の列を選択できます。
ジオメトリカルプリミティブの編集
線分、円、パス、領域などの幾何学データを編集するには、設定または変更する入力ポートの [プロパティ] ウィンドウで 3 つの点ボタン () をクリックします。 以下のようなウィンドウが表示されます。 このウィンドウを初めて開くときに、通常最初に行う必要があるのは、ウィンドウの上部にあるリストから背景画像を選択することです。 これにより、幾何学的データのコンテキストが設定されます。
Tips:
- ポイントを選択し、そのコンテキスト メニューを使用して数値座標を検査または設定します。
- マウス ホイールを使用すると、ツールを変更せずにビューをズームできます。
- マウスの 3 番目のボタンを押したままドラッグすると、ツールを変更せずにビューを移動できます。
- Ctrl を押したままにすると、セグメントの角度が 15 度の倍数に制限されます。
リアルタイムでのパラメータのテスト
Aurora Vision Studio の最大の特徴の 1 つは、アルゴリズムの迅速な開発を重視していることです。 これには、パラメーターのさまざまな値が結果にどのような影響を与えるかを即座に確認する機能が含まれます。 この機能は動的であるため、静止画像では表示できないため、次の手順に従ってください。
- a TestImageフィルターをThresholdImageフィルターに接続した単純なプログラムを作成します。
- ThresholdImage出力をデータ プレビューに表示します。
- [現在のマクロを反復] をクリックしてプログラムを最後のフィルターまで実行しますが、全体としては終了しません (実行状態は一時停止になります)。
- プログラム エディターでThresholdImageフィルターを選択し、プロパティ ウィンドウでその inMinValue 入力を変更します。
これで、値の変更が結果にどのような影響を与えるかをリアルタイムで確認できるようになります。
Remarks:
- これは非常に便利ですが、「汚い」機能であり、場合によってはプログラムの状態の不一致を引き起こす可能性があることに注意してください。 問題が発生した場合は、プログラムを停止して再度実行してください。
- この機能は、フィルタがすでに実行されており、プログラムが停止ではなく一時停止している場合にのみ機能します。
- デフォルトでは、マクロフィルタ全体が再実行されます。 「グローバル再実行モード」設定のチェックを外すと、再実行を 1 つのフィルタに限定できます。 これは、現在のマクロフィルタで長時間にわたる計算が行われる場合に役立ちます。
- I/O フィルタ、ループ アキュムレータ、またはループ ジェネレータを再実行することはできません (望ましくない副作用が発生する可能性があるため)。 これらのフィルタは、マクロフィルタ全体が再実行されるときにスキップされます。
- 別のマクロフィルタのネストされたインスタンスを再実行すると、その内部データのプレビューは更新されません。
- 一部のフィルタ、特にマクロフィルタの再実行には時間がかかる場合があります。 必要に応じて、停止コマンド (Shift+F5) を使用して中断します。
- 不適切な値を設定し、ドメインエラーが発生した場合、プログラムは停止するため、 再実行機能を使用するには、再度開始する必要があります。
- フィルタ パラメータは、プログラムの継続実行中に変更することもできます (F5)。
ファイルからのデータのリンクまたはロード
場合によっては、フィルターの入力で使用する必要があるデータ値が、Aurora Vision Studio プログラム (カスタム OCR モデルの作成など) の結果として作成された .avdata ファイルに保存されることがあります。LoadObjectフィルターを使用してこのようなデータをプログラムにロードすることは可能ですが、ほとんどの場合、入力ポートをファイルに直接リンクする方が便利で効果的です。 このようなリンクを作成するには、入力のコンテキスト メニューから [AVDATA ファイルからリンク...] を選択します (フィルタの入力ポートを右クリックします)。
.avdata ファイルからデータをリンクではなくロードすることもできます。 これは、.avdataファイルからインポート... を使用して行われます。 コンテキスト メニューのコマンドを使用すると、データがコピーされ、現在のプロジェクトの一部になります。
HMIとグローバルパラメータの接続
HMI要素の出力や グローバルパラメータからフィルタ入力を接続することもできます。 以下の画像に示すように、どちらもプログラム エディターの側面に長方形のラベルとして表示されます。
詳細については、特定のトピックに関するドキュメントを参照してください。
書き込み可能および読み取り可能なグローバル パラメータ
ReadParameterフィルタとWriteParameterフィルタを使用して、グローバルパラメータの値を読み書きすることができます。
このアプローチにより、ユーザーはアルゴリズムのどの時点でも、ニーズに応じてグローバル パラメーター値を変更できます。
この機能の実際のアプリケーションをいくつか以下に示します。
- PLC からの信号に応じてレシピを管理する
- ネストされたマクロフィルタ間で転送されるデータの保存
- グローバル フラグを設定する。
接続のラベル付け
接続の数が多すぎない限り、接続は変数よりも追跡しやすいです。 プログラムが複雑になり、多くの接続が交差すると、可読性が低下する可能性があります。 この問題を解決するために、Aurora Vision Studio は一部の接続をラベルに置き換える方法を提供します。 接続を右クリックし、接続が複数ある場合は「すべての接続にラベルを付ける...」を選択し、接続が 1 つしかない場合には「接続にラベルを付ける...」を選択します。 次に、代わりに表示されるラベルの名前を設定します。 ラベルは、テキストプログラミング言語で知られている変数に似ています。 それらには名前が付けられており、接続されたフィルターが互いに遠く離れている場合でも、追跡が容易になります。 以下に例を示します。
Remarks:
- ラベル付き接続は、「この接続のラベルを解除」または「すべての接続のラベルを解除」コマンドを使用して戻す (ラベルを解除する) ことができます。
ラベルのコンテキスト メニューで使用できます。 - プログラムが複雑になった場合、最初に検討すべきことは、マクロフィルター階層をリファクタリングするか、全体の構造を再考することで複雑さを軽減することであることに注意してください。
接続にラベルを付けることは、プログラムをより便利な方法で視覚化するための単なる方法であり、プログラムの構造を簡素化するものではありません。 いずれにせよ、それを適切に整理しておくのはユーザーの責任です。 - Aurora Vision Studio では、フィルター間のすべての接続が明確に視覚化されます。たとえ暗黙的に接続すると、一般的なマシン ビジョン アプリケーションでのプログラミングが容易になります。 これは、次のことを前提とした当社の設計哲学に由来しています。
(1) とにかくユーザーが考えなければならないことを隠すのは間違いです。
(2) ユーザーは、静止画面イメージを見ながらマクロフィルターの詳細をすべて理解できる必要があります。 - 適切なプログラム構造にもかかわらず接続の量が多くなった場合は、複数の接続を 1 つにマージするために使用できるユーザー構造の作成も検討する必要があります。
(その目的でグローバルパラメータを使用しないでください)
無効な接続
他のフィルタとの接続が作成された後にマクロフィルタおよび式のポートのタイプが変更される可能性があるため、既存の接続が無効になる場合があります。 このような無効な接続は、プログラム エディターで赤い線と白い×印でマークされます。
無効な接続ではプログラムを実行できません。 これを修正するには 2 つの方法があります。無効な接続を置き換えるか、接続されているポートのタイプを見直すことです。
プロパティの出力
利用可能なフィルターの出力に加えて、フィルターからさらに多くの情報を取得することができます。 多くのデータ型は、フィールド(例:Realデータ型の「X」フィールドと「Y」フィールドのPoint2D)を含む構造体として表されます。これらのフィールドは標準出力としては使用できませんが、ユーザーは追加のフィルター出力として簡単に追加できます。これを「プロパティ出力」と呼びます。 そうすることで、他のフィルターの入力との接続を作成するために直接使用できるようになります。
追加のプロパティ出力
一部のプロパティは出力の現在の状態に基づいて計算されます (たとえば、配列が空かどうかの確認やその要素のカウント)、その他のプロパティは型の内部構造から直接導出されます (たとえば、「X」と Point2D 構造を構成する「Y」フィールド)。 このようなプロパティを提供する型を次の表に示します。
構造体名 | プロパティ出力 |
---|---|
Bool | Not |
ByteBuffer | Size IsByteBufferEmpty |
Histogram | Size |
Matrix | IsMatrixEmpty |
Path | Points Size Length IsPathEmpty |
Profile | Size IsProfileEmpty |
Region | Area IsRegionEmpty |
Segment2D | Length Direction Center |
String | Length IsStringEmpty |
Vector2D | Length Direction |
Vector3D | Length |
独立して存在できない特殊なタイプもあります。 これらは、一部の条件 (Conditional) またはオプションの入力 (Optional) の下では生成されない出力をラップするため、または指定されたタイプ (Array) のデータ セットを保持するために使用されます。 このようなタイプのプロパティ出力を以下の表に示します。
タイプ名 | プロパティ出力 |
---|---|
Array | Count IsArrayEmpty |
ArrayArray (array of arrays) | Count IsArrayEmpty IsNestedArrayEmpty |
Conditional | IsNil |
Optional | IsNil |
上記のプロパティ出力はすべて、そのタイプに固有です。 ただし、Array、OptionalまたはConditionalタイプのポートには、ラップされたタイプに応じて、より多くのプロパティ出力がある場合があります。 たとえば、フィルターの出力が領域の配列である場合、このポートには Count、IsArrayEmpty (両方ともポートの配列形式から結果として得られます)、IsRegionEmpty および Area (どちらも配列内に保持されているオブジェクトのタイプから結果として得られます) が含まれます。 - この場合、領域) をプロパティ出力として使用します。 ただし、フィルターの出力がプロパティ出力のないオブジェクトの配列 (例: Integer) の場合、ポートの配列形式 (Count および IsArrayEmpty) から得られる出力のみが使用可能になります。
ヒント: 追加のプロパティ出力よりもパフォーマンスに大きな影響を与えるNotやArraySizeなどの基本的なフィルターの使用は避けてください。
IsNilとIsEmptyの意味とは:
これらのプロパティ出力は、データの内容に応じてブール値を返します。 データが Nil の場合、通常はオブジェクトが検出されなかったことを意味し、プロパティ出力 IsNil は True に設定され、それ以外の場合は のままになります。 誤りです。 IsEmpty プロパティも同様の用途に使用できます。 唯一の違いは、入力されたオブジェクトが空の場合に反応することです。 ほとんどの場合、マクロフィルターの条件付き実行や数式への入力日付として使用されます。Nil オブジェクトと Empty オブジェクトの処理方法については、conditional executionに関する記事を参照してください。
拡張された入力構造
出力プロパティの拡張と同様に、入力構造体も拡張できます。
これは、すべてのフィールドへのアクセスを許可する基本構造に対してのみ機能します (たとえば、Point2D ですが、Image にはアクセスできません)。
展開された入力構造は、それを構成するフィールドによって置き換えられることに注意してください (プロパティ出力を追加する場合とは異なり、構造自体は利用可能なままです)。
コメントブロック
コメントはすべてのコンピューター プログラムにとって非常に重要な部分です。 開発中やその後のメンテナンス中に、明確で理解しやすい状態を保ちます。 Aurora Vision Studio でコメントを作成するには 2 つの方法があります。
1つは特別なコメントブロックを追加することです。 もう1つは、フィルターにコメントを直接追加することです。
プログラムに新しいコメント ブロックを追加するには、プログラム エディタの背景でマウスを右クリックし、下の画像のように [ここにコメントを追加] オプションを選択します。
コメント ブロックは、アルゴリズムの詳細を説明するのに非常に役立ちます。
ただし、簡単なヒントや短いコメントが必要な場合は、フィルターをマウスで右クリックした後、「コメントの追加」を使用します。