テクニカルティップス

「HALCON向けダイナミックビジョンアプリ」

HALCON 画像処理から IDS NXT ビジョンアプリへの数ステップ

HALCON向けダイナミックビジョンアプリ

「Dynamic Vision App for HALCON」があれば、HALCON で開発された画像処理タスクを IDS NXT カメラで簡単に実行できます。HALCON ユーザーなら、時間がかかる C++ でのビジョンアプリ開発はもう不要です。これは「HALCON 向けダイナミックビジョンアプリ」により可能となりました。これで画像処理開発に必要なすべてが揃います。

このテクニカルティップスでは、HDevelop で適切な HALCON ライブラリを数ステップで作成し、IDS NXT Cockpit を介して IDS NXT vegas にアップロードし、C++ コードを作成することなく実行する方法を紹介します。シンプルな画像処理サンプル「example_code2d.hdpl」は、取得した画像データから Data Matrix コードを検索して、ビジョンアプリの結果画像でマークします。さらに、コードのコンテンツはテキストとして出力されます。 IDS が開発した IDS NXT Framework を使うと、ビジョンアプリベースカメラで実行するビジョンアプリを、何にも邪魔されずにカスタム開発できます。個々のビジョンアプリの開発および実行では IDS NXT Vision App Development Kit を利用でき、必要なのは C++ の知識だけです。 それも、新たに開発された「HALCON向けダイナミックビジョンアプリ」でこれまでより作業はずっと簡単になります。これで画像処理開発に必要なすべてが揃います。すでにプリインストールされた HALCON で画像処理を実行するだけの場合、この汎用アプリを使うと、ビジョンアプリを C++ で作成する手間が省けます。HDevelop で作成された HALCON 画像処理を実行し、さらに定義された入出力パラメーターを REST インターフェースから提供します。また、「HALCON向けダイナミックビジョンアプリ」ビジョンアプリではこれらのパラメーターが IDS NXT Cockpit に表示されるので、画像処理の設定とチェックに便利です。

HALCON ライブラリの直接実行
HALCON ライブラリの直接実行

前提条件

ここで説明する手順および IDS NXT の概念の理解を深めるための準備として、マニュアル『IDS NXT - ビジョンアプリ開発』と IDS NXT ビデオチュートリアルをお勧めします。テクニカルティップスを確認するには、以下が必要です。

  • IDS NXT vegas (ファームウェアバージョン 1.3)
  • Windows PC (IDS NXT vegas へのネットワーク接続)
    • ライセンスされた HALCON 13 開発環境
    • IDS NXT Cockpit (ファームウェアバージョン 1.2.4)
  • 「HALCON向けダイナミックビジョンアプリ」

 

IDS NXT Cockpit から「HALCON向けダイナミックビジョンアプリ」を IDS NXT vegas にインストールして有効にします。ビジョンアプリのインストール方法は、マニュアル『IDS NXT - Operation』の「Vision App Manager」の章に記載されています。

「HALCON向けダイナミックビジョンアプリ」を VApp Manager で起動
「HALCON向けダイナミックビジョンアプリ」を VApp Manager で起動

ビジョンアプリが正常に起動されると、その設定ダイアログが IDS NXT Cockpit 設定パネルに表示されます。互換性のある HALCON ライブラリをアップロードします。開発方法は、以降で説明します。

IDS NXT ビジョンアプリのインストールとインストール解除は、管理者ユーザーのみが実行できます。

HALCON の開発

「HALCON向けダイナミックビジョンアプリ」は、IDS NXT ファミリーのビジョンアプリベースカメラで HDevelop プロシージャライブラリ (HDPL) と IDS NXT Framework 間の接続を確立します。これにより、制御パラメーターと画像処理結果をカメラの REST インターフェースと IDS NXT Cockpit で利用できるようになります。このようにして、画像処理をビジョンアプリとまったく同じように、直接操作できます。

HALCON ライブラリと ダイナミックビジョンアプリとの互換性を確保するため、特殊な名前の HALCON プロシージャが必要で、この入出力パラメーター (プロシージャインターフェース) が正確に定義されます (セマンティックタイプ)。定義されると、「HALCON向けダイナミックビジョンアプリ」は自動的に適切な設定または結果変数を選択でき、これが REST インターフェースから提供されます。

「HALCON向けダイナミックビジョンアプリ」が HALCON と IDS NXT Framework 間の接続を確立します。
「HALCON向けダイナミックビジョンアプリ」が HALCON と IDS NXT Framework 間の接続を確立します。

HALCON ライブラリの構造

