Bottle Crate (bottle_crate)
目的
タスクは、木枠に入ったボトルの数を数え、それらがすべてキャップを持っているかどうかを確認することです。
入力
木枠に入ったボトルの画像。木枠の位置は繰り返しです。
出力
計算されたボトルとキャップの数。
ヒント
木枠とボトルの位置は安定しています。ボトルの存在を確認するには、DetectMultipleCircles を使用できます。 この場合、テンプレートマッチングよりも速くなることがあります。
キャップの存在を確認するには、CheckPresence_PixelAmount を使用できます。
接続のラベル付けについては こちらを参照ください。
Solution (AVS)
Workspace ExplorerでワークスペースExamplesを開き、フィルムストリップウィンドウでBottleCrateデータセットを選択します。 ImageチャンネルをACQUIREセクションにドラッグします。 outImage出力をImageとしてラベル付けします。
PROCESSセクションにDetectMultipleCirclesフィルターを追加して、ボトルの先端をすべて見つけます。
- inImages入力をImageに接続します。
- inRadiusを77.0に設定します。
- inMaxOverlapを0.0に設定します。
- inMinScoreを28.0に設定します。
- inEdgeThresholdを4に設定します。
- フィルターの「Show/Hide Ports」をクリックして、outCircles.Countポートを表示します。これをObjectCountとラベル付けします。次に、Results Controlを開き、ObjectCount行のチェックボックスをオンにし、リミットを20に設定します:
- outCircles.Circle[]出力を"BottleCircles"としてラベル付けします。
すべての見つかったボトルについて、見つかった円の色に基づいてキャップの存在を確認します。キャップはボトルの穴よりも明るいピクセルを持っています。 CheckPresence_PixelAmountを追加し、以下のパラメータを設定します:
- inImages入力をImageに接続します。
- inRegionを"BottleCircles"に接続します。これにより、各見つかったボトルがチェックされます。
- inMinSaturationを86に設定します。
- inMinBrightnessを49に設定します。
- outIsPresent出力をIsPresentとしてラベル付けします。
- 各見つかったボトルにキャップがあるかどうかを確認するには、formulaを使用できます。出力をラベルに接続する必要はありません。Formulaの出力名の前に「out」がない場合、出力は自動的にラベル付けされます。
outCapPresence = all(IsPresent)
Count = count(IsPresent) -
Results Controlを開き、Count行のチェックボックスをオンにし、リミットを20に設定します。
-
プログラムが終了しました。これでHMIを設計できます:
- 上部ツールバーのHMIボタンをクリックしてHMIを作成します。
- Containersカテゴリーの中にあるGroupBoxコンテナを追加し、そのTextプロパティをImagesに設定します。これはHMIのほとんどの領域をカバーする必要があります。
-
Images GroupBox内で:
- HMI ControlsのIndicatorsカテゴリーにあるview2DBox_PassFailインジケータを追加します。これはImages GroupBoxを満たす必要があります。そのinImageポートをImageに接続します。
- inData1ポートをBottleCirclesに接続します。
- inStatus1をIsPresentに接続します。
- view2DBox_PassFailのパラメータを設定します:
- LineWidthを5に設定します。
- InitialSizeModeをFitToWindowに設定します。
- ControlsカテゴリーのHMI Controlsで利用可能なprogramControlBoxを追加し、HMIの右上隅に配置します。これはImages GroupBoxの内部にあるべきではありません。
- 別のGroupBoxを追加し、そのTextプロパティをResultsに設定します。サイズを変更して、4つの要素を含めるようにします。次に、Results GroupBox内で以下を行います:
- HMI ControlsのControlsカテゴリーから2つのLabelコントロールと、Indicatorsカテゴリーから2つのPassFailIndicatorを追加します。最初のLabelのTextプロパティをNumber of bottlesに設定し、2番目のLabelのTextプロパティをNumber of capsに設定します。HMIは以下の画像のように表示されるはずです:
- 最初のPassFailIndicatorについて、inFailText、inPassText、inNeutralTextポートをObjectCountに接続し、InValueポートをoutCircle.Count.Statusに接続します。
- 2番目のPassFailIndicatorについて、inFailText、inPassText、inNeutralTextポートをCountに接続し、InValueポートをoutCount.Statusに接続します。
- HMI ControlsのControlsカテゴリーから2つのLabelコントロールと、Indicatorsカテゴリーから2つのPassFailIndicatorを追加します。最初のLabelのTextプロパティをNumber of bottlesに設定し、2番目のLabelのTextプロパティをNumber of capsに設定します。HMIは以下の画像のように表示されるはずです: