本発明の実施の形態について図面を参照して説明する。図1は、本実施形態に係るプログラミング装置の構成を示すブロック図である。
プログラミング装置10は、全体としてサーバ装置、パーソナルコンピュータ、携帯情報端末などの情報処理装置からなり、ユーザ操作に応じて、プログラムを構成する処理ステップである各種のユニットを編集画面上に配置して、これらユニット間を接続線で結線することにより、プログラミングを作成・編集する機能を有する。
プログラミング装置10において配置できるユニットとしては、画像処理だけでなく画像検査に必要な他の様々な要素(例えば、入力、出力、条件分岐、ディープラーニングの学習済みデータによる推論等)も含まれ、プログラミングにおいては全ての処理をユニットとして統一的に扱うことができる。入力ユニットとしては、カメラや外部プログラム、共有メモリ、TCP/IPによるネットワーク入力、画像ファイル、CSVファイル、I/Oボード等が含まれる。カメラのユニットとしては、標準的なUSBカメラ(UVCドライバ)のみでなく、各社の主要な産業用カメラに対応したユニットが利用可能とされる。出力ユニットとしては、ディスプレイ表示、画像ファイル、CSVファイル、共有メモリ、TCP/IPによるネットワーク通信、I/Oボード、パトランプ等が含まれる。画像処理のユニットとしては、各種のフィルタ等の画像処理、複数の入力に対する演算(画像の加算・減算等)、RGBによる画像の分離、画像からのHSV(H:色相、S:彩度、V:明度)情報の出力等が含まれる。その他のユニットとしては、条件分岐、ディープラーニングの学習済みデータによる推論といった判断を伴う処理も含まれる。これらのユニットについては、後述するように処理内容等が定義されたユニットテンプレート情報14Aが予め用意される。プログラミング装置10のユーザは、これらのユニットを自由に配置・連結して、所望のプログラムを作成する。
図1に示すように、プログラミング装置10には、主な機能部として、通信I/F部11、操作入力部12、画面表示部13、記憶部14、および演算処理部15が設けられる。
通信I/F部11は、通信用のインタフェース回路からなり、通信回線を介して外部装置(図示せず)とデータ通信を行うことにより、各種データをやり取りする機能を有する。外部装置としては、例えば、カメラ、各種のセンサ類等のプログラミング装置に入力情報を提供する機器、パトランプ、ブザー等のプログラムにより制御される出力機器、サーバ装置、パーソナルコンピュータ、携帯情報端末等、プログラムの実行結果を受け取ってさらなる処理を行う情報処理装置等が挙げられる。
操作入力部12は、キーボード、マウス、タッチパネルなどの操作入力装置からなり、ユーザ操作を示す操作を検出して演算処理部15へ出力する機能を有する。
画面表示部13は、LCDなどの画面表示装置からなり、演算処理部15から出力された編集画面、設定画面などの各種データを画面表示する機能を有する。
記憶部14は、ハードディスクや半導体メモリなどの記憶装置からなり、演算処理部15での処理に用いる各種処理情報やプログラム14Pを記憶する機能を有する。
プログラム14Pは、演算処理部15のCPUで実行されることにより、各種の処理部を実現するプログラムであり、外部装置や記録媒体(共に図示せず)から読み出されて記憶部14に予め格納される。
記憶部14で記憶する主な処理情報として、ユニットテンプレート情報14A及びユニットボード情報14Bがある。ユニットテンプレート情報14Aは、プログラムを構成する処理ステップである各種のユニットについて、各ユニットのデータ構造、変数、アルゴリズム等を定義した情報である。
図2は、ユニットのデータ構造の一例を示している。ユニットIDは、ユニットを識別するためのユニークな識別情報であり、プログラミングの過程でユニットが配置される際に自動的に採番される。ユニットIDをユーザが編集することは禁止されるとよい。ユニット名は編集画面において表示されるユニットの名称であり、ユーザが自由に付すことができる。ユニット種別は、ユニットの種類を示す情報である。このユニット種別は予め定義されユーザによる編集は禁止される。ユニットの種別としては、入力(カメラ、入力画像ファイル等)、出力(パトランプ、ディスプレイ表示、出力ファイル等)、画像処理(フィルタ、画像サイズ変換等)等が挙げられる。本実施形態のプログラミング装置10では、画像に対するフィルタ処理を行うユニットの一つとして、後述するフレキシブルイメージフィルタユニットを備える。
ユニット座標は、編集画面内におけるユニットの表示位置を示す情報である。ユニット座標は、プログラミングの過程でユニットを配置する際にその初期値が決まり、その後ユーザが編集画面内でユニットを移動させることに応じて適宜更新される。
前ユニットポインタ及び次ユニットポインタはユニットの接続関係を規定する情報である。前ユニットポインタは、当該ユニットの前段に連結されたユニットのデータへのポインタ(メモリアドレス)を格納する。また、次ユニットポインタは、当該ユニットの後段に連結されたユニットのデータへのポインタ(メモリアドレス)を格納する。プログラミングの過程で配置した複数のユニットを連結する操作により、前ユニットポインタ及び次ユニットポインタが設定される。
ユニット設定画面は、プログラミングの過程でユニットを配置する際に表示されるユニット固有の設定画面を規定する情報である。ユニットの設定画面は予め定義され、ユーザによる編集は禁止される。例えば、カメラ入力ユニットの場合、カメラ番号(カメラの機種等を示す)を設定する画面が定義される。なお、ユニットの種類によらず共通の設定項目であるユニット表示名等を設定する画面については、ここに定義する必要はない。
ユニット設定データは、ユニット固有の設定データの情報である。例えば、カメラ入力のユニットの場合には選択されたカメラを示すカメラ番号がユニット設定データに該当する。また、入力される画像データのサイズ変換をするリサイズユニットの場合には、リサイズ後の画像のサイズを規定する情報(ピクセル数、入力画像に対する拡大率等)がユニット設定データに該当する。
ユニット入力データは、当該ユニットに対し前段のユニットから入力される画像やファイル等のデータを表す。カメラ入力ユニットのように、前段に他のユニットが接続されないユニットについては入力データが定義されなくてよい。
ユニットロジックは、当該ユニットで実行される処理のアルゴリズムを規定する。ユニットのロジックは予め定義され、ユーザによる編集は禁止される。なお、ユーザには、設定データを変更することにより可能な範囲でユニットでの処理の調整が許容される。ユニットのロジックとしては、例えば、カメラ入力ユニットのように外部機器からの入力を得るユニットについては、外部機器を制御して必要なデータを得て後段に出力するためのアルゴリズムが規定される。また、パトランプユニットのように入力データに基づき外部機器を制御するユニットについては、外部機器を制御して所望の動作を行わせるためのアルゴリズムが規定される。また、フィルタユニットのように入力データを処理して出力データを出力するユニットについては、入力データに基づき出力データを出力するアルゴリズムが規定される。
ユニット出力データは、当該ユニットから次の段のユニットに出力される画像やファイル等のデータを表す。パトランプや出力ファイルのユニットのように、後段に他のユニットが接続されないユニットについては出力データが定義されなくてよい。
記憶部14は、ユニットテンプレート情報14Aとして、各種のユニットについて上記のようなデータ構造、およびユニットの種別、設定画面、ロジック等の予め定義される情報を格納する。
ユニットボード情報14Bは、各種のユニットを組み合わせてユーザが作成したプログラムを表す情報である。後述する編集画面を用いて配置・連結された複数のユニットについての諸情報が、先述のユニットのデータ構造に従った形式でユニットボード情報14Bとして格納される。
演算処理部15は、CPUとその周辺回路を有し、記憶部14のプログラム14Pを読み込んで実行することにより、プログラミング装置の各種処理を実現する。すなわち、演算処理部15は、本発明おけるプログラム実行手段、デバッグビュー表示制御手段、及びユニット編集手段として機能する。演算処理部15で実現される主な処理として、ユニットボードの編集処理が挙げられる。
編集処理は、ユーザ操作に応じて編集画面上に各種のユニットを配置する機能、配置されたユニット間をユーザ操作に応じて連結する機能、および配置されたユニットの設定値をユーザ操作に応じて変更する機能等を含んでいる。
図3は、編集処理を行う際に用いられる編集画面の一例を示している。図3に示されるように、編集画面は、ユニットの編集や制御に用いるコントロールボタンが配置されたコントロール領域R1と、ユーザがユニットを配置・接続してグラフィカルにプログラミングを行うための領域であるユニットボード編集領域R2とを備える。
コントロール領域R1は、編集画面上部に設けられ、ユニットを配置、移動、実行等させるためのコントロールボタン、チェックボックス等のコントロールオブジェクトが複数配置される。これらのコントロールオブジェクトは、ユニットボード情報14Bの制御に関するもの、ユニットボード編集領域R2でのプログラミングに関するもの、ユニットボード編集領域R2にてプログラミングされたプログラムの実行制御に関するもの、ユニットボード編集領域R2の標示制御に関するものの4種類に大別される。
ユニットボード情報14Bの制御に関するコントロールオブジェクトとしては、編集中のユニットボードの名称表示T1、ユニットボード編集領域R2でプログラミングしたユニットボード(プログラム)を保存するための保存ボタンB1、保存済みのユニットボードを読み込んでユニットボード編集領域R2に表示させるための読込ボタンB2、ユニットボード編集領域R2で編集中のユニットボードの編集を終了するための終了ボタンB3、後述するデバッグビューを有効にするか否かを選択するためのチェックボックスCB1等が含まれる。
ユニットボード編集領域R2でのプログラミングに関するコントロールオブジェクトとしては、ユニット追加ボタンB4、ユニット編集ボタンB5、ユニット連結ボタンB6、ユニット移動ボタンB7、ユニット削除ボタンB8、及びユニット複製ボタンB9が含まれる。
ユニット追加ボタンB4は、ユニットボード編集領域R2に新たなユニットを配置する追加モードを開始するためのコントロールボタンである。このユニット追加ボタンB4を押下すると、配置するユニットを選択するためのユニット選択画面が表示される。ユニット選択画面で所望のユニットを選択し、画面表示に従いユニットの設定を行った後、ユニットボード編集領域R2内の所望の位置をクリックすると、そのクリックした位置にユニットのアイコンが配置される。図3に示すように、ユニットのアイコンは、略矩形のオブジェクトであり、ユニット種別とユニット名称が表示される。
ユニット編集ボタンB5は、ユニットボード編集領域R2に配置されているユニットの設定を編集する編集モードを開始するためのコントロールボタンである。このユニット編集ボタンB5を押下して、ユニットボード編集領域R2内に配置されているユニットのアイコンをクリックすると、当該ユニットの設定値を編集するための設定画面が表示される。ユーザは設定画面にてユニットの各種設定値を編集することができる。
ユニット連結ボタンB6は、ユニットボード編集領域R2に配置されているユニット間の接続関係を設定する連結モードを開始するためのコントロールボタンである。ここで、ユニットの連結とは、連結元のユニットの出力が連結先のユニットの入力となるようにデータの受け渡しを定義づけることである。
図4は、ユニットの一例として、画像からのHSV(H:色相、S:彩度、V:明度)情報を出力するユニットの表示例を示している。図4に例示されるように、各ユニットには、入力及び出力の数に応じたジョイント図形J(例えば小さな四角形)が表示される。また、ジョイント図形Jには入出力の内容を示す文字等が表示される。ユニットのアイコンでは、左辺が入力端、右辺が出力端を意味するため、ユニットの左辺には入力の数に応じたジョイント図形Jが表示され、ユニットの右辺には出力の数に応じたジョイント図形Jが表示される。連結関係を可視化すべく、ユニットボード編集領域R2において、連結されたユニット間には連結されていることを示す接続線(ジョイント図形J同士を結ぶ線)が表示される。
ユニット連結ボタンB6を押下すると、連結モードが開始され、連結元のユニットの選択を受け付ける状態となる。所望のユニットのアイコン(複数の出力を有するユニットについてはいずれかの出力のジョイント図形J)をクリックすると、そのユニットの出力(複数ある場合にはクリックされたジョイント図形Jに対応するもの)が連結元として特定される。続いて連結先のユニットのアイコン(複数の入力を有するユニットについてはいずれかの入力のジョイント図形J)をクリックすると、そのユニットに入力(複数ある場合にはクリックされたジョイント図形Jに対応するもの)が連結先として特定され、2つのユニットが連結される。このような操作により、1組のユニットを連結することができる。ユニットボード編集領域R2において、連結されていることを示すべく、連結されたユニットのジョイント図形J間を結ぶ線が表示される。ユニットのアイコンでは、左辺が入力端、右辺が出力端を意味する。したがって、第1のユニットの出力が第2のユニットに入力される場合、第1のユニットのアイコンの右辺と第2のユニットのアイコンの左辺とを結ぶ線が表示されることになる。
ユニット移動ボタンB7は、ユニットボード編集領域R2に配置されているユニット間の接続関係を設定する移動モードを開始するためのコントロールボタンである。このユニット移動ボタンB7が押下された移動モードにおいて、ユーザはユニットボード編集領域R2内に配置されているユニットをドラッグアンドドロップ操作により自由に移動させることができる。
ユニット削除ボタンB8は、ユニットボード編集領域R2に配置されているユニットを削除する削除モードを開始するためのコントロールボタンである。このユニット削除ボタンB8が押下された削除モードにおいて、ユニットボード編集領域R2内に配置されているユニットをクリックすると、当該ユニットを削除することができる。なお、削除を実行する前に意思確認を要求する画面を表示し、削除の意思が確認できた場合にのみ削除を実行するように構成してもよい。
ユニット複製ボタンB9は、ユニットボード編集領域R2に配置されているユニットを複製する複製モードを開始するためのコントロールボタンである。このユニット複製ボタンB9が押下された複製モードにおいて、ユニットボード編集領域R2内に配置されているユニットをクリックすると、当該ユニットが複製対象として選択され、さらにユニットボード編集領域R2内をクリックすると、そのクリックした位置に選択したユニットの複製(ユニットIDが異なり、未連結のもの)が追加される。
ユニットボード編集領域R2にてプログラミングされたプログラムの実行制御に関するコントロールオブジェクトとしては、ユニット実行ボタンB10、ステップ実行ボタンB11、及びユニット停止ボタンB12が含まれる。
ユニット実行ボタンB10は、ユニットボード編集領域R2で定義されたプログラムを実行する実行モードを開始するためのコントロールボタンである。このユニット実行ボタンB10が押下された実行モードでは、ユニットボード編集領域R2に配置され連結されたユニット群によりに定義される一連のプログラムが、演算処理部15により最初から最後まで通して実行される。
ステップ実行ボタン群B11は、ユニットボード編集領域R2で定義されたプログラムを、段階を分けて順に実行するステップ実行モードを制御するコントロールボタン群である。ステップ実行ボタン群B11は、主にプログラムの動作確認等のデバッグに用いられるものであり、ブレークポイント設定、ステップイン、ステップオーバー、ステップアウト等の制御を行うためのボタンが設けられる。
ユニット停止ボタンB12は、ユニット実行モード及びステップ実行モードを終了するためのコントロールボタンである。
ユニットボード編集領域R2の標示制御に関するコントロールオブジェクトとしては、ユニットボード編集領域R2での表示倍率を設定するためのテキストボックスT2及びスライダバーSB、及びユニットボード編集領域R2内のユニットを透過表示するか否かを設定するためのチェックボックスCB2が含まれる。
ユニットボード編集領域R2は、ユニットのアイコンやユニット間の結線等が表示される領域である。ユーザは、ユニットボード編集領域R2に配置したユニットを、ドラッグアンドドロップ操作によって自由に移動させたり、ユニットをダブルクリックして設定画面を表示させ、設定値を調整したりすることができる。
また、ユニットボード編集領域R2には、配置された個々のユニットでの処理結果(出力データ)を示すデバッグビューDVを表示することができる。デバッグビューDVは、例えば対応するユニットからの吹き出しのように表示されるとよい。デバッグビューDVを表示するか否かは、ユニットボード編集領域R2に設けられたチェックボックスCB1の入力状態(ON/OFF)によって定められる。チェックボックスCB1がONであれば、デバッグビューDVはユニット実行モード及びステップ実行モードだけでなく、追加モード、編集モード等のその他のモードでユニットボード編集領域R2内のユニットを編集している際にもデバッグビューDVが表示される。なお、所定の静止画像を出力するユニットのように、実行モードでなくても出力が確定するユニットでは、配置するだけでデバッグビューDVにその出力が表示される。一方、カメラや画像処理など、処理を実行しなければ出力データが出力されないユニットでは、配置しただけではデバッグビューDVの枠が表示されるのみで出力データ(画像)は表示されず空欄であり、実行時にはじめて出力データが表示される。そして、実行中は、ユニットの出力の変化に応じてリアルタイムでデバッグビューDVの表示が更新される。
デバッグビューDVに表示するユニットの出力データは、ユニットの種類によってさまざまであってよい。カメラや画像処理のように画像を出力するユニットの場合には、デバッグビューDVに出力データとして画像を表示するとよい。また、ディープラーニングの学習済みデータによる推論のユニットの場合には、ユニットに対する入力に基づく推論によりクラス分類して、順位(該当する可能性の高い順にクラスを順位付けした数値)や各クラスの推定確率(該当する可能性)をデバッグビューDVに表示してもよい。あるいは、ディープラーニングの学習済みデータによる推論のユニットにおいて、ニューラルネットワークが特徴としてとらえている箇所を示すヒートマップをデバッグビューDVに表示してもよい。このヒートマップは、入力される画像に重畳して、半透過表示されるとよい。
このようなデバッグビューDVをユニットボード編集領域R2に配置されている各ユニットに対して表示させることにより、最終的な出力だけでなく各ユニットでの中間的な出力データをも一目で確認することができる。様々な画像処理を多段階に行うプログラムでは、各段階の処理(ユニット)を経ることによる処理結果の変遷を最終出力まで一覧できる形で確認できるので、所望の出力結果を得るための設定の試行錯誤を、デバッグビューDVを見ながら容易に行うことが可能となる。
なお、実行モードの間もユニット編集ボタンB5は有効とされ、実行モードの最中にユニット編集ボタンB5をクリックし、さらに編集対象のユニットのアイコンをクリックすると、当該ユニットの設定画面が表示される。そして、設定画面にて設定値を変更すると、その設定値の変更はリアルタイムで実行中のプログラムに反映される。その結果、デバッグビューDVの表示にも、設定値の変更の影響が即座に反映される。このような構成により、ユーザは、設定値を変更した影響を確認しながら設定値の調整を行うことができる。
続いて、以上のような操作画面を用いてユニットボード編集領域R2に配置されるユニットの1つとして本実施形態のプログラミング装置10で利用可能とされるフレキシブルイメージフィルタユニットについて説明する。画像に対するフィルタとして、ハフ変換、二値化、反転、エッジ抽出、色抽出、彩度抽出等、様々な種類のアルゴリズムが従来から用いられている。フレキシブルイメージフィルタユニットでは、フィルタの種類(アルゴリズム)及びフィルタの特性を決める特性パラメータを設定値とするユニットである。フレキシブルイメージフィルタユニットは、画像に対するフィルタリングを行うユニットであるため、入力データ及び出力データはいずれも画像のデータである。
フレキシブルイメージフィルタユニットは、他のユニットと同様にユニットボード編集領域R2に追加し、連結することで使用できるが、その設定画面に特徴を有する。図5はフレキシブルイメージフィルタユニットの設定を受け付ける設定画面の一例を示している。図5に示されるように、フレキシブルイメージフィルタユニットの設定画面は、ターゲット画像表示領域R3、アルゴリズムプレビュー領域R4(本発明の第1プレビュー領域に相当)、パラメータプレビュー領域R5(本発明の第2プレビュー領域に相当)を備えている。ターゲット画像表示領域R3は画面の中央部を含む画面内の主要領域を占める。ターゲット画像表示領域R3には、その時点で設定されているフィルタ種類及び特性パラメータのフィルタを入力データに対し適用した場合のプレビュー画像であるターゲット画像が表示される。ターゲット画像表示領域R3に表示されるターゲット画像は、アルゴリズムプレビュー領域R4やパラメータプレビュー領域R5に表示されるプレビュー画像より大きく表示されるとよい。各領域(R3〜R5)に表示されるプレビュー画像は、入力に対して予め各条件のフィルタを適用したものを閲覧して選択できるように構成してもよいし、選択される毎に逐次処理して更新するように構成してもよい。
アルゴリズムプレビュー領域R4は、ターゲット画像表示領域R3の左側に設けられた領域である。アルゴリズムプレビュー領域R4には、選択可能なアルゴリズムのフィルタ(特性パラメータは各フィルタの所定の初期値とするとよい)を入力データに対し適用した場合のプレビュー画像が、縦に並べて表示される。複数のプレビュー画像のうち、その時点で選択されているフィルタ種類に対応するものは、太枠で囲む等により識別可能とされる。図5の例では二値化のフィルタが選択されている。
フレキシブルイメージフィルタユニットの設定画面において、フィルタの種類を選択する操作は、アルゴリズムプレビュー領域R4の表示と対応した操作とするとよい。すなわち、キーボードで「上」又は「下」キーを押下する操作、マウスでスクロールホイールを回転する操作、マウスでアルゴリズムプレビュー領域R4内の所望のフィルタに対応するプレビュー画像をクリックする操作等によりフィルタの種類を選択できるように構成するとよい。これらの直感的な操作に加え、リストボックス等によりフィルタ種類の選択を受け付けられるようにしてもよい。
パラメータプレビュー領域R5は、ターゲット画像表示領域R3の上側に設けられた領域である。パラメータプレビュー領域R5には、その時点で選択されているアルゴリズムのフィルタにおいて特性パラメータを異ならせた複数のプレビュー画像が、横に並べて表示される。複数のプレビュー画像のうち、その時点で設定されている特性パラメータに対応するものは、太枠で囲む等により識別可能とされる。プレビュー画像は、設定可能な最小値から最大値までを所定のステップに分割した特性パラメータの値で生成し、特性パラメータの値の昇順又は降順に並べて表示するとよい。図5の例では、選択されている二値化のフィルタにおいて、二値化の閾値を異ならせた場合のプレビュー画像が表示されている。
フレキシブルイメージフィルタユニットの設定画面において、特性パラメータを設定する操作は、パラメータプレビュー領域R5の表示と対応した操作とするとよい。すなわち、キーボードで「右」又は「左」キーを押下する操作、マウスでパラメータプレビュー領域R5内の所望の特性パラメータに対応するプレビュー画像をクリックする操作、マウスホイールを左右にスイッチする操作、特定のキー(例えば、ShiftキーやCtrlキー)を押しながらマウスの左右ボタンをクリックする操作等により特性パラメータを設定できるように構成するとよい。これらの直感的な操作に加え、特性パラメータの値を入力する入力エリアを設けて直接入力を受け付けられるようにしてもよい。
フレキシブルイメージフィルタユニットは、ユニットを追加した段階では具体的な画像処理アルゴリズムは決定されていない。フレキシブルイメージフィルタユニットを含むユニットボード(プログラム)を試験的に実行しつつ、アルゴリズムの選択と各アルゴリズムの閾値の設定を2次元的に俯瞰して行うことで、試行錯誤の時間を節約して素早く適切なフィルタ条件を設定することができる。
以上で説明した、フレキシブルイメージフィルタユニットでは、アルゴリズムプレビュー領域R4に表示される縦方向の一覧で各アルゴリズムの処理結果を確認しながら切り替えることができる。また、選択中のアルゴリズムの閾値毎の処理結果をパラメータプレビュー領域R5に表示される横方向の一覧でパラメータ変更の影響を俯瞰的に確認しながら、パラメータを変更することができる。その結果、従来の手法ではひとつひとつ設定と確認に時間のかかっていたフィルタ選択や特性パラメータ設定の試行錯誤を、設定変更の影響を確認しながら設定画面内で効率的に直感的な操作で行うことができる。
[本実施の形態の動作]
続いて、上記のように構成されるプログラミング装置10を用いたプログラミングの典型的な流れを説明する。
プログラミング装置10においてプログラム14Pを起動すると、図6に示すように編集画面が表示される。この起動直後の編集画面では、ユニットボード編集領域R2は空欄となっている。
続いて、ユニット追加ボタンB4をクリックして追加モードとすると、図7に示すようにユニット選択画面が表示される。このユニット選択画面では、ユニットテンプレート情報14Aに登録されている各種のユニットのうちいずれかを選択する。各ユニットは、ユニット種別により分類されている(データ構造におけるユニット種別)。そこで、ユニット選択画面では、リストメニューL1から所望のユニット種別を選択し、さらにユニット表示領域R6に一覧表示される当該ユニット種別に属するユニットの中からいずれかを選ぶことにより、追加するユニットを特定する。ここでは、入力(Input)の種別に属するUSBカメラのユニットを選択したものとする。また、ユニット選択画面では、ユニット名称をテキストボックスT3で適宜編集することで設定する。ここではユニット名称として「USB Camera (UVC Universal Video Class)_4」という名称が設定されたものとする。
ユニットの選択及びユニット名の設定が済んだ後、OKボタンをクリックすると、ユニット選択画面が消え、ユニット設定画面が表示される。このユニット設定画面は、ユニットのデータ構造において説明したように、ユニット固有の設定画面である。ここで追加しようとしているUSBカメラのユニット設定画面の例を図8(a)に示す。この設定画面では、カメラ番号を設定する。図8(b)は、ユニット設定画面の他の例であり、画像サイズを変更するリサイズユニットのユニット設定画面を示している。これらのような追加しようとするユニットの固有のユニット設定画面に対して所望の設定を行った後、OKボタンをクリックするとユニット設定画面の標示が消え、入力待ちの状態となる。そこで、ユニットボード編集領域R2内におけるユニットのアイコンを配置したい位置をクリックすると、当該クリックした位置に、図9に示すようにユニット選択画面で選択したユニットのアイコンU1が追加されるとともに、追加モードが終了となる。アイコンU1の脇にはチェックボックスCB2の設定に応じてデバッグビューDV1が表示される。同様の操作を繰り返して、必要な数・種類のユニットをユニットボード編集領域R2に追加する。
ユニット編集ボタンB5を押して編集モードにすれば、一旦追加したユニットについて、ユニットのアイコンをクリックすることでユニット設定画面を立ち上げ、ユニットの各種パラメータ等を変更することができる。また、ユニット削除ボタンB8を用いたユニットの削除、ユニット複製ボタンB9を用いたユニットの複製等も行うことができる。
ユニットボード編集領域R2で編集したユニットボード(ユニットの接続により定義されるプログラム)は、保存ボタンB1をクリックすることにより表示される画面にて、ユニットボード名、保存場所を指定することに保存しておくことができる。また、読込ボタンB2をクリックすることにより表示される画面にて、過去に作成したユニットボードを選択し、当該選択したユニットボードを読み込んでユニットボード編集領域R2に表示させることもできる。
図10は、USBカメラ、二値化、及びBLOB検出の3つのユニット(U1〜U3)を追加した状態の画面例を示している。図10の状態では、各ユニットは連結されておらず、入出力データの受け渡しが行われない状態である。そこで、ユニット連結ボタンB6をクリックして連結モードとし、ユニット間の接続を設定する。連結モードが開始されると、まず連結元のユニットの選択を受け付ける状態となる。所望のユニットの出力のジョイント図形をクリックするとそのユニットが連結元として特定される。続いて連結先のユニットのアイコンの入力のジョイント図形をクリックすると、2つのユニットが連結されるとともに、連結モードは終了となる。以上の一連の操作により、1組のユニットを連結することができる。
図11は、ユニットボード編集領域R2に追加した3つのユニット(U1〜U3)を、USBカメラ、二値化、BLOB検出の順に接続した状態を示している。この状態でユニット実行ボタンB10をクリックすると実行モードとなり、プログラムが実行される。すなわち、USBカメラでの撮像が開始され、撮像した画像に対するグレースケール変換、及びリサイズが行われる。実行モードにおいてデバッグビューDVが有効にされていると、図12に示すように、各ユニット(U1〜U3)に対応するデバッグビュー(DV1〜DV3)に各ユニットでの出力がリアルタイムで表示される。実行モードは、ユニット停止ボタンB12がクリックされるまで継続される。
プログラミング装置10では、実行モードが継続中に各ユニットの設定値を調整することが許容される。すなわち、実行モード中にもユニット編集ボタンB5は有効とされ、これをクリックした後、設定値を調整したいユニットをクリックすると、当該ユニットの設定画面が表示される。表示された設定画面で設定値を変更すると、変更がリアルタイムでデバッグビューに反映される。例えば図13に示した例では、デバッグビュー(DV1〜DV3)で各段階の画像をリアルタイムで確認しながら二値化のユニットの設定画面で設定値(閾値)を調整し、画像中の検出対象物が白い塊として画像に現れるよう調整している。このような構成により、ユーザは様々なアルゴリズムの積み重ねの集大成である画像処理プログラムにおける個々レイヤー(ユニット)の調整を、その影響をリアルタイムで確認しながら効率的に行うことができる。
図14は、プログラミング装置10を用いてプログラミングしたユニットボードの他の例を示している。具体的には、図14は、複数の入力を有するユニットや複数の出力を有するユニットを用いて、より複雑な処理を実現したユニットボードを示している。
すなわち、図14に示したユニットボードは、入力ユニットとしてUSBカメラのユニットU4と静止画のユニットU5を備え、減算ユニットU6によりUSBカメラで撮影した画像から静止画を減算することにより背景を除いた着目被写体の画像を抽出する処理を実現している。なお、減算ユニットは、2つの入力(A入力とB入力)を有し、A入力に入力される画像からB入力に入力される画像を減算してえられる画像を出力するユニットである。
ユニットボード編集領域R2にユニット追加し連結する手法は図10を参照して説明した手法と同様である。ユニットを連結する際に、減算ユニットのいずれの入力に連結するかは、ジョイント図形JA及びJBのいずれをクリックするかにより設定される。
図14に示した例のように、前段に他のユニットが接続されないユニットが複数ある場合、これらの複数のユニットから処理が開始されるものとしてプログラムが実現される。このような処理の開始点となるユニットとして、前段に他のユニットが接続されないユニットが自動的に設定されるように構成してもよいし、開始点となるユニットをユーザが明示的に設定するように構成してもよい。開始点となるユニットをユーザが明示的に設定するように構成する場合、編集画面に開始点となるユニットを設定するためのインタフェースを設けるとともに、ユニットのデータ構造には、図2に示した項目に加え、開始点であることを示す情報を含めるとよい。
図15は、プログラミング装置10を用いてプログラミングしたユニットボードのさらに他の例を示している。図15(a)および(b)は、それぞれディープラーニングの学習済みデータによる推論のユニットにおけるデバッグビューDVの表示例を示している。
図15(a)に示した例では、ディープラーニングの学習済みデータによる推論のユニットであるユニットU8が、ユニットU7から与えられる検査用画像(本例では正常と異常の形成品が混在した餃子の静止画)を入力画像として、外観検査用にクラス分類する。ユニットU8のデバッグビューDV8には、順位と推定確率を表示に基づく推論によりクラス分類して、順位(該当する可能性の高い順にクラスを順位付けした数値)や各クラスの推定確率(該当する可能性)がリスト表示される。このようなデバッグビューの表示によれば、ユーザはディープラーニングの推論の結果を、最も該当可能性が高いクラスだけでなく、該当可能性が低い(順位が下位の)クラスも含め、その該当可能性を確認しながらアルゴリズムを構成する各ユニットの調整を行うことができる。更に、その推論結果は後段のユニットに連結することによって、さらなる画像処理や判定結果の利用が可能となる。
図15(b)に示した例では、ディープラーニングの学習済みデータによる推論のユニットU10が、ユニットU9から与えられる餃子の静止画を入力画像として、ニューラルネットワークが特徴としてとらえている箇所を示すヒートマップをデバッグビューDV10に表示する。このヒートマップは、入力される画像に重畳して、半透過表示される。なお、図面はモノクロとなっているが、実際にはカラーで特徴量の増減を表現するとよい。具体的には、特徴のある箇所が特徴量に応じてカラーで青から赤方向にグラデーション状に表示されるとよい。このようなデバッグビューの表示によれば、ユーザはディープラーニングの推論において特徴(本例では開いた餃子の皮と、はみ出した肉の不良品としての特徴)として捉えられている箇所を視覚的に確認することができ、ディープラーニングの学習が目的通りに達成したかをリアルタイムに素早く確認し、アルゴリズムを構成する各ユニットの調整を行うことができる。また、ヒートマップの表示結果で学習がうまくいっていないと判断できる場合は、デバッグビューの結果をもとに速やかに再学習を行うことができる。
このように、プログラミング装置10によれば、画像の加算や減算といった複数の入力を伴う処理や、条件分岐、分離といった複数の出力を伴う処理を含む複雑なプログラムを、ユニットを配置して連結するというグラフィカルなプログラミング手法により、容易に作成することが可能となる。
以上で説明したようにプログラミング装置10によれば、ユニットボード編集領域R2に配置された各ユニットについて、デバッグビューにて出力を一目で、且つ、リアルタイムで確認することができる。このため、プログラムの妥当性の確認や、変数調整の試行錯誤を効率的に行うことができる。
[実施の形態の拡張]
以上、実施形態を参照して本発明を説明したが、本発明は上記実施形態に限定されるものではない。本発明の構成や詳細には、本発明のスコープ内で当業者が理解しうる様々な変更をすることができる。