ダイナミックビジョンアプリと通信するには、開始点として HALCON 画像処理に以下の HDPL プロシージャが必要です。

  • "init" - ライブラリがロードされると実行されます。InputCtrlParams (変数、制御パラメーター) と OutputCtrlParams (表示、結果) がここで登録されます。
  • "finalize" - ライブラリがアンロードされる前に呼び出され、init で作成されたすべてのデータ構造をクリーンアップします。
  • "train" - HALCON 画像処理をトレーニングできます。このプロシージャはオプションです。該当する場合、対応するトレーニングが実行されます。
  • "process" - 実際の画像処理の処理関数です。

プロシージャの作成

タイプ "Library procedure (.hdpl)" の必須プロシージャを HDevelop で作成し、同じライブラリに保存します。各プロシージャに対して、必要な入力または出力パラメーター (表示用および制御用) とパラメータードキュメント (セマンティックス) を指定します。

 

パラメータードキュメント (セマンティックス) 付きの完全に定義されたプロシージャインターフェースが必須です。

重要! 正しい「セマンティックタイプ」を 「Parameter Documentation」タブ内のHALCON プロシージャの入出力パラメーターに割り当てる必要があります。

このテクニカルティップスの画像処理サンプル用に、以下のプロシージャパラメーターを作成します (example_code2d.hdpl)。

プロシージャ パラメーター タイプ セマンティック
init codetype  入力:制御用パラメーター

string

値:QR Code (デフォルト)、Data Matrix ECC 200

codemodel  出力:制御用パラメーター datacode_2d
process


image  入力:表示用パラメーター image
searcharea  入力:表示用パラメーター region
codemodel  入力:制御用パラメーター datacode_2d
contour  出力:表示用パラメーター xld
cutout  出力:表示用パラメーター image
content  出力:制御用パラメーター string
finalize codemodel  入力:制御用パラメーター datacode_2d
train


image  入力:表示用パラメーター image
firstarea  入力:表示用パラメーター image
codemodel  入力:制御用パラメーター datacode_2d
content  出力:制御用パラメーター string
sizemin  出力:制御用パラメーター integer
sizemax  出力:制御用パラメーター integer

パラメーターのセマンティックス

HALCON パラメーターセマンティックスは特に重要です。HALCON向けダイナミックビジョンアプリによって個々の HALCON プロシージャにどのパラメータータイプが転送またはクエリされるかを定義します。HALCON パラメーターのセマンティックスに従って、ダイナミックビジョンアプリ は REST インターフェースに適切なインタラクションパラメーターを動的に生成します。サンプルでは以下のインタラクションパラメーターが生成されます。

HALCON プロシージャパラメーター

IDS NXT
インタラクションパラメーター

codetype コンボボックスコントロール
image image
contour マーカー付き画像
content ラベル
searcharea 調整可能領域 (画像領域)

 

インタラクションパラメーターがビジョンアプリのグラフィック要素として表示されます。
インタラクションパラメーターがビジョンアプリのグラフィック要素として表示されます。

画像処理

このテクニカルティップスでは、「HALCON向けダイナミックビジョンアプリ」と HALCON ライブラリ間のプロシージャインターフェースを使用した交換のみを説明します。

"init" プロシージャ制御パラメーター "codetype" が作成され、コードタイプを選択し、2D コードモデル "codemodel" が作成されます。これは他のプロシージャの入力パラメーターとしても使用されます。さらに、トレーニングデータ付きのファイルがロードまたは作成され、さらに詳細なコードモデルが生成されます。

init ( : : codetype : codemodel )

if (FileExistsTraining)
read_data_code_2d_model(TrainingFilePath, codemodel)
[...]
else
create_data_code_2d_model(codetype, [], [], codemodel)

"process" プロシージャでは、ユーザーが設定した "searcharea" を使用して、まず画像データが狭められます。HALCON はこの領域内の 2D コードを (トレーニングされた) "codemodel" を使用して検索し、結果を "content" 文字列および画像位置を "contour" 画像内の XLD として転送します。"cutout" 画像は cutout コードを表示します。

process ( image, searcharea : contour : codemodel : content )

find_data_code_2d (image, contour, codemodel, [], [], ResultHandles, content)
[...]
reduce_domain(image, Region, cutout)

"train" プロシージャで、コードモデルはさらに改善され、トレーニングデータがファイルに保存されます。

train ( image, firstarea : : codemodel : content, sizemin, sizemax )

find_data_code_2d(ImageReduced, contour, codemodel, ['train'], ['all'], ResultHandles, content)
[...]
write_data_code_2d_model(codemodel, TrainingFilePath)

