(57)【要約】【課題】コンピュータにより自動的に実行して画像処理アプリケーションを開発するための方法を提供する。【解決手段】本方法は、コンピュータは複数の画像処理コンポーネント１―１０およびコネクタ手段１１を含み、コネクタ手段は選択されたコンポーネントを自動接続するための特別セットのメソッドおよびデータ構造であって、動作されるときに１つのインスタンスを生成するクラスとして実現される。このコンピュータは、複数の画像処理コンポーネントを受信するステップと、ユーザによって複数のコンポーネントから選択されたコンポーネント間の接続を確立するため、該選択されたコンポーネントを受信するステップと、前記コネクタ手段を動作して、前記選択されたコンポーネント間を接続する定義を要求されることなく、前記選択されたコンポーネントを互いに自動的に接続して、前記画像処理アプリケーションを生成するステップと、を含む。【選択図】図１
2011165208.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータにより自動的に実行して画像処理アプリケーションを開発するための方法であって、前記コンピュータは複数の画像処理コンポーネント（１ないし１０）およびコネクタ手段（１１）を含み、前記コネクタ手段は選択されたコンポーネントを自動接続するための特別セットのメソッドおよびデータ構造であって、動作されるときに１つのインスタンスを生成するクラスとして実現され、前記コンピュータは、
（ａ）複数の画像処理コンポーネント（１ないし１０）を受信するステップと、
（ｂ）ユーザによって複数のコンポーネントから選択されたコンポーネント間の接続を確立するため、該選択されたコンポーネントを受信するステップと、
（ｃ）前記コネクタ手段（１１）を動作して、前記選択されたコンポーネント間を接続する定義を要求されることなく、前記選択されたコンポーネントを互いに自動的に接続して、前記画像処理アプリケーションを生成するステップと、
を含む、方法。
【請求項２】
ステップ（ｂ）とステップ（ｃ）の間に、前記コンピュータは前記選択されたコンポーネントを前記コネクタ手段（１１）に自動的に接続するステップをさらに含む、請求項１に記載の方法。
【請求項３】
ステップ（ｃ）において、前記選択されたコンポーネントの前記自動接続が、前記それぞれのコンポーネントによって提供される情報に基づく、請求項１または２に記載の方法。
【請求項４】
前記コネクタ手段（１１）は、初めて活動化されたときに自らのデータ構造を初期化する、請求項１、２、または３に記載の方法。
【請求項５】
前記コネクタ手段（１１）は、前記選択されたコンポーネント（１ないし１０）を登録する、請求項１ないし４のいずれかに記載の方法。
【請求項６】
前記選択されたコンポーネントは、前記コネクタ手段（１１）により、各選択されたコンポーネントが他の選択されたコンポーネントに接続可能であるか否かに応じた少なくとも２つのグループにおいて登録される、請求項５に記載の方法。
【請求項７】
各選択されたコンポーネントは、前記コネクタ手段（１１）に対する参照またはポインタ、および／または自らの記述を前記コネクタ手段（１１）に渡す、請求項１ないし６のいずれかに記載の方法。
【請求項８】
前記コンピュータは、第１の選択されたコンポーネントは、入力コンポーネントである場合、初期コンポーネントとして使用し、入力コンポーネントではない場合、非接続コンポーネントのリストに追加する、請求項１ないし７のいずれかに記載の方法。
【請求項９】
１組の評価規則に従って先行の選択されたコンポーネントの利用可能なパラメータにおいて各後続のコンポーネントを検査し、接続が前記評価規則を満たす場合、前記各後続のコンポーネントを候補接続リストに追加するステップと、
前記選択されたコンポーネントの入力パラメータおよび出力パラメータのデータ・タイプを検査するステップと、
前記画像処理アプリケーションとの接続の整合性を検査するステップと、
前記コンポーネントを前記画像処理アプリケーションに追加するステップと、
前記選択された接続を確立するステップと、
を前記コネクタ手段はさらに含む、請求項８に記載の方法。
【請求項１０】
前記評価規則は、整合性を判定し、アプリケーション実行中にデッドロックを回避するグラフ分析を含む、請求項９に記載の方法。
【請求項１１】
前記評価規則は、コンポーネントのカテゴリ、局所性、選択の順序、アプリケーション・エリア、ユーザ、および接続を確立するためのユーザ・プロファイルを利用する、請求項９または１０に記載の方法。
【請求項１２】
前記コネクタ手段（１１）は、現在のコンポーネントおよび前記現在のコンポーネントの接続に関する情報をアンロードされる前に保管する、請求項１ないし１１に記載の方法。
【請求項１３】
前記情報は、前記画像処理アプリケーションを再び活動化する際に再ロード可能である、請求項１２に記載の方法。
【請求項１４】
少なくとも１つのコンポーネント（１ないし１０）は、自らの挙動を指定する記述を含み、前記記述が、入力パラメータおよび出力パラメータの数、入力パラメータのタイプおよび出力パラメータのタイプ、カテゴリ、名前、説明、表明、および制約を含むグループから選択された情報を含む、請求項１ないし１３のいずれかに記載の方法。
【請求項１５】
前記選択されたコンポーネントは、設計モードにおいて同時に実行可能である、請求項１ないし１４のいずれかに記載の方法。
【請求項１６】
システム・ステータスは、設計モードおよび／またはユーザ・モードにおいて記憶可能かつ再ロード可能であり、設計モードにおいて記憶されたものはすべて、ユーザ・モードで再ロード可能であり、逆もまた同様である、請求項１ないし１５のいずれかに記載の方法。
【請求項１７】
前記画像処理アプリケーションのデータ構造が、自動的に生成され、管理される、請求項１ないし１６のいずれかに記載の方法。
【請求項１８】
データは、双方向にコンポーネント間で受渡しが行われる、請求項１ないし１７のいずれかに記載の方法。
【請求項１９】
コンポーネントは、自らに直接に非接続コンポーネントにデータを送る、請求項１ないし１８のいずれかに記載の方法。
【請求項２０】
少なくとも１つのコンポーネントは、複数のユーザ・インターフェースを有する、請求項１ないし１９のいずれかに記載の方法。
【請求項２１】
前記コンピュータは、
データの受渡しを行うために前記選択されたコンポーネント（１ないし１０）を接続するステップと、
実行メソッドを構成するステップと、
情報の受渡しを行うためにすべての選択されたコンポーネント間で広域通信を確立するステップと、
処理されるデータを決定するステップと、をさらに含む、請求項１ないし２０のいずれかに記載の方法。
【請求項２２】
請求項１ないし２１に記載の画像処理アプリケーションを開発するための方法を実行するためのプログラムを記憶したコンピュータ読取可能記録媒体。
【請求項２３】
請求項１ないし２１に記載の画像処理アプリケーションを開発するための方法を実行するためのシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像処理アプリケーションを開発するための方法およびシステム、ならびにそのような方法を行うためのコンピュータ読取可能プログラム製品に関する。
【背景技術】
【０００２】
画像処理アプリケーションの開発に関する標準の手法、およびそれに関する基本的情報は、例えば、「ビジュアルベイシック６．０  プログラマーのガイド（Ｖｉｓｕａｌ  Ｂａｓｉｃ  ６．０  Ｐｒｏｇｒａｍｍｅｒ’ｓ  Ｇｕｉｄｅ）」、マイクロソフト出版（Ｍｉｃｒｏｓｏｆｔ  Ｐｒｅｓｓ）、およびマシン・ビジョン・システムにおいて使用するためのアプリケーション・ソフトウェアを迅速に開発するための方法およびシステムを説明するＵＳ−Ａ−５  ７４２  ５０４で見ることができる。
【０００３】
以下の特徴が、当技術分野で周知の標準の手法に共通である。周知のシステムは、特定の下位問題（例えば、画像取り込みまたはｂｌｏｂ分析）を解決するコンポーネント（例えば、ＡｃｔｉｖｅＸ）を使用し、そのコンポーネントを組み合わせてアプリケーション（設計モード）を構築する。さらに、コンポーネントおよびそのグラフィカル・ユーザ・インターフェース（設計モード）を適応させることが、周知のシステムに共通である。コンポーネントの状態、すなわち、設計モードにおいて変更された事柄。
【０００４】
ただし、以下の限界が、これら従来技術のシステムに関連している。従来技術のシステムの各コンポーネントは、せいぜい１つのグラフィカル・ユーザ・インターフェースを有しているだけである。さらに、周知のシステムでは、設計モードおよびユーザ・モードという２つのモードが区別される。設計モードでは、コンポーネントが選択され、プログラムが書かれ、機能の状態が変更される。ユーザ・モードは、最終アプリケーション（実行可能）に対応する。設計モードの状態およびユーザ・モードの状態は、保管することが可能である。ただし、これは、２つの独立した両立不可能な機構で行われる。このことは、例えば、ユーザ・モードにおいて行われた変更に設計モードでアクセスできないことを意味する。さらに、設計モードの状態は、アプリケーションにコンパイルされるためアプリケーションが生成された後は変更することができない。さらに、設計モードでは、１つのコンポーネントを実行することができるだけである。最後に、周知のシステムでは、事前定義されたデータ構造だけが使用される。
【０００５】
オブジェクト・コンポーネントに基づく既存のシステムの抱える通常の問題は、プログラミングの必要性である。ユーザは、選択されたコンポーネントを接続するのに、制御フローを特定するのに、また画像および関心領域などのデータ・ソースを処理コンポーネントに接続するのにコードを追加しなければならない。このコンテキストでは、ＵＳ−Ａ−５  ７４２  ５０４が参照される。しかし、主な目標が画像処理アプリケーションを開発することである多くのユーザは、必要なプログラミング・タスクを容易に、迅速に、またプログラミングの誤りなしに達成するのに十分なプログラミング知識を有していない。
【発明の概要】
【発明を解決しようとする課題】
【０００６】
本発明の目的は、アプリケーション開発のタスクを容易にすることである。この目的は、特許請求の範囲の特徴で解決される。
プログラミングの必要性、コンポーネント関係の指定、実行の順序の指定、およびユーザがプログラム・ステータスを記憶させる必要性が除去されることが本発明の利点である。本発明によれば、これらすべてのタスクは、ユーザが行わなければならない追加のタスクが全くなしに、自動的に決定される。本発明は、ユーザが選択することができるコンポーネントに基づく。コンポーネントは、オブジェクト指向プログラミングの用語法ではオブジェクトである。コンポーネントの選択は、アプリケーションの要件に応じて行われる、すなわち、ユーザは、その要件を満たすようなサブタスクを選択する。本発明によれば、この選択によってトリガされ、コンポーネントがアプリケーションを自動的に生成する。ユーザは、グラフィカル・ユーザ・インターフェースの外観およびフィールを構成し、画像処理パラメータを指定するだけでよい。これにより、アプリケーション開発からプログラミングが完全に除かれる。さらに、アプリケーションを開発するのに必要な時間が、大幅に短縮される。
【課題を解決するための手段】
【０００７】
請求項１に記載の本発明によれば、選択されたコンポーネントを互いに自動的に変換するためのコネクタ手段が提供される。請求項２に記載の好ましい実施形態によれば、前記選択されたコンポーネントは、先行するステップで、前記コネクタ手段にやはり自動的に接続される。請求項１５、１６、ならびに請求項１８ないし２０の好ましい実施形態は、請求項２の実施形態に限定されないことに留意されたい。
【０００８】
本発明の好ましい実施形態によれば、コンポーネントの自動接続のためのコネクタ手段が提供される。コンポーネントがアプリケーションに追加される、またはアプリケーションから取り除かれるときはいつでも、コネクタ手段が呼び出される。コンポーネントをアプリケーションに追加する場合、コンポーネントは登録され、これによりコンポーネントがアプリケーションに知られ、アプリケーションにとってアクセス可能になる。すなわち、コンポーネントが、アプリケーションの一部になる。コンポーネントをアプリケーションから取り除くことにより、コンポーネントは、登録解除され、もはや使用できなくなる。コンポーネントの追加は、ユーザが、例えば、コンポーネントのアイコンをダブルクリックし、これによってコンポーネントを「フォーム」上に置くことによって行うことができる。また、コンポーネントの追加は、他のコンポーネントが生成動作を呼び出すことによって内部で呼び出すことも可能である。コンポーネントを取り除くことも同様に、ユーザが、フォームからコンポーネントを削除することにより、または他のコンポーネントが、コンポーネントの削除動作を呼び出すことによって行うことができる。
【０００９】
接続の生成は、特別セットのメソッドおよびデータ構造によって実現される。以下では、このセットのデータを対応するメソッドとともにコネクタと呼ぶ。コネクタは、例えば、使用されるときに１つのインスタンスを生成するクラスとして実現することができる。各コンポーネントは、コネクタにアクセスできる。これは、コネクタを各コンポーネントにリンクする（コンパイラの用語法の意味で）ことによって実施することができる。コネクタが初回に活動化されたとき、特定のセッション中、コネクタは、自らのデータ構造を初期化し、利用可能な場合、追加の情報を接続プロセスのためにロードする。特定のセッション中には、コネクタをさらに活動化しても、データ構造を再び初期化することはなく、データ構造のステータスを拡張または変更する。コネクタは、すべての登録されたコンポーネントに対する参照を保持する。これに加え、コネクタは、コンポーネント間のすべての接続、ならびにこのことから導出されたすべての情報（実行、通信、ロード／保管機構等のための）を保持する。
【００１０】
コネクタは、登録されたコンポーネントを、他のコンポーネントに正しく接続することができるコンポーネント、および接続することができないコンポーネントという２つのグループに分割する。コンポーネントを接続できないケースは、例えば、ユーザが、意味のあるアプリケーションに必要とされるコンポーネントの一部だけを選択した場合に生じる。この一例は、ユーザが、画像処理コンポーネントを選択したが、画像データを提供するコンポーネントを全く選択しなかった場合である。コンポーネントを選択する順序に対する制限は全く存在しないため、新しいアプリケーションをセットアップしているとき、このケースがしばしば生じる。
【００１１】
設計モードまたはユーザ・モードが終了した後、コネクタは、アンロードされる。コネクタをアンロードする前に、コネクタは、現在のコンポーネントおよびその接続に関する情報を保管することができる。この情報は、次回に設計モードまたはユーザ・モードでアプリケーションが呼び出されるとき、使用することができる。
【００１２】
次に、画像処理アプリケーションに対するコンポーネントの追加を説明する。ユーザが、例えば、コンポーネントのアイコンをダブルクリックすることによってコンポーネントをアプリケーションに追加したとき、コンポーネントの初期化メソッドが実行される。この初期化中、コネクタの登録メソッドが呼び出される。このメソッドを呼び出すことにより、コンポーネントおよび／またはコンポーネントの記述に対する参照またはポインタが、コネクタに渡される。この情報に基づき、接続プロセスが行われる。
【００１３】
コンポーネントを登録する際、２つのケースを区別しなければならない。新しいコンポーネントをアプリケーションのコンポーネントに接続することが可能である場合、必要な接続が構成され、そのコンポーネントは、アプリケーションの一部となる。新しいコンポーネントの組込みは、それまでに確立されている接続の再構成を必要とする可能性がある。新しいコンポーネントの組込みの後、まだ非接続コンポーネントのリストが改訂される。このことは、このリストの各コンポーネントに対して、登録プロセスが新たに実行される（コンポーネントをそれでも接続することができない場合、そのコンポーネントは、再びリストには追加されないことを例外として）ことを意味する。あるコンポーネントを他のコンポーネントに接続することができない場合、そのコンポーネントは、（まだ）非接続コンポーネントのリストに入れられる。
【００１４】
コンポーネントを接続することは、コンポーネントが、（ｉ）先行のコンポーネントに対する、すなわち、入力データを提供するコンポーネントに対する参照、ポインタ、または同様の機構と、（ｉｉ）後続のコンポーネントに対する、すなわち、さらなる処理のために出力データを受け入れるコンポーネントに対する参照、ポインタ、または同様の機構と、（ｉｉｉ）結果を表示することができるビューアに対する参照、ポインタ、または同様の機構と、（ｉｖ）コンポーネントを制御するコンポーネントに対する参照、ポインタ、または同様の機構と、（ｖ）すべてのコンポーネントにアクセスするスケジューラに対する参照、ポインタ、または同様の機構とを有するのが可能であることを含むが、以上には限定されない。
【００１５】
本発明によれば、コンポーネントがアプリケーションに追加され、接続が確立された後、システムが設計モードにあっても、そのコンポーネントを即時に実行することができる。これが可能であるのは、各コンポーネントが、コネクタを介して、または直接に任意の他のコンポーネントを呼び出すことができるからである。これにより、プログラミング環境によってサポートされるコールバックが存在しない場合でも、アプリケーション全体を実行することができ、また一度に１つのコンポーネントのインターフェースだけがアクティブであるだけでよい（例えば、マイクロソフト・ビジュアルベイシック（Ｍｉｃｒｏｓｏｆｔ  Ｖｉｓｕａｌ  Ｂａｓｉｃ）におけるのと同様に）。
【００１６】
どの時点でも、コネクタは、それまでのアプリケーションの整合性に関してユーザに知らせることができる。この例は、例えば、コンポーネントを接続できなかったこと、または重要なコンポーネントが欠如していることである。
【００１７】
次に、どのようにコンポーネントが接続されるかを説明する。
コンポーネントを接続することの問題は、様々なメソッドを使用することによって解決することができ、メソッドのいくつかは、最適化、インフォームド・サーチ、およびヒューリスティック・サーチに基づく。本発明の好ましい実施形態で使用するアルゴリズムは、明確な接続を割り当てることができるまで、曖昧さを段階的に除去することである。アルゴリズムは、コンポーネントの提案されたカテゴリに基づくが、それには限定されない。以下で説明するアルゴリズムは、特定のアプリケーションに関する前の情報が全く利用可能ではない、すなわち、ユーザが、新しいアプリケーションを生成するものと想定している。
【００１８】
ユーザによって選択されたコンポーネントが、最初に登録されるコンポーネントである場合、またはそれまでにアプリケーションの部分を構成するコンポーネントが全く存在しない場合、そのコンポーネントは、データ・ソース（入力コンポーネント）であるか否かが試験される。入力コンポーネントである場合、そのコンポーネントは、それまでに接続を全く有していないアプリケーションの最初の部分として使用される。入力コンポーネントではない場合、そのコンポーネントは、非接続コンポーネントのリストに入れられる。ただし、アプリケーションの中に既にコンポーネントが存在する場合、以下のメソッドが実行される。
【００１９】
第１のステップで、その他のコンポーネントに接続されなければならない選択されたコンポーネントの各入力パラメータおよび各出力パラメータが、１組の評価規則に従ってアプリケーションのコンポーネントのすべての利用可能なパラメータで検査される。接続が規則を満たす場合、その接続は、候補接続リストに追加される。さらなる規則を使用することにより、曖昧でない決定を行うことができるまで、またはプロセスが停止するまで、可能な接続の量が減らされる。候補接続リストの中に、既に接続されたコンポーネントのパラメータが含められる。この理由は、その新しいコンポーネントを、例えば、一続きの既に接続されたコンポーネントに挿入することができるからである。この例が、数値データを計算するｂｌｏｂ分析であり、ｂｌｏｂ分析は、このデータをシリアル・インターフェースに書き込む出力コンポーネントに接続される。データ視覚化コンポーネントが、アプリケーションに追加される場合、このコンポーネントは、ｂｌｏｂ分析と出力コンポーネントの間に配置することができる。さらに、入力パラメータおよび出力パラメータは、複数回、使用できることに留意しなければならない。例えば、フレームグラッバは、画像処理のために画像を複数のコンポーネントに渡すことができる。これに加え、多くのコンポーネントを、例えば、データを表示するため、ビューアに接続することができる。
【００２０】
接続を選択する第１の規則は、コンポーネントのカテゴリを使用する。どのカテゴリを接続することができるかを記述する一般的規則に基づき、初期候補接続リストが決定される。このコンテキストで使用される規則は、例えば、ビューアが入力コンポーネントに接続されること、または画像検査コンポーネントがビューアに接続されることである。これらの全体的規則は、コネクタにだけ利用可能であり、通常、コンポーネントによって提供されない。これらの規則は、コンポーネントおよびアプリケーションに関する一般的知識を表す。規則は、コネクタが呼び出されたときロードすることができ、ランタイム中に変更することが可能であり、また、例えば、適用の分野（例えば、産業または医療）に応じて、またはユーザに応じて適合させることが可能である。
【００２１】
次のステップで、入力パラメータおよび出力パラメータのデータ・タイプが検査される。所与のタイプ規則を満たさないすべての接続候補が、リストから除去される。これらの規則の例は、より弱いタイプをより強いタイプ（例えば、整数を浮動小数点値に渡すことができる）に接続できること、または同等のタイプを接続できることである。
【００２２】
次のステップで、アプリケーションとの接続の整合性が検査される。これには、実行の整合性、データの整合性、および情報フローの整合性が含まれる。これは、無限ループまたはブロッキングにつながる可能性があるサイクルに関して検査する全体的なグラフ分析である。このため、各接続が有向アークとして扱われ、またコンポーネントは、対応するグラフのノードとして扱われる。各コンポーネントの入力／出力を使用して、標準のグラフ分析アルゴリズム（例えば、Ｐｅｔｒｉ  Ｎｅｔｓの分析のために使用される）に基づき、分析が行われる。整合性のあるアプリケーションを生成しない各接続は、除去される。このステップは、サイクルのような問題のないアプリケーションが生成されることを保証する。これは、ユーザがコンポーネントをプログラミング・ステートメントで接続しなければならない標準の手法では保証することができない。
【００２３】
特別なケースが、別のコンポーネントの特定のグラフィカル・ユーザ・インターフェースを実現するコンポーネントである。これらのコンポーネントは、自らのユーザ（すなわち、自らが属するコンポーネント）および自らの識別で自らを曖昧なく明らかにする。
【００２４】
曖昧でないセットの接続が残った場合、そのコンポーネントは、アプリケーションに追加され、選択された接続が確立される。曖昧さがある場合、さらなる規則が適用されて曖昧さが除去される。規則は、組み合わせて、または独立して使用することができる。規則の例は、以下のとおりである。（ｉ）局所性：ユーザがデスクトップ上にコンポーネントを配置した位置の距離であり、より近いコンポーネントが、より高い確率で接続されることになる、（ｉｉ）選択の順序：引き続いて選択されたコンポーネントが、より高い確率で接続されることになる、（ｉｉｉ）アプリケーション・エリア：接続される確率は、アプリケーション・エリアに基づく、（ｉｖ）ユーザ：どの接続が好ましいか、システムがユーザに尋ねる、（ｖ）ユーザ・プロファイル：前のセッションでユーザが行った決定に関する情報をシステムが使用する（学習）。
【００２５】
曖昧さが残る場合、そのコンポーネントは、非接続コンポーネントのリストに追加される。
また、コンポーネントをアプリケーションから除去することもできる。これは、例えば、ユーザが、コンポーネントを削除することによって行うことができる。この場合、このコンポーネントに対するすべての接続およびこのコンポーネントからのすべての接続が除去される。この後、残りのコンポーネントを再構成しなければならない可能性がある。この場合、除去されたコンポーネントが、他のコンポーネントに対する入力を提供していた場合、可能であれば、それらのコンポーネントの再接続がなされる。
【００２６】
ユーザがアプリケーションを開発し、コンポーネントが接続された後、その接続に関する情報をコネクタが記憶することができる。この情報は、好ましくは、アプリケーションが、設計モードまたはユーザ・モードで再び活動化されるとき、再ロードすることができる。これにより、アプリケーションが変更された場合でも、曖昧さを最小限に抑えることができる。このことから、構成に関する一般的規則が、システムによって自動的に学習されることが可能である。これは、人工知能から知られる学習メソッドを使用して行うことができる。
【００２７】
以上のことから、周知のシステムの次の限界が本発明に従って取り除かれる。コンポーネントが、プログラミング・ステートメントをアプリケーションに追加することによって結合される。これらのプログラミング・ステートメントは、一方のコンポーネントから他方のコンポーネントにどのようにデータを渡すかに関する情報、ならびにコンポーネントが実行される順序をどのように指定するかに関する情報を含まなければならない。データ、例えば、関心領域を使用するため、ユーザが、プログラミング・ソース・コードによってアプリケーションにデータ・コンポーネントを追加して、そのコンポーネントをその他のコンポーネントに接続しなければならない。
【００２８】
本発明は、以下の要件を満たすオブジェクト指向コンポーネントのアーキテクチャを提供する。
各コンポーネントは、自らの挙動を指定する記述を含む。この記述は、コンポーネントのすべての動作モードにおいてコンポーネントによって処理されることが可能な形式で利用可能である。この記述は、入力パラメータおよび出力パラメータの数、入力パラメータおよび出力パラメータのタイプ、カテゴリ、名前、説明、表明、および制約に関する情報から構成されるが、それらには限定されない。
【００２９】
さらに、ユーザによるコンポーネントの選択が、自動構成プロセスを呼び出す。このプロセスは、他のすべてのコンポーネントに関する情報を有する単一のコンポーネントにより、またはアプリケーションに追加されるコンポーネントによって提供される情報に基づいて任意のコンポーネントによって制御されることが可能である。自動構成は、以下のステップから成る。
【００３０】
（ｉ）コンポーネントの接続：各コンポーネントが、そのコンポーネントの入力データを提供する、またはそのコンポーネントの出力データを必要とする他のコンポーネントに接続される。この接続は、直接（コンポーネント対コンポーネント）または間接（一続きのコンポーネントを介して）であることが可能である。
【００３１】
（ｉｉ）実行メソッドの構成：実行メソッドは、以下ような情報を決定する。
−コンポーネントが実行される順序、
−あるコンポーネントから別のコンポーネントにどのようにデータが渡されるかのメソッド、
−生成されるデータ・タイプ、
−実行中、どのようにデータが蓄積されるかのメソッド、および
−どれだけの期間、データを記憶しなければならないか、またいつデータを削除することができるか。
【００３２】
実行メソッドは、アプリケーションの動作モード、ユーザの対話、およびデータの入力に応じて使用されるサブメソッドを含む。サブメソッドは、例えば、入力データ（例えば、獲得トリガ信号、画像取り込み、または他の入力チャネル）の可用性によって呼び出される。この場合、この入力データを必要とするすべてのコンポーネント、およびこれらのコンポーネントに依存するコンポーネント（すなわち、そのコンポーネントの結果を必要とするコンポーネント）が実行される。さらに、サブメソッドは、入力データ（例えば、画像）とのユーザ対話によって呼び出される。この場合、この種類のユーザ対話に対して反応することが可能なすべてのコンポーネントが、操作されたデータ、ならびに対話の情報（例えば、マウス座標）を伴って実行される。さらなる例は、ユーザによるコンポーネントのパラメータの変更である。この場合、やはり、コンポーネント、ならびにそのコンポーネントに依存するすべてのコンポーネントが実行される。
【００３３】
この他、実行メソッドは、好ましくは、動作モードに応じて自動的に変更される。例えば、構成モードでは、較正コンポーネントが実行され、またアプリケーション・モードでは、入力データの変更に応じてパラメータを適合するコンポーネントが実行される。さらに、コンポーネントを並列に実行することができる。
【００３４】
（ｉｉｉ）すべてのコンポーネント間の広域通信：実行の順序、およびデータを渡すパスを指定するのに必要とされるコンポーネントの接続の他に、情報を渡すコンポーネント間の接続が確立される。この通信により、あるコンポーネントから別のコンポーネントに情報（例えば、コンポーネントの記述またはコンポーネントのステータス）を渡すこと、（例えば、別のコンポーネントを実行している）コンポーネント間でメッセージを送信すること、他のコンポーネントの結果またはステータスを表示すること、および別のコンポーネントのためにグラフィカル・ユーザ・インターフェースとして動作することのようなアクションが可能になる。
【００３５】
（ｉｖ）処理されなければならないデータの決定、すなわち、設計モードおよびユーザ・モードで生じる状態、アプリケーションの特性、およびコンポーネント間の接続。これに基づき、設計モード中およびユーザ・モード中にすべての必要なデータを記憶し、再ロードする自動プロセスが呼び出される。このデータは、ユーザ・インターフェースの外観およびフィール、コンポーネントのパラメータ、または関心領域を含むが、それらには限定されない。
【００３６】
前述した構成プロセスは、次の特性を有する。構成プロセスは、例えば、アプリケーションに追加のコンポーネントを導入することにより、またはアプリケーションのステータスを変更することによって繰り返し実行することができる（再構成）。ステータスの変更は、外部から実行すること（ユーザにより、またはデータの入力により）、またはシステムによって内部で実行することが可能である。さらに、構成と再構成はともに、設計時間中およびプログラム実行中に行うことができる。
【００３７】
以下の有利な特徴が、本発明に関連している。
・プログラミングが全く必要ない。これにより、時間が節約され、それほど技能のないユーザがアプリケーションを開発することが可能になる。
【００３８】
・実行メソッドが自動的に決定される。これにより、時間が節約され、プログラミングの誤りが全く導入されないことが保証される。これに加えて、余計なプログラミングの労力なしに異なる実行メソッドを使用することができる。複数の実行メソッドにより、アプリケーションの使用が非常に直観的になる。この理由は、アプリケーションが、標準の実行メソッドを自動的にサポートするが、ユーザ対話を扱うメソッドに自動的に切り替わることが可能だからである。さらに、システムは、意味のある１組のコンポーネントが選択されているか、すなわち、それらのコンポーネントをアプリケーションに接続することができるかどうか、または重要なコンポーネントが欠如しているかどうかをユーザに知らせることができる。
【００３９】
・本発明のコンポーネントは、処理されるデータを自動的に生成し、管理する。これにより、時間が節約され、すべての必要なデータが利用可能であること、およびプログラミングの誤りが全く導入されないことが保証される。さらに、再プログラミングが全く必要とされないため、使用されるデータ（関心領域のような）の数を変更するのが非常に容易である。
【００４０】
・コンポーネント間のデータの受渡しが、自動的に提供される。これにより、時間が節約され、プログラミングの誤りが全く導入されないことが保証される。
・コンポーネントが、他のコンポーネントのためのグラフィカル・ユーザ・インターフェースとして動作することができる。これにより、必要とされるグラフィカル・ユーザ・インターフェースの部分の容易な生成が可能になる。
【００４１】
・コンポーネントが、複数のグラフィカル・ユーザ・インターフェースを有することが可能である。これにより、グラフィカル・ユーザ・インターフェースをユーザの必要に対して最適に適合させることができるアプリケーションをユーザが開発できるようになり、その延長として、アプリケーションが、グラフィカル・ユーザ・インターフェースを動的に変更して自らを使用の要件に適合させることができる。
【００４２】
・設計モードのステータスおよびユーザ・モードのステータスが、同じ機構で保管される（また再ロードされる）。これにより、状態情報を失うことなく、両モード間で（両方向で）ユーザが切り替えを行うことができるようになる。さらに、状態情報がアプリケーションとは独立に記憶されるため、必要な場合、状態情報を交換することが可能である。
【００４３】
・本発明では、ユーザ・モードは、サブモードに下位分割される。これにより、適切なサブモードに切り替えることによってアプリケーションの挙動を容易に変更できるようになる。通常のモードは、例えば、管理者モード（例えば、アプリケーションのすべての機能に対する完全なアクセス）、構成モード（例えば、測定されなければならない新しいオブジェクトにアプリケーションを適合させるのに必要とされるすべての機能に対するアクセス）、またはアプリケーション・モード（最小限の対話および最小限のフィードバックでアプリケーションを実行する）であることが可能である。これにより、アプリケーションが、業界の要件にはるかによくかなうようになる。
【００４４】
・本発明では、設計モードにおいてすべてのコンポーネントを同時に実行することができる。これにより、アプリケーションをはるかに容易に試験を行うことが可能になる。これに加え、設計モードとユーザ・モードの間の混乱を招く区別が、ほどんどなくなる。さらに、これにより、より少ない数のウインドウを使用してデータを表示することができるようになる。一回につき１つのだけのコンポーネントを実行することができる場合、例えば、画像を表示し、結果を重ね合わせ、選択されたパラメータが正しいかどうかを検査するのに追加の表示が必要である。本発明では、すべてのコンポーネントに関して１つの表示を使用することができる。これにより、スクリーン上の空間が節約され、はるかに整合性の高いグラフィカル・ユーザ・インターフェースがされる。
【００４５】
・各コンポーネントは、コンポーネントのすべての機能を完全に使用するのに十分な記述を含む。これが、プログラミングの必要なしにコンポーネントを使用するための基礎である。
【００４６】
・各コンポーネントは、アプリケーションの他のすべてのコンポーネントに対して自動的にアクセスを有する。これにより、例えば、アプリケーションの挙動を容易に制御することが可能になる。
【００４７】
・本発明は、生のデータを記述と組み合わせるデータ要素を使用する。これにより、データのはるかに柔軟な使用が可能になる。例えば、データを必要する他のコンポーネントにそのデータを渡すことをその特定のデータ・タイプに関するメソッドを実現することなく実現することができる。
【００４８】
以下において、本発明をさらに詳細に説明する。加えて、提案するシステム・アーキテクチャと併せて使用できる好ましい実施形態を説明する。
実行モード
オブジェクト・コンポーネントに基づく標準のシステムは、設計モードおよびユーザ（実行）モードという２つの動作モードを区別する。設計モードでは、コンポーネントが、ユーザによって選択され、プログラミングされ、構成される。また、設計モードにおいて、（単一の）選択されたコンポーネントを実行することも可能である。ユーザ・モードにおいてだけ、完全なアプリケーションが実行される。本発明は、以下の好ましい改良を提供する。
【００４９】
設計モード中、単独のコンポーネントだけでなく、完全なアプリケーション（すべてのコンポーネント）も実行することができる。これは、構成プロセスに関する即時のフィードバックをユーザに提供し、したがって、開発プロセス中に時間を節約する。標準のユーザ・モードは、複数のサブモードに下位分割される。サブモードに応じて、アプリケーションは、自らの挙動および／またはグラフィカル・ユーザ・インターフェースを変更する。ユーザ・モードの例は、パラメータを適合させることが可能である構成モード、およびアプリケーションの限定された変更だけが許されるアプリケーション・モードである。また、これらのサブモードを使用して、例えば、構成モードにおいて較正コンポーネントを自動的に呼び出す、またはユーザ・レベルに応じてユーザ・インターフェースを適合させることも可能である。
自動保管−ロード機構
コンポーネント・ベースのアプリケーション開発の標準の機構は、設計モードで指定された特性を保管し、特性をもはや同じようには適合させ、保管することができないアプリケーション・コードに、その特性を組み込むことである。システムが、ユーザ・モードで値を保管し、再ロードすることを望む場合、これは、設計モードで使用したのとは異なる機構を使用して実行されなければならない。
【００５０】
本発明によれば、保管−ロード機構は、設計モードとユーザ・モードを区別しない。このことは、次の利点を有する。第１に、両方のモードで、システム・ステータスを記憶し、再ロードすることが可能である。第２に、この機構は、ユーザにはトランスペアレントである、すなわち、ユーザは、現在、アクティブであるモードに関して気を配る必要がない。この機構は、常に同じ仕方で動作する。第３に、設計モードにおいて記憶されたステータスが、ユーザ・モードで利用可能であるだけでなく、その逆でも利用可能である。すなわち、ユーザが、実行中にステータスを変更し、設計モードに戻った場合、そのステータスが、やはり利用可能である。第４に、ステータスがアプリケーションにコンパイルされないため、ステータスを容易に交換することができる。これを利用して、例えば、各ユーザに専用ステータスを提供することができる。
データ構造の自動的扱い
画像または関心領域などのデータ構造を扱う標準の機構は、それらのデータ構造をコンポーネントとして扱うことである。これは、ユーザが、プログラミングを適用してこれらのデータ構造をその他のコンポーネントと接続しなければならないことを意味する。さらに、ユーザが、実行中にいくつのデータ要素が必要とされるかを前もって知っていなければならないか、またはプログラミングが、いっそう複雑になる。本発明の方法では、コンポーネントが、これらのデータ構造を自動的に生成し、管理する。ユーザは、データ構造の数、データ構造の生成、またはデータ構造の破壊に気を配る必要がない。また、必要な場合、前述した機構によってデータを自動的に保管し、再ロードすることも可能である。
コンポーネント間でデータの受渡し動作
コンポーネント間でデータの受渡しを行う標準の機構は、次の制約を有する。データは、単一方向で渡される、すなわち、あるコンポーネントが、別のコンポーネントによって使用されるデータを提供するが、結果は返されない。第２の点は、データ記述およびデータの扱いに関わる。これまでは、事前定義された内容を有するデータ構造が使用されている。これは、これらのデータ構造を扱う際に、限られた柔軟性しか可能にしない。
【００５１】
本発明では、両方向でデータの受渡しを行うことができる。すなわち、呼出し側が、あるコンポーネントに入力データを提供する。これに応答して、コンポーネントは、後続のコンポーネントにデータを送ること、または呼出し元にデータを送り返すことが可能である。また、コンポーネントは、自らに直接に非接続別のコンポーネントにデータを送ることもできる。以上の機構により、例えば、画像および関心領域を表示し、操作するだけでなく、コンポーネントが直接に接続されているか否かとは独立に、（すべての）コンポーネントの結果を重ね合わせることも行うビュー・コンポーネントを構成することができるようになる。
【００５２】
本発明は、生のデータ（画像マトリックスのような）を抽象データ記述と組み合わせるデータ要素を使用する。通常のデータの例は、画像、アフィン変換、ポイント、較正データ、ストリング、座標、特徴、測定値、またはポリゴンである。データには、常に記述が伴う。記述は標準化された仕方で設計され、各コンポーネントが記述を解釈できるようにしている。これらの記述を実現する方法は、資料で見ることができる。記述は、コンポーネントが必要とするデータにアクセスできるようにするのに使用される。これに加え、この記述に基づき、コンポーネントがデータを操作することが可能である。コンポーネント間で受渡しが行われるデータは、（順序付きの）１組のデータ要素であることが可能である。スケジューラのようなコンポーネントが、例えば、利用可能なデータのタイプを検査し、そのデータ・タイプを処理することができるコンポーネント（この情報は、コンポーネントの記述を介してアクセスすることができる）にそのデータ・タイプを渡すことが可能である。また、構成プロセス中にデータ記述を使用して（コネクタを参照）、そのデータ・タイプに関してコンポーネントのどのパラメータが適合するかを検査することも可能である。
【００５３】
さらに、（順序付き）セットのデータの使用が、データを集約する容易なやり方をもたらす。例えば、アフィン変換のような変化検出器によって提供されるデータを関心領域に追加して、その領域の位置、向き、およびサイズを修正することができる。このデータは、コンポーネントがそのデータを必要とするか否かとは独立に、すべてのコンポーネントによって引き渡されることが可能である。各コンポーネントは、そのデータを要求し、利用可能である場合、そのデータにアクセスすることができる。他方、すべてのコンポーネントは、コンポーネントが実現されたときにこの特定のデータが知られていたかどうかとは独立に、このデータを引き渡すことができる。
複数のグラフィカル・ユーザ・インターフェース
コンポーネント・ベースのアプリケーション開発における標準の機構は、コンポーネントが、設計モードにおいて構成することの可能な所与のグラフィカル・ユーザ・インターフェースを有することである。
【００５４】
本発明によれば、コンポーネントは、好ましくは、複数のユーザ・インターフェースを有する。これらのインターフェースは、例えば、ユーザの必要に応じて選択される。このことは、２つの可能性をユーザに提供する。最も単純なケースでは、特定グループのユーザの必要に最も良く適合するインターフェースが選択される。画像処理エキスパートが、例えば、すべてのパラメータに対する完全なアクセスを望む。より複雑な適用例では、複数のグラフィカル・ユーザ・インターフェースを１つのプログラムに組み込まなければならない。経験を積んだユーザが、システム・セットアップ中、画像処理パラメータにアクセスする必要がある。アプリケーションが「日常モード」で実行されているときには、開始および停止のための１つのボタン、およびシステム・ステータスに関する赤の「照明」または緑の「照明」だけがあればよい可能性がある。アプリケーションは、例えば、設計モードにおいて様々なサブモードを活動化することによって生成することができる。モードに応じて、グラフィカル・ユーザ・インターフェースが構成される。ユーザ・モードでは、異なるユーザ・インターフェースの間で切り替えを行うのに、サブモードを活動化するだけでよい。
【図面の簡単な説明】
【００５５】
【図１】本発明の実施形態を示すブロック図である。
【図２】コンポーネント（左下）の活動化後を示す例である。
【図３】ビューアの選択後を示す図２の例である。
【図４】フレームグラッバ・コンポーネントの選択後を示す図３の例である。
【図５】オンライン画像を伴うビューアを示す図４の例である。
【図６】図５に示す例のフォーム上にズーミング・コンポーネントを置いた結果を示す図である。
【図７】ユーザ・モードにおけるアプリケーションを示す図である。
【図８】バーコード・リーダを選択した結果を示す図である。
【図９】ユーザ・モードにおけるアプリケーションを示す図である。
【発明を実施するための形態】
【００５６】
以下では、図面を参照しながら本発明をさらに詳細に説明する。
図１の実施形態は、フレームグラッバ１２およびグラブ・イメージ・コンポーネント１を使用して画像を入力するユニットから成る。この画像は、画像を表示し、関心領域と画像処理コンポーネントの結果を重ね合わせるビューア２に接続されている。これに加え、ビューア２は、データを管理し、他のコンポーネントにデータを引き渡す。較正コンポーネント３、変化検出コンポーネント４、およびズーミング・コンポーネント５が、ビューア２に直接に接続されている。画像処理部分は、２つのシーケンスから成る。第１のシーケンスは、１つのコンポーネントだけから、すなわち、測定コンポーネント６だけから成る。他方のシーケンスは、ｂｌｏｂファインダ７が、特徴抽出コンポーネント８に接続され、コンポーネント８が特徴表示コンポーネント９に接続されている。両方の画像処理部分の結果は、出力コンポーネント１０によって出力される。コネクタ１１が、活動化された様々なコンポーネント間の接続制御を行う。  
【００５７】
この実施形態では、ユーザによって選択されたコンポーネント間で接続を自動的に確立するためのコネクタ１１が提供されている。
データおよびユーザ対話の表示
本発明によるシステムは、３つの主なタスクを有する少なくとも１つの特有なコンポーネント（すなわち、ビューア）を有する。  
【００５８】
第１のタスクは、画像のような入力データを表示すること、および他のコンポーネントの結果を表示することである。これらの結果は、通常、入力データから導出される。新しい画像が取り込まれたときはいつでも、その画像は、ビューア２において表示される。次に、画像は、画像処理コンポーネントに渡される。画像の中で画像処理コンポーネントが抽出するデータ（エッジ、ライン、座標、距離、またはポリゴン）が、ビューア２に戻され、ビューア２は、画像上にこのデータを重ね合わせ、この視覚化は、データのタイプに依存する。この機能の利点は、画像および結果に関して１つの表示だけが必要とされ、スクリーン上の空間が節約されることである。それに加え、対応するデータが一緒に提示されるため、グラフィカル・ユーザ・インターフェースが、より直観的になり、情報をより速やかに認識することができる。
【００５９】
ビューア２の第２のタスクは、他のコンポーネントを制御することである。アプリケーションの中で使用されるその他のコンポーネントの記述に基づき、ビューア２は、全体的制御ユニットとして動作することができる。ビューア２は、コンポーネント名、関心領域のサポートされているタイプ、または処理することができるデータ・タイプのような情報にアクセスする。この情報に基づき、ビューア２は、グラフィカル・ユーザ・インターフェースを自動的に生成することができる。他のコンポーネントの一般的プロパティを制御するのに、ユーザは、このグラフィカル・ユーザ・インターフェースと対話するだけでよい。これらの対話に基づき、ビューア２は、メッセージを対応するコンポーネントに送る。
【００６０】
ビューアの第３のタスクは、関心領域のような追加のデータを他のコンポーネントに提供することである。タイプ情報に基づき、ビューアは、他のコンポーネントが処理することができる入力データの種類について知る。これを使用して、コンポーネントに適合する関心領域を生成する。これらの関心領域は、画像データの上にその関心領域を重ね合わせ、例えば、マウス対話を使用して関心領域を変更または生成することにより、ビューアのグラフィックス・ウインドウの中で操作することができる。コンポーネントが実行されるとき、対応する関心領域が画像と組み合わされ、入力として渡される。
コンポーネントのカテゴリ
タスクおよびコンポーネントの挙動に依存して、コンポーネントは、カテゴリに割り当てられる。したがって、カテゴリは、同様の挙動を有する１組のコンポーネントである。カテゴリは、例えば、アプリケーションのための実行メソッドを生成するため、またはコンポーネントを接続するために使用される。以下に、カテゴリの例および対応するタスクを提示する。
【００６１】
・ビューア：入力データを表示し、そのデータを関心領域および他のコンポーネントの結果と重ね合わせる。
・メタ・コンポーネント：アプリケーションの全体の構造を表示し、制御フローを統計的に表示し、また実行中、使用されるリソースおよび実行時間を表示する。
【００６２】
・入力：シリアル・インターフェースまたはデジタルＩ／Ｏのような他のソースからの画像データおよびデータの入力
・出力：ファイル、シリアルＩ／Ｏ、またはバスのようなデバイスにプロセスの結果を出力する。
【００６３】
・較正：形状較正または放射較正のようなビジョン・システムおよび入力デバイスの較正。
・変化検出：入力データ（照明または基準オブジェクトの位置のような）における変化が検出され、変化情報が、他のコンポーネントに引き渡される。
【００６４】
・検査：これらのコンポーネントは、画像のような入力データから情報を抽出するのに使用される。これは、例えば、ズーミング、ヒストグラム、雑音レベル、照明、コントラスト、またはシャープネスであることが可能である。
【００６５】
・認証：アプリケーションを使用することを望むユーザは、自らの身元を明らかにしなければならない。この情報に基づき、アプリケーションは、使用を拒否する、自らの挙動を変更する、グラフィカル・ユーザ・インターフェースを変更する、またはユーザ・モードを選択することができる。
【００６６】
・グラフィカル・ユーザ・インターフェース：コンポーネントは、データ処理を行う別のコンポーネントと組合せで使用される単なるグラフィカル・ユーザ・インターフェースであることが可能である。そのようなコンポーネントは、コンポーネントの機能性の（部分的）制御を可能にする。コンポーネントは、好ましくは、例えば、ユーザまたはユーザ・モードに応じて選択することができる複数のユーザ・インターフェースを有する。
【００６７】
・画像処理：このコンポーネントは、図象データを入力として有し（例えば、画像、領域、またはポリゴン）、また図象データおよび／または数値データを出力する。
・データ処理：これらのコンポーネントは、特徴抽出の結果またはシリアル・インターフェースの入力のような一般的データを処理する。
実行メソッド
アプリケーションの実行は、３つのメソッドを有するが、ただし３つに限定されず、３つのメソッドは、次のとおり、ユーザの対話または他のデバイスからの入力によってトリガされる。（ｉ）入力データ（例えば、外部トリガ、画像取り込み、または他の入力チャネル）によって駆動される：この場合、このデータを必要とするすべてのコンポーネントが実行される。これは、自動的に生成されたスケジュールに従ってすべてのコンポーネントを実行するように行われる。実行のこのシーケンスは、受動的（入力からトリガされる）または能動的（例えば、フレームグラッバからデータを要求して）であることが可能である。（ｉｉ）入力データ（例えば、画像）とのユーザ対話：この場合、この種類のユーザ対話に反応することができるすべてのコンポーネントが、その対話の情報とともに操作されたデータを伴って実行される。例として、ユーザが、画像を表示するビューアのグラフィックス・ウインドウの中でマウスを動かす。この対話は、ポイントとの組合せで画像を処理することができるすべてのコンポーネント（例えば、ズーミングのためのコンポーネント）の実行をもたらす。（ｉｉｉ）ユーザが、コンポーネントのステータス（パラメータ）を変更する：この場合、そのコンポーネントが、そのコンポーネントに依存するすべてのコンポーネントとともにやはり実行される。ユーザが、例えば、ｂｌｏｂ分析のしきい値を変更した場合、スケジューラが、ｂｌｏｂ分析を実行し、ｂｌｏｂ分析は、ビューアにおいて対応する画像上に重ね合わせることができる新しいセグメンテーションを生成する。
【００６８】
標準の実行メソッドを説明する前に、スケジューラの目的および機能を説明する。
スケジューラは、実行の順序を指定し、データを管理し、コンポーネント間でデータの受渡しを行い、コンポーネントを実行する本発明の部分である。
【００６９】
スケジューラを実現する３つの主なやり方が存在する。
−スケジューラは、他のすべてのコンポーネントに接続されるコンポーネントである。本発明によって提案されるコンポーネント通信のための機構、例えば、コンポーネントの実行およびデータの転送を使用することにより、このコンポーネントは、スケジューラの機能を実現する。
【００７０】
−スケジューラは、コネクタのようなソフトウェア・モジュールである。このモジュールは、コンポーネントがコネクタに接続する際にそのコンポーネントに接続される。この接続に基づき、スケジューラは、スケジューラの機能を実現することができる。この実現形態では、ユーザは、アプリケーションにスケジューラ・コンポーネントを追加する必要がなく、システムの使用がより容易になる。この場合、スケジューラは、コネクタにリンクされる（コンパイラの用語法における意味で）ことになる。
【００７１】
−スケジューラは、コンポーネントの間で記述される。あるコンポーネントに特有の機能性は、そのコンポーネントの一部である。これは、コンポーネントを実現する際に使用するライブラリを提供することによって実施することができる。この手法は、必要とされる通信がより少ないため、他の２つの手法より少しだけ高速である。これは、本発明の好ましい実施形態で使用される実現形態である。
【００７２】
標準の実行メソッドは、前述したメソッドの第１のメソッドに対応する。このメソッドは、所与の順序ですべてのコンポーネントに適用される１組の規則に基づく。ユーザは、この構成プロセスに気を配る必要がない。
【００７３】
・メイン・ループ：スケジューラは、所与の順序でコンポーネントを実行する。スケジューラは、データを入力する（例えば、画像を取り込む）コンポーネントから開始する。これらのコンポーネントが新しいデータを提供するときはいつでも、すべての直接および間接に依存するコンポーネントが実行される。シーケンスを一巡した後、プロセスは、始めから開始する。このリスタートは、トリガ信号のような外部イベントにより、またはデータを能動的に要求することによって起動されることが可能である。両方のケースで、システムは、データが利用可能になるまで待って、標準の実行シーケンスをリスタートしなければならない。例えば、ユーザによって生じさせられた対話が存在する場合はいつでも、システムは、前述した他の２つの実行メソッドの１つに切り替えることができる。この切替えは、システムが実行シーケンスの終了に到達したときに行われることが可能である。これにより、整合性のある結果だけが計算されることが確実になる。
【００７４】
・データの入力：第１のアクションは、画像を取り込むこと、またはその他の外部データにアクセスすることである。この入力は、能動的に起動されること、または外部信号によって起動されることが可能である。図１で、コンポーネント１が実行される。
【００７５】
・表示すること：サブモードおよび使用されるプロパティに応じて、画像が表示される。オプションとして、画像を関心領域またはその他の（入力）データと重ね合わせることができる。図１で、コンポーネント２（ビューア）が実行される。
【００７６】
・一次ビジョン・ループ：実行サブモードに応じて、特定の前処理コンポーネントが実行される。  
・検査：これらのコンポーネントは、すべてのサブモードで使用される。図１で、これは、コンポーネント５（ズーミング）に対応する。  
【００７７】
・較正：これらのコンポーネントは、構成モードで使用される。これらのコンポーネントは、実行されたとき、アプリケーション・モードで後に使用するために記憶されなければならないデータを戻す。このデータは入力データに追加されて、ビジョン・コンポーネントが、結果を較正し、自らの精度を高めることができるようにする。図１で、これはコンポーネント３に対応する。  
【００７８】
・変化検出：アプリケーション・モードで、これらのコンポーネントは、表示によって画像に追加され、ビジョン・コンポーネントが、これらの変化を補償することができるようにするデータを戻す。図１で、これは、コンポーネント４に対応する。
【００７９】
・ビジョン・ループ：スケジューラは、一次コンポーネントからのデータ（例えば、較正データ３または変化検出４）を画像と組み合わせる。次に、すべての接続されたビジョン・コンポーネントのためのループが開始される。これは、それぞれの直接に接続されたビジョン・コンポーネントが、情報を提供されて、開始されることを意味する。この結果、そのコンポーネントのすべての後続のコンポーネントも実行される。それぞれの直接に接続されたビジョン・コンポーネントに関して、スケジューラは、関心領域のリストを有する。このリストも、画像データに追加される。
【００８０】
・実行：合成画像データが、ビジョン・コンポーネントに渡されて、実行される。  
・後続のコンポーネント：コンポーネントは、後続のコンポーネントを有する場合、自らの入力データを自らの結果と合わせて後続のコンポーネントに引き渡し、後続のコンポーネントを実行する。必要な場合、コンポーネントは、後続のコンポーネントに引き渡す前に入力データを変更することができる。このプロセスが、すべての後続のコンポーネントが実行されるまで繰り返される。  
【００８１】
・ビジョン結果：コンポーネントが結果を計算したときはいつでも、結果がビューアに戻されることが可能であり、ビューアにおいて、その結果をそれまでに表示されている画像およびその他のデータと重ね合わせることができる。結果を表示するこのやり方は、コンポーネントが直接に接続されているか否かとは独立に機能する。  
【００８２】
・非図象結果：面積、距離、またはテキストのようなデータも、スケジューラに戻される。この場合、すべての結果が利用可能になるまでデータを収集することができる。  
・制御メッセージ：コンポーネントが、ハードウェア、例えば、フレームグラッバを制御するのが必要である可能性がある。この場合、このコンポーネントは、所望のアクションを生成するメッセージをスケジューラに送り返すことができる。
【００８３】
図１において、２つのシーケンスが利用可能である。第１のシーケンスは、測定コンポーネント６だけから成る。このシーケンスが最初に実行される。測定の結果は、ビューア２に戻される。第２のシーケンスは、コンポーネント７、８、および９から成る。これらのコンポーネントは、この順序で実行される。結果は、最後のコンポーネント９、すなわち、シーケンスの特徴表示によってビューア２に戻される。
【００８４】
・出力：すべてのビジョン・コンポーネントが実行された後、ビューア２において結果のデータが利用可能である。したがって、結果のデータは、すべての接続された出力コンポーネントに渡される。図１では、１つの出力コンポーネント１０が接続されている。
【００８５】
実行が対話によって生じさせられる場合、ユーザが実行メソッドに影響を与えることができる２つのやり方が存在する。第１のやり方によれば、ユーザは、ビューアにおいて見ることができるデータと対話する。ユーザが、画像のような入力データ上をポイントした、またはそのデータ上でクリックした場合、ビューアは、実行が標準の実行メソッドで行われる限り、それらのイベントを収集する。スケジューラが、標準の実行シーケンスを終了したとき、対話が検査され、また例えば、重複が除去される。次に、この種類のデータを処理することができるすべてのコンポーネントが、マウス位置およびボタン・プレス・データと組み合わされた現在、利用可能なデータを伴って実行される。その後、スケジューラは、標準の実行メソッドに取りかかることができる。図１で、マウス対話を処理することができる１つのコンポーネント、すなわち、ズーミング・コンポーネント５が接続される。このコンポーネントが、この場合、実行される。
【００８６】
別法では、ユーザは、例えば、画像処理パラメータを変更することによって任意のコンポーネントと対話する。これが行われるときはいつでも、コンポーネントは、自らが再実行されなければならないことをスケジューラに知らせる。スケジューラは、この要求を送ったコンポーネントのリストを保持する。標準の実行シーケンスが終了したとき、このリストが処理される。これは、リストのコンポーネントを含むすべてのサブシーケンスが、再実行されることを意味する。例として、ユーザが、図１のｂｌｏｂファインダ７と対話する。これは、コンポーネント７、８、および９の再実行をもたらす。
【００８７】
用途に応じて、前述した実行メソッドが、好ましく使用されるに過ぎない。前述した実行メソッドは、時間がクリティカルな重要性を有する用途では必要ない。さらに、古いデータを使用する代りに、例えば、フレームグラッバからの新しいデータとともにコンポーネントを処理することが可能である。
【００８８】
次に、実現の詳細を説明する。新しいコンポーネントをプログラミングする際に誤りを回避し、新しいコンポーネントを開発するタスクを容易にするため、以下の規則を適用することができる。第１に、基本データ構造、およびすべてのコンポーネントに共通するメソッドを実現するルート・クラスが使用される。このクラスは、すべてのコンポーネントに対するインターフェースとして使用される。これにより、すべてのコンポーネントが同一の基本機能性を有することが保証される。ルート・クラスは、本発明のコンポーネントに共通するすべての機能性を実現することができる。これに加えて、ルート・クラスから導出された各カテゴリごとに１つのクラスが実現される。これらのクラスは、そのカテゴリに特有のデータ構造およびメソッドを実現する。これらのクラスは、特定のカテゴリに属するコンポーネントに対するインターフェースとして使用される。最後に、各コンポーネントが、１つのカテゴリのクラスから導出される。これにより、コンポーネントが、コンポーネントの共通で有するすべての機能を有し、およびそれに加えて、カテゴリに特有の機能を有することが保証される。
【００８９】
設計モードおよびユーザ・モードにおけるロード／保管に関して、以下のことに留意されたい。コンポーネントが、セッション中に初めて呼び出されたとき、それが設計モードで行われるか、ユーザ・モードで行われるかとは独立に、このコンポーネントの状態が、アプリケーションのコンテキストにロードされる。アプリケーションとの組合せでコンポーネントに関する状態情報が全く利用可能でない場合、デフォルトの値が戻される。例えば、実行の終了時または設計時間の終了時にコンポーネントが破壊されるとき、そのステータスが保管される。このデータは、アプリケーションのコンテキストの中に記憶される。これは、アプリケーションの状態情報が、アプリケーションに属するコンポーネントの状態のセットとして定義されることを意味する。アプリケーションの状態情報は、例えば、ファイルの中、またはオペレーティング・システムのレジスタの中に記憶することができる。
例
以下の例は、カメラからの画像を取り込み、これらの画像をビューアにおいて表示し、画像の中のバーコードを調べ、そのコードを読み取り、その結果をシリアル・インターフェースに渡す通常のアプリケーションの開発を説明している。さらに、オンライン・ズーミングが、画像を検査するために追加される。
開発環境を開始すること
この例は、アプリケーションを開発するのにマイクロソフト・ビジュアルベイシック（Ｍｉｃｒｏｓｏｆｔ  Ｖｉｓｕａｌ  Ｂａｓｉｃ）が使用されることを想定している。したがって、この環境は、ユーザによって開始され、「標準（Ｓｔａｎｄａｒｄ）−ＥＸＥ」が選択される。この後、ユーザは、メニュー「プロジェクト」の中でダイアログ「コンポーネント」を選択して、本発明のコンポーネントを活動化する。各コンポーネントの活動化の後、コンポーネント選択においてアイコンが表示される。この時点で、ユーザは、アプリケーションの開発を開始することができる。図２は、コンポーネント（左下）の活動化の後のビジュアルベイシックを示している。中央のエリア「（フォーム１）」を使用してアプリケーションのコンポーネントを配置する。
ビューアの選択
第１のステップとして、ユーザが、ビューアのアイコンをダブルクリックする。これは、開発中のアプリケーションのフォームの中に自動的に配置されるこのコンポーネントのインスタンスを生成する（図３参照）。ビューアのサイズ、位置、およびその他のプロパティは、ユーザが変更することができる。これは、マウスでビューアを操作することにより（例えば、位置およびサイズ）、またはプロパティを直接に変更することによって（例えば、ウインドウの右下のプロパティ・ページを使用して）行うことができる。ビューア２が、フォーム（「フォーム１」）上に配置されたとき、コンポーネントの初期化ルーチンが実行され、その後、このコンポーネントが、フォーム上に描かれる。初期化ルーチン中、コンポーネントは、コネクタ１１の登録ルーチンを呼び出す。コンポーネントは、自らに対する参照をパラメータとしてコネクタに渡す。コネクタ１１は、初めて呼び出されるので、自らのデータ構造を初期化する。コンポーネントに対する参照を使用して、コネクタは、コンポーネントの記述にアクセスすることができる。コネクタは、まず、そのコンポーネントが入力コンポーネントであるかどうかを調べる。ビューア２は、入力コンポーネントではないので、非接続コンポーネントのリストに入れられる。接続されているコンポーネントのリストは、空のままである。したがって、単一のビューア・コンポーネントは、アプリケーションを実現しない。
【００９０】
ユーザが、コンポーネントと対話するときはいつでも（マウスを使用することにより、またはプロパティを変更することにより）、コンポーネントの対応するルーチンが実行される。
フレームグラッバ・コンポーネントの選択
この例の次のステップとして、ユーザが、フレームグラッバ・コンポーネント１２のアイコンをダブルクリックすることによってフレームグラッバ・コンポーネント１２を選択する。この結果、このコンポーネントが、フォーム上に配置される。ビューア２と同様に、ユーザは、対話式にサイズ、位置、およびその他のプロパティを適合させる。これらのアクションの結果を図４で見ることができる。
【００９１】
フレームグラッバ・コンポーネント１は、フォーム上に配置されたとき、コネクタ１１を呼び出す（ビューア２と同様に）。自らに対する参照をコネクタに渡すことにより、自動接続プロセスが起動される。コネクタは、まず、コンポーネントのカテゴリを調べる。このカテゴリは、「入力」であるため、フレームグラッバ１は、アプリケーションの第１のコンポーネントとなる。これまで、コンポーネントは、全く接続を有していない。第２のステップとして、コネクタは、非接続コンポーネントのリストの中のコンポーネントを再検査する。この場合、１つだけのコンポーネント、つまり、ビューアが利用可能である。この時点で、接続パラメータに関するすべての規則が試験される。この場合、フレームグラッバが、ビューアに接続される。この理由は以下のとおりである。
【００９２】
・入力コンポーネントは、ビュー・コンポーネントに接続することができる。
・フレームグラッバの出力タイプは、「画像」であり、また
・ビューアの入力タイプは、「画像」である。
【００９３】
したがって、フレームグラッバ１２は、ビューア２に接続され、また、ビューア２も、フレームグラッバ１２に接続される。これは、両方のコンポーネントとも、他方のコンポーネントに対する参照を獲得することを意味する。この参照を使用して、両方のコンポーネントは、データを交換し、互いのルーチンを呼び出すことができる。
設計モードにおける実行
アプリケーションを設計モードで実行するため、ユーザは、フレームグラッバ上で右マウス・ボタンをクリックする。これは、ポップアップ・メニューを生じさせ、最後のエントリ（「編集」）が選択される。これにより、ユーザは、コンポーネントのグラフィカル・エンティティ（ボタン、オプション・メニュー等）を使用できるようになる。これらのエンティティを使用して、ユーザは、適切なフレームグラッバおよびそのパラメータを選択し、フレームグラッバをオンラインに切り替える。
【００９４】
ユーザが、ポップアップ・メニューを使用してコンポーネントを活動化したとき、コンポーネントのすべてのデータ構造およびルーチンがアクティブになる。すなわち、ユーザの対話によってコンポーネントが呼び出されたとき、すべてが実行されることが可能である。ユーザが、フレームグラッバのパラメータを変更したとき、フレームグラッバは、カメラからの信号にアクセスする。これにより、フレームグラッバ・コンポーネント内で画像が生成される。フレームグラッバは、ビューアに接続されているので（データ・ソースとして）、その画像をビューアに渡す。これにより、ビューアが活動化され、ビューアは、その画像を表示する。フレームグラッバは、アクティブに留まっている限り、画像を生成し、画像は、ビューアに引き渡されて表示される。ユーザにとっての効果は、ビューアにおいて見ることができるオンライン画像であり、フレームグラッバ・パラメータは、フレームグラッバ・コンポーネントにおいて編集される。図５が、オンライン画像を有するビューアを示している。
【００９５】
オンライン・ズーミング・コンポーネントの選択
画像の品質を検査するため、ユーザは、オンライン・ズーミング・コンポーネント５を追加する。このアクションは、前の２つのコンポーネントのアクションと同じである。
【００９６】
この場合、ズーミング・コンポーネントは、ビューアに接続される。この理由は、ズーミング・コンポーネントのカテゴリが「検査」であり、検査コンポーネントは、ビュー・コンポーネントに接続することができ、ズーミング・コンポーネントの入力データ・タイプは、「画像」であり、またビューアは、出力データ・タイプ「画像」を提供するからである。
【００９７】
次に、ユーザが、ビューアを活動化する。マウスが表示の中で動かされたとき、ズーミング・コンポーネントは、マウスが位置している画像の部分を表示する。システムに関して、次の２つのアクションが、オンライン・ズーミングのために重要である。画像がビューアに渡された（フレームグラッバから）ときはいつでも、その画像が、ズーミング・コンポーネントに自動的に引き渡される。さらに、ユーザが、ビューアの表示の中でマウスを使用して対話する場合、ズーミング・コンポーネントが、画像およびマウス座標で呼び出される。
【００９８】
図６は、ズーミング・コンポーネントをフォーム上に配置した結果を示している。それに加えて、ビューアにおいてマウスを動かすことの効果を見ることができる。
ユーザ・モードにおける実行
図７は、ユーザ・モードにおけるアプリケーションを示している。ユーザが、ビジュアルベイシック環境の実行ボタンを押して、ユーザ・モードでアプリケーションを実行する。これにより、プログラムが独立型アプリケーションとして開始される。ユーザは、通常の仕方で（フレームグラッバ・パラメータを編集し、オンライン・ズーミング・コンポーネントにおいて画像を表示して）アプリケーションと対話することができる。最後に、ユーザは、アプリケーションを停止し、設計モードに戻る。ユーザでアプリケーションに適用された変更は、設計モードにおいて再び利用することができる。
【００９９】
ユーザが、実行ボタンを押したとき、アプリケーションのすべてのコンポーネントが破壊される。これが行われる前に、コンポーネントは、自らの状態情報（パラメータ設定のような）を特別状態ファイルの中に保管する。この後、ビジュアルベイシックが、実行される実行可能ファイルを作成する。これが行われたとき、すべてのコンポーネントが新たに作成され、その対応する位置に配置される。この後、コンポーネントは、ファイルから自らの状態情報を読み取り、適宜に自らを再構成する。次に、すべてのコンポーネントが、コネクタを呼び出して、設計モードにおいて使用されたのと同じ接続を生成する。最後に、アプリケーションは、ユーザの入力を待つ。ユーザが、フレームグラッバのスイッチをオンにしたとき、システムが、デフォルトの実行機構で実行される。つまり、フレームグラッバ・コンポーネントが、画像を待ち、画像をビューアに渡し、ビューアが、その画像を表示し、その画像をズーミング・コンポーネントに引き渡す。ユーザが、ビューアの表示の中でマウスを動かしたときはいつでも、そのマウス座標でズーミングに対する追加の呼出しが生成される。
【０１００】
ユーザが、アプリケーションを停止したとき、すべてのコンポーネントが破壊される。その前に、コンポーネントは、自らの状態情報を状態ファイルの中に保管する。
ビジュアルベイシックが、設計モードに戻ったとき、コンポーネントが新たに生成され、その状態情報が再ロードされて、コンポーネントが再接続される。
【０１０１】
図７は、ユーザ・モードにおけるアプリケーションを示している。
バーコード・コンポーネントの選択
アプリケーションを完成させるため、ユーザは、バーコード・リーダをアプリケーションに追加する。図８は、バーコード・リーダを選択した結果を示している。このコンポーネントは、選択されて、生成されたとき、アプリケーションに接続される。以下の規則が使用される。
【０１０２】
・バーコード・リーダは、ビジョン・コンポーネントである。
・ビジョン・コンポーネントは、ビューアに接続することができる。
・バーコード・リーダの入力タイプは、「画像」である。
【０１０３】
・ビューアは、画像のための出力を有する。
関心領域を定義すること
最後に、グラフィカル・コンポーネントをアプリケーションに追加して関心領域を作成し、編集する。関心領域コンポーネントは、ビューアに接続される。この理由は、以下のとおりである。  
【０１０４】
・このコンポーネントのカテゴリは、「グラフィカル・ユーザ・インターフェース・コンポーネント」であり、また
・「グラフィカル・ユーザ・インターフェース・コンポーネント」は、ビューアに接続することができる。
【０１０５】
このコンポーネントが接続された後、ビューアは、ビューアに依存するすべてのコンポーネントに関する情報をこの新しいコンポーネントに提供する。この情報から、以下が選択される。
【０１０６】
・接続されているコンポーネントの名前
・サポートされる関心領域のタイプ
・関心領域の最大数
この情報を使用して、適宜にダイアログが構成される。
ユーザ・モードにおける実行
ユーザ・モードにおけるアプリケーションを実行するため、ユーザが、実行ボタンを押す。ユーザ・モードでは、バーコード・リーダに関する関心領域が指定される。これを行うことにより、アプリケーションが、自動的に実行され、特定の関心領域を有するバーコード・リーダが実行される。ユーザが、バーコード・リーダのパラメータを変更したとき、このコンポーネントは、新しいパラメータを伴って再実行される。フレームグラッバが新しい画像を提供したとき、ビューアが、その画像を表示し、ズーミング・コンポーネントおよびバーコード・コンポーネントを実行する。
【０１０７】
ステータスが、設計モードからユーザ・モードに変化したとき、およびその逆のとき、前述した同一の機構が実行される。
ユーザが、関心領域コンポーネントにおいてあるコンポーネントを選択したとき、そのコンポーネントによってサポートされる関心領域のタイプを選択することができる。それらのタイプのどれかを選択することにより、ユーザは、ビューアにおいて関心領域を対話式に生成することができる。この関心領域は、それが属するコンポーネントに関する情報とともにビューアで記憶される。所与の例ではバーコード・リーダである、そのコンポーネントが実行されるときはいつでも、画像がそのコンポーネントに渡されるとき、関心領域がその画像と自動的に組み合わされる。
【０１０８】
図９は、ユーザ・モードにおけるアプリケーションを示している。関心領域コンポーネント（左中間）において、コンポーネント「１Ｄバーコード」および長方形の関心領域タイプが選択される。生成された関心領域は、例えば、ビューアにおける赤の長方形として見ることができる。バーコード・コンポーネント（左上）において、復号化の結果が表示される。コードに対応する領域は、例えば、ビューアにおける青の枠として表示される。これは、セグメンテーションの結果をビューアに戻し、その結果を画像に対して重ね合わせることによって行われる。
アプリケーションを保管すること
ユーザは、設計モードに戻ったとき、標準のビジュアルベイシック機構を使用して独立型アプリケーションを生成することができる。これにより、「ｅｘｅ」ファイル、および状態情報を含むファイルが生成される。
【図１】
2011165208.tif 000003
【図２】
2011165208.tif 000004
【図３】
2011165208.tif 000005
【図４】
2011165208.tif 000006
【図５】
2011165208.tif 000007
【図６】
2011165208.tif 000008
【図７】
2011165208.tif 000009
【図８】
2011165208.tif 000010
【図９】
2011165208.tif 000011