"finalize" プロシージャでは、"codemodel" を削除してメモリをクリーンアップします。

finalize ( : : codemodel : )

clear_data_code_2d_model(codemodel)

HALCON ライブラリのアップロード

作成された HALCON ライブラリを使用できるようになりました。ダイナミックビジョンアプリ の「アップロード」ボタン () を使用して、作成した HALCON ライブラリをアップロードします。ライブラリが正常にロードされると、メッセージが表示されます。この場合、ダイナミックビジョンアプリに IDS NXT Cockpit の HALCON ライブラリの入出力パラメーターが表示されます。画像処理をすぐに使用できます。

HALCON ライブラリは、次回の再起動後も、「削除」ボタン () でシステムから削除されるか、別のライブラリのアップロードによって上書きされるまで、メモリ内に永続的に残ります。一度にロードしてアクティブにできるのは、1 つのライブラリだけです。ただし、画像処理は何度でも変更できます。

ヒント

パフォーマンス

汎用ビジョンアプリと HALCON ライブラリの組み合わせでは、速度は最適化されていないため、特化して実装された C++ ビジョンアプリのプログラミングとは比較できません。テクニカルティップス example_code2d.hdpl の速度は、特化したマトリックスコードリーダーのビジョンアプリの約 70% です。「HALCON向けダイナミックビジョンアプリ」には、C++ ソースコードを 1 行も書かず、カメラプラットフォーム用にクロスコンパイルすることもなく、HALCON 画像処理をビジョンアプリベースのカメラで非常にすばやく簡単にテストできるという利点があります。

例外処理

HALCON プロシージャの実行中に未処理の例外が発生すると、ビジョンアプリ は再起動し、HALCON ライブラリをアンロードします。クラッシュを防止するには、発生した各エラーを HALCON プロシージャ内で処理してください (try...catch による例外処理)。

ティップス

再起動を防ぐ

ビジョンアプリが HALCON 画像処理ライブラリの開発中にクラッシュした場合、何度も自動的に再起動するのを防ぎたいと思うのは当然のことです。REST コマンドを使うと、再起動を防止できます。その後、アプリの起動を手動で指定できます。

curl -u <user credentials> -X PUT /vapps/activated/dynamic_vision_app_for_halcon?temporary=true <device URL>

この REST コマンドは、現在のビジョンアプリの実行について 1 回のみ有効です。

ログの表示

ビジョンアプリや画像処理の誤動作を追跡するためなど、「HALCON向けダイナミックビジョンアプリ」の詳細ログを表示するには、以下の URL をブラウザーに入力します。

http://<Device IP>/vapps/dynamic_vision_app_for_halcon/log

このログは、HALCON ライブラリをロードするエラーのないプロセスを示しています。
このログは、HALCON ライブラリをロードするエラーのないプロセスを示しています。

「HALCON向けダイナミックビジョンアプリ」はライブラリで定義されたプロシージャパラメーターを分析し、設定可能な入力や結果など、必要なビジョンアプリのインタラクション要素を作成します (黄色のマーカーを参照)。このアプリケーションログを使うと、HALCON 画像処理の実行エラーの特定と修正が容易になります。

標準出力ファイルを使用すると、HALCON メッセージもこのログに統合できます。 

open_file('standard', 'output', stdout)
result := 'NIO'
fwrite_string (stdout, result + '\n')

まとめ

HALCON向けダイナミックビジョンアプリ」は、HALCON ベースの画像処理を IDS NXT vegas などのビジョンアプリベースのカメラですばやく簡単に実行する手段です。これにより独自のビジョンアプリの C++ プログラミングにかかる手間が不要になり、HALCON ルーチンの作成に集中できます。アップロードメカニズムはシンプルなので、IDS NXT ビジョンアプリベースのカメラの目的をランタイム中に何度でも変更できます。C++ やビジョンアプリプログラミングに精通する必要はありません。組み込み画像処理が「とても簡単」になりました。

IDS NXT ビジョンアプリの概念および使用方法の詳細については、IDS NXT ビジョンアプリ開発ガイドをお読みになり、IDS NXT ビデオチュートリアルをご覧ください。 独自の HALCON マシンビジョンアプリケーションのシンプルでわかりやすいプログラミングの紹介については、MVTec の HALCON 製品ページでご確認ください。

その他のテクニカルティップスおよびアプリケーションレポートについては、IDS の Web サイトをご覧くださいIDS NXT ファミリーの新しいビジョンアプリベースの産業用カメラの詳細情報も掲載されています。