以下、図面を参照しながら、本発明を実施するための形態(実施形態)について説明する。本発明は、本実施形態に限定されない。
まず、図1を用いて、本実施形態のオブジェクト検索装置1の概要を説明する。オブジェクト検索装置1は、画面上に表示されるオブジェクト群から、操作対象のオブジェクトを検索する際、まずウィンドウ(画面)のマッチングを行い、マッチしたウィンドウ上から検索クエリに示される条件に合うオブジェクトを検索する。
例えば、オブジェクト検索装置1は、アプリケーションにより表示される画面上のウィンドウについて、検索クエリに示される配置パターンにマッチするウィンドウを探す(ウィンドウのマッチング)。次に、オブジェクト検索装置1は、ある配置パターンにマッチしたウィンドウ画面上から、検索クエリに示された条件に合うオブジェクトを検索する(ウィンドウ上のオブジェクト検索)。
例えば、オブジェクト検索装置1が、アプリケーションにより表示される画面上のウィンドウ(図1の左に示すウィンドウ群)から、検索クエリに示される配置パターンを持つウィンドウ、すなわち、タブの下側のどこかに「フィードとWebスライス」というラベルがあり、その直下にイメージとボタンが配置されているウィンドウ、かつ、タブの下側のどこかにボタンが3つ並んだウィンドウを検索する。そして、オブジェクト検索装置1は、検索したウィンドウのオブジェクトから、検索クエリに示される条件に合うオブジェクト、すなわち、イメージの相対的右にあり名前が「設定」のボタン、および、3つ並んだボタンの1番左側でかつ名前が「OK」のボタンを検索する。そして、オブジェクト検索装置1は、検索クエリに対する検索結果として、図1に示すウィンドウ101のオブジェクトから太線で示した2つのオブジェクトを返す。
具体例を挙げると、上記の検索クエリ(クエリ)は、図2に示すように2次元正規表現により記述されたオブジェクトの変数名定義および配置パターンを含む。そして、オブジェクト検索装置1は、上記のクエリに基づき、クエリに示される配置パターンを持つウィンドウ101を見つけると、このウィンドウ101上からクエリで指定された変数名定義に対応するオブジェクト(図2のウィンドウ101上にある太線で囲まれたオブジェクト)を検索する。そして、オブジェクト検索装置1は、上記のクエリに対する検索結果として、クエリで指定されたbutton_setは太線で囲まれたウィンドウ上の23番目のオブジェクト(“設定”ボタン)であり、button_okは太線で囲まれたウィンドウ上の24番目のオブジェクト(“OK”ボタン)であるという結果を出力する。
このようにオブジェクト検索装置1は、ウィンドウ上に配置された複数オブジェクトの相対関係を指定することで、該当するオブジェクトを検索することができる。すなわち、オブジェクト検索装置1は、検索クエリにおいて、何のオブジェクトが何個あるか等、具体的な配置パターンを指定しなくても、該当するウィンドウ上からオブジェクトを検索することができる。つまり、オブジェクト検索装置1は、何かしらのクラス(属性)の不定数のオブジェクトが繰り返し配置される旨の配置パターンが指定された検索クエリについても、この検索クエリに基づいたオブジェクトの検索を行うことができる。
次に、オブジェクト検索装置1が扱う検索クエリについて説明する。この検索クエリ(クエリ)は、前記したとおり、2次元正規表現によるオブジェクトの配置パターンおよび変数名定義を含む。なお、図2に示したクエリの意味は、図5に示すとおり、
・インターネットのプロパティのウィンドウの画面
・タブの下側のどこかに「フィードとWebスライス」というオブジェクトがあり、その直下にイメージとボタンオブジェクト((1))が配置されている画面
・タブの下側のどこかにボタンが3つ並んだオブジェクトが配置されている画面
から、(1)かつ「設定」のボタンと3つ並んだボタンの一番左側でかつ名前が「OK」のボタンオブジェクトを検索する
という意味である。
このオブジェクト検索装置1は、上記のように画面上のオブジェクトの配置パターンとしてオブジェクト間の相対関係を指定した検索クエリにより、検索対象となるオブジェクトを検索することができる。ここで、オブジェクト間の相対関係は、例えば、正規表現におけるオブジェクトの繰り返しや、行頭、行末等のアンカーにより記述されたものも用いることができる。
そして、オブジェクト検索装置1は、画面情報に示されるオブジェクトから、検索クエリで指定された配置パターンに合致するオブジェクトの情報を出力し、例えば、図5に示すインターネットのプロパティのウィンドウ上の“設定”ボタンのオブジェクト(符号401)の情報と、“OK”ボタンのオブジェクト(符号402)の情報とを出力する。
次に、図3を用いて、オブジェクト検索装置1の構成を説明する。オブジェクト検索装置1は、画面認識部(画面認識装置)100と、クエリ解析部110と、パターンマッチング部120と、変数変換部(出力部)130とを備える。また、オブジェクト検索装置1は、記憶部(図示省略)に、記号表141と、変数名リスト保持部142と、配置パターン保持部143と、画面認識情報保持部144と、マッチング結果保持部145と、オブジェクト変数保持部146とを備える。
記号表141は、例えば、検索クエリに記述されるオブジェクトのクラスやパターンの定義に関する情報を示した情報である。この記号表141に含まれるオブジェクトのパターンの定義は、例えば、図4に示す情報である。この記号表141は、クエリ解析部110が、検索クエリにおいて2次元正規表現で記述されるオブジェクトの変数名定義、配置パターンを解釈する際に参照される。
変数名リスト保持部142は、クエリ解析部110により出力された各オブジェクトの変数名定義に関する情報(例えば、変数名リスト)を記憶する。配置パターン保持部143は、クエリ解析部110により出力された各オブジェクトの配置パターンに関する情報(例えば、後記する図7に示す有限オートマトン)を記憶する。
画面認識情報保持部144は、画面認識部100により出力された画面認識情報(例えば、後記する図6に示すグリッド行列)を記憶する。
マッチング結果保持部145は、パターンマッチング部120により出力された、画面認識情報とオブジェクトの配置パターンとのマッチング結果を記憶する。オブジェクト変数保持部146は、変数変換部130により出力された配置パターンにマッチするオブジェクト群に変数名を対応付けた情報(マッチしたオブジェクトの情報)を記憶する。
画面認識部100は、画面情報(画面上の各オブジェクトの絶対位置座標等を示した情報)を取得すると、この画面上の各オブジェクトの相対的な位置(相対関係)を認識し、その認識結果を示す画面認識情報(グリッド行列)を生成する(図6参照)。そして、生成した画面認識情報を画面認識情報保持部144に記憶する。この画面認識情報は、例えば、図6に示すように、画面上の各オブジェクトの相対関係を最小のグリッド行列に配置した情報である。
例えば、画面認識部100は、図6の左に示す画面の画面情報を取得すると、この画面上のオブジェクト1〜26の相対位置を認識し、画面認識情報として、図6の右に示すようにオブジェクトを11×8のグリッド行列に配置した情報を生成し、出力する。なお、図6に示す画面認識情報(グリッド行列)には各オブジェクトのクラス(属性)に関する情報が付されているが、クラス以外の情報(オブジェクトに含まれるテキスト情報等)が付されていてもよい。この画面認識部100の詳細は後記する。
図3に戻り、クエリ解析部110を説明する。クエリ解析部110は、2次元正規表現により記述された検索クエリを解析し、オブジェクトの配置パターンと変数名定義に関する情報を抽出すると、配置パターンと変数名定義に関する情報を機械的に処理できる形式に変換する。そして、クエリ解析部110は、変換した配置パターンを配置パターン保持部143に記憶し、変換した変数名定義に関する情報(変数名リスト)を変数名リスト保持部142に記憶する。
例えば、クエリ解析部110は、記号表141に示されるオブジェクトのクラスやパターンの定義に関する情報を参照して、2次元正規表現により記述された配置パターンを、横方向の1次元の正規表現の配置パターンおよび縦方向の1次元の正規表現の配置パターンに分解する。そして、クエリ解析部110は、分解した横方向の1次元の正規表現の配置パターンおよび縦方向の1次元の正規表現の配置パターンそれぞれを有限オートマトンに変換する。
一例を挙げる。まず、クエリ解析部110は、図5に示す2次元正規表現により記述された配置パターンを、例えば、図7に示すパターン1の配置パターンと、パターン2の配置パターンとに分ける。次に、クエリ解析部110は、パターン1の配置パターン(符号701)の2次元正規表現を、縦方向の1次元の正規表現(符号702A)と横方向の1次元の正規表現(符号703A)に分解する。そして、クエリ解析部110は、分解した縦方向の1次元の正規表現(符号702A)を有限オートマトン(符号702B)に変換し、横方向の1次元の正規表現(符号703A)を有限オートマトン(符号703B)に変換する。
なお、図7の符号702Bに示す有限オートマトンは、オブジェクトの配置を縦方向に辿り、クラスが「^」のオブジェクトがあれば0から1の状態に遷移し、クラスが「TAB」のオブジェクトがあれば1から2の状態に遷移し、クラスが「LABEL」のオブジェクトがあれば2から3の状態に遷移し、クラスが「LABEL」以外のオブジェクトがあれば2の状態のままであり、クラスが「IMAGE」のオブジェクトがあれば3から4の状態に遷移し、4の状態で終端することを示す。
また、図7の符号703Bに示す有限オートマトンは、オブジェクトの配置を横方向に辿り、クラスが「^」のオブジェクトがあれば0から1の状態に遷移し、クラスが「IMAGE」のオブジェクトがあれば1から2の状態に遷移し、クラスが「BUTTON」のオブジェクトがあれば2から3の状態に遷移し、クラスが「BUTTON」以外のオブジェクトがあれば2の状態のままであり、クラスが「$」のオブジェクトがあれば3から4の状態に遷移し、4の状態で終端することを示す。
また、クエリ解析部110は、図7のパターン2についても、パターン1と同様に、配置パターン(符号704)の2次元正規表現を、縦方向の1次元の正規表現(符号705A)と横方向の1次元の正規表現(符号706A)に分解する。そして、クエリ解析部110は、分解した縦方向の1次元の正規表現(符号705A)を有限オートマトン(符号705B)に変換し、横方向の1次元の正規表現(符号706A)を有限オートマトン(符号706B)に変換する。
なお、図7に示す有限オートマトンに付されたΣは、クラスの集合であり、例えば、{LABEL,BUTTON,RADIOBUTTON,TEXTFIELD,TEXTAREA,COMBOBOX,CHECKBOX,IMAGE,LINK,TAB,LISTBOX,TREEVIEW,GRIDVIEW,SPACE}である。これらのクラスの集合は、記号表141で定義してもよいが、SPACEは必ず含むものとする。
また、クエリ解析部110において、配置パターンの2次元正規表現を、縦方向の1次元の正規表現と横方向の1次元の正規表現に分解する際、縦方向の1次元の正規表現と横方向の1次元の正規表現との組み合わせが多数考え得る場合もある。そこで、クエリ解析部110は、まず、縦・横いずれかの方向の1次元の配置パターンのうち最長のものを選択し、その選択した1次元の配置パターンを軸として、他の方向(例えば、選択した1次元の配置パターンの方向が縦方向であれば、横方向)で考え得る全ての1次元の配置パターンを生成し、それぞれの1次元の配置パターンを有限オートマトンに変換する。ただし、クエリ解析部110は、有限オートマトンのノードが1つだけのものは、後記するパターンマッチングに用いることができないので除外することとする。
なお、図7に示した例においては、クエリ解析部110は、パターン1の配置パターンについて符号702Aに示す縦方向の1次元の正規表現を選択し、この縦方向の1次元の正規表現に対して横方向の1次元の正規表現は、符号703Aに示す横方向の1次元の正規表現のみである場合を例に説明している。また、パターン2の配置パターンについても同様に、クエリ解析部110は、符号705Aに示す縦方向の1次元の正規表現を選択し、この縦方向の1次元の正規表現に対して横方向の1次元の正規表現は、符号706Aに示す横方向の1次元の正規表現のみである場合を例に説明している。
また、クエリ解析部110は、配置パターンの1次元の正規表現に不定数のオブジェクトが繰り返し配置される旨の記述が含まれる場合、不定数のオブジェクトが繰り返し配置される旨の情報を含む有限オートマトンに変換するものとする。
例えば、図7における縦方向の1次元の正規表現702Aには、不定数のオブジェクトが繰り返し配置される旨の記述([-]*)が含まれる。従って、クエリ解析部110は、この不定数のオブジェクトが繰り返し配置される旨の記述([-]*)を、有限オートマトン702Bの符号702Cに示す記述に変換する。
図3の説明に戻る。パターンマッチング部120は、画面認識情報の示すオブジェクト間の相対位置(配置パターン)を参照して、当該画面認識情報の示す画面が、検索クエリから抽出されたオブジェクトの配置パターンとマッチする画面か否か判定する。
この画面の配置パターンのマッチングの具体例を、図8および図9を用いて説明する。なお、画面認識情報には、マッチングのため、行頭(^)、行末($)を示すダミーオブジェクトが配置されるものとする。
まず、図8を用いて、図7に示したパターン1の配置パターンのマッチングについて説明する。例えば、パターンマッチング部120は、図8に示すように、画面認識情報(グリッド行列)上から、パターン1の縦方向の有限オートマトン702Bの示す領域(図8の破線の領域)と、パターン1の横方向の有限オートマトン703Bの示す領域(図8の一点鎖線の領域)とを探索する。
そして、パターンマッチング部120は、画面認識情報上に、有限オートマトン702Bの示す領域と、有限オートマトン703Bの示す領域とで重なるオブジェクトが1つ以上あれば、画面認識情報に示される画面が、パターン1の配置パターンとマッチする画面(OK)と判断する。
次に、図9を用いて、図7に示したパターン2の配置パターンのマッチングについて説明する。例えば、パターンマッチング部120は、図9に示すように、画面認識情報(グリッド行列)上から、パターン2の縦方向の有限オートマトン705Bの示す領域(図9の破線の領域)と、パターン2の横方向の有限オートマトン706Bの示す領域(図9の一点鎖線の領域)とを探索する。
そして、パターンマッチング部120は、画面認識情報上に、有限オートマトン705Bの示す領域と、有限オートマトン706Bの示す領域とで重なるオブジェクトが1つ以上あれば、画面認識情報に示される画面が、パターン2の配置パターンとマッチする画面(OK)と判断する。
図8および図9に示すように、画面認識情報の示される画面は、パターン1およびパターン2両方の配置パターンにマッチする画面(OK)である。よって、パターンマッチング部120は、当該画面認識情報に示される画面を、検索クエリに示される配置パターン(図5参照)にマッチする画面であると判断する。
図3に戻り、変数変換部130を説明する。変数変換部130は、パターンマッチング部120において検索クエリに示される配置パターンとマッチすると判断された画面上のオブジェクト群から、検索クエリに示される変数名の制約条件を満たすオブジェクト群を出力する。
このようなオブジェクト検索装置1によれば、アプリケーションにより表示される画面上に表示されるオブジェクトのうち、処理対象となるオブジェクトを、オブジェクト間の相対関係で指定して検索することができる。
(処理手順)
次に、図10Aを用いてオブジェクト検索装置1の処理手順の概要を説明する。まず、オブジェクト検索装置1のクエリ解析部110は、クエリを解析し(S105:クエリ解析)、また、画面認識部100は、画面情報に基づき画面認識を行い、画面認識情報を生成する(S106:画面認識)。そして、パターンマッチング部120は、画面認識情報の示す画面が、検索クエリに示される配置パターンとマッチする画面か否か判定する(S107:パターンマッチング)。その後、変数変換部130は、配置パターンにマッチすると判断された画面上のオブジェクト群から、クエリの変数名定義に対応するオブジェクトを出力する(S108:変数変換)。
次に、図10Bを用いて、図10AのS105のクエリ解析処理を詳細に説明する。まず、クエリ解析部110は、クエリを読み込み(S1051)、クエリ(図5参照)のOBJECTと{の間にあるテキストを読み取り、空白で区切る。これを左から変数名リストとして変数名リスト保持部142へ出力する(S1052)。
また、クエリ解析部110は、クエリの{}の間にあるテキストのうち、[]で囲まれたテキスト(2次元正規表現集合)を読み取る。これをセミコロン(;)で区切り、リストで保持する(S1053)。つまり、クエリ解析部110は、クエリにおいて2次元正規表現で記述された配置パターンに関する情報のリストを生成する。さらに、クエリ解析部110は、クエリの{}の間にあるテキストのうち、[]で囲まれたテキスト以外のテキストを読み取る。これをセミコロン(;)で区切り、変数名リストとして変数名リスト保持部142へ出力する(S1054)。
そして、S1054の後、クエリ解析部110は、S1053で生成されたリスト(2次元正規表現で記述された配置パターンに関する情報のリスト)に基づき、配置パターンを生成し、配置パターン保持部143へ出力する(S1055:配置パターン生成)。例えば、クエリ解析部110は、2次元正規表現で記述された配置パターンに関する情報を、横方向の1次元の正規表現の配置パターンおよび縦方向の1次元の正規表現の配置パターンに分けた上で、それぞれの配置パターンを有限オートマトンに変換し、これを配置パターンとして配置パターン保持部143へ出力する。
次に、図11を用いて、図10BのS1055の配置パターン生成処理を詳細に説明する。まず、クエリ解析部110は、図10BのS1053で生成された2次元正規表現(2次元正規表現で記述された配置パターンに関する情報)を読み込む(S1056)。
S1056の後、クエリ解析部110は、記号表141を元に、S1056で読み込んだ2次元正規表現をトークンに分解する。また、クエリ解析部110は、テキスト名については変数名リストを元にクラスを定義する(S1057)。
S1057の後、クエリ解析部110は、S1056で読み込んだ2次元正規表現の一番初めに記述されたトークンを起点に、トークン間の縦方向、横方向の関係を表現した1次元の正規表現を生成する(S1058)。そして、クエリ解析部110は、S1058で生成した縦(または横方向)の1次元正規表現を有限オートマトンに変換したときに、有限オートマトンの遷移が最長のものを採用する(S1059:縦(または横方向)の有限オートマトンの遷移のうち最長のものを採用する)。なお、以下の説明では、クエリ解析部110が縦方向の有限オートマトンについて遷移が最長のものを採用した場合を例に説明する。
S1059の後、クエリ解析部110は、縦方向、横方向それぞれについて1次元の正規表現を有限オートマトンに変換する(S1060)。具体的には、クエリ解析部110は、S1059で採用した、遷移が最長の縦方向の1次元正規表現を有限オートマトンに変換し、これに対する横方向の全ての1次元正規表現を有限オートマトンに変換する。そして、クエリ解析部110は、縦方向、横方向それぞれの1次元正規表現を変換した有限オートマトンを合せて、配置パターンとして配置パターン保持部143に出力する。
ただし、クエリ解析部110は、縦方向または横方向の1次元正規表現のうち、有限オートマトンにおけるノード数が1つのみとなってしまう1次元正規表現については有限オートマトンへの変換対象外とする。
次に、図12を用いて、図10AのS107のパターンマッチング処理を詳細に説明する。まず、パターンマッチング部120は、配置パターン保持部143の配置パターン(縦方向、横方向それぞれの1次元正規表現を変換した有限オートマトン)と、画面認識情報保持部144の画面認識情報(グリッド行列)とを読み込む(S1021)。
S1021の後、パターンマッチング部120は、グリッド行列の一番目の行と列に“^”のクラスのオブジェクトを配置し、一番最後の行と列に“$”クラスのオブジェクトを配置する(S1022)。
S1022の後、パターンマッチング部120は、S1022による処理後のグリッド行列の列方向について、縦方向の1次元正規表現と一致する列とその範囲を探索し(S1023)、また、S1022による処理後のグリッド行列の行方向について、未探索の横方向の1次元正規表現と一致する行とその範囲を探索する(S1024)。そして、パターンマッチング部120は、S1023およびS1024の探索の結果、一致した行・列の範囲が重なるオブジェクトが1つもなければ(S1025でNo)、マッチング結果falseをマッチング結果保持部145へ出力する(S1026)。
一方、一致した行・列の範囲が重なるオブジェクトが1つ以上あれば(S1025でYes)、パターンマッチング部120は、マッチング結果trueをマッチング結果保持部145へ出力し(S1027)、S1028へ進む。そして、パターンマッチング部120は、S1021で読み込んだ配置パターンのうち未探索のものがあれば(S1028でNo)、S1024へ戻る。一方、パターンマッチング部120は、S1021で読み込んだ配置パターンすべてについて探索済みであれば(S1028:全パターンで探索した?でYes)、マッチング結果trueと、重なるオブジェクトを起点に上下左右に一致した行列のグリッド集合をマッチング結果保持部145へ出力する(S1029)。例えば、パターンマッチング部120は、符号1201に示すグリッド行列のマッチング結果trueと、符号1202に示す列と符号1203に示す行とをマッチング結果保持部145へ出力する。
次に、図13を用いて、図10AのS108の変数変換処理を詳細に説明する。まず、変数変換部130は、マッチング結果保持部145からマッチング結果を読み込む(S1041)。その後、変数変換部130は、マッチング結果がマッチであれば(S1042でYes)、マッチした回数、つまり、マッチング結果trueとなり、一致した行・列の範囲の重なるオブジェクトを起点に上下左右に一致した行列のグリッド集合に対し、S1043〜S1046の処理を実行する。なお、マッチング結果がマッチでなければ(S1042でNo)、つまり、マッチング結果がfalseであれば、変数変換部130は、S1043〜S1046の処理を行わない。
S1042でYesだったとき、変数変換部130は、縦方向、横方向の1次元正規表現に従ってマッチしたときに合致するオブジェクト群(つまり、マッチング結果trueとなったグリッド行列上の行・列の組み合わせに含まれるオブジェクト群)に、変数名リスト保持部142に記憶される変数名リスト上の変数名を割り当てる(S1043)。そして、変数変換部130は、変数名リスト保持部142における変数名リストを参照して、S1043で割り当てた変数名に対応する制約条件があれば、この変数名に対する制約条件を判定し(S1044)、オブジェクトが当該変数名に対応する制約条件を満たしていれば(S1045でYes)、当該変数名とオブジェクトの組み合わせをオブジェクト変数保持部146へ出力する(S1046)。一方、オブジェクトが当該変数名に対応する制約条件を満たしていなければ(S1045でNo)、S1046の処理を実行しない。
このようにすることで、変数変換部130は、パターンマッチング部120において検索クエリに示される配置パターンとマッチすると判断された画面上のオブジェクト群から、検索クエリで指定される変数名の制約条件を満たすオブジェクト群を出力することができる。
次に、図3の画面認識部(画面認識装置)100を詳細に説明する。
まず、図14を用いて本実施形態の画面認識装置100の概要を説明する。画面認識装置100は、アプリケーションにより表示される画面上のオブジェクトの相対的な位置を認識し、その認識結果を示す情報(画面認識情報)を出力する。画面認識情報は、例えば、図14に示すように、画面上の各オブジェクトの相対的な位置を最小のグリッド行列に配置した情報である。
例えば、画面認識装置100は、図14に示すように、画面情報(画面上の各オブジェクトの絶対位置座標等を示す情報)を取得すると、この画面情報から各オブジェクトの相対的な位置を示す、グリッド行列を生成し、出力する。
なお、以下の説明において、画面上のオブジェクトの相対位置(相対関係)を表現するための格子状の矩形をグリッドと呼び、グリッドを所定の行列数で並べたものをグリッド行列と呼ぶ。また、このグリッド行列上のオブジェクトに、それぞれのオブジェクトの属性(例えば、イメージやボタン、ラベル等)や、オブジェクトに記載されたテキスト情報(例えば、「別のアカウントを使用」等)を併記してもよい。
このように画面認識装置100が画面上の各オブジェクトの相対位置関係を抽象的に認識することで、例えば、操作支援に必要なオブジェクトを検索しやすくなる。
例えば、図15に示すように操作支援を行う装置が、操作対象となる画面上のオブジェクトの配置パターンや変数名定義を含む問い合わせ(クエリ)を受信すると、画面上から、クエリに示される配置パターンに合致するオブジェクト(図15の太線で囲まれたウィンドウ上にあるGUI部品)を検索することができる。そして、上記の装置は、検索されたオブジェクト(操作対象となるオブジェクト)を出力する。例えば、上記の装置は、操作対象となるbutton_setが太線で囲まれたウィンドウ上の23番目のオブジェクト(“設定”ボタン)であり、button_okが太線で囲まれたウィンドウ上の24番目のオブジェクト(“OK”ボタン)であるという結果を出力する。
次に、図16を用いて、画面認識装置100の構成を説明する。画面認識装置100は、オブジェクト情報取得部111と、相対位置情報取得部112と、グリッド行生成部113と、グリッド配置部114とを備える。
また、画面認識装置100は、記憶部(図示省略)に、オブジェクト情報保持部121と、相対位置情報保持部122と、グリッド行保持部123とを備える。オブジェクト情報保持部121は、オブジェクト情報取得部111から出力されたオブジェクト情報を記憶する。相対位置情報保持部122は、相対位置情報取得部112から出力された相対位置情報を記憶する。グリッド行保持部123は、グリッド行生成部113から出力されたグリッド行を記憶する。
オブジェクト情報取得部111は、アプリケーションの表示する画面の画面情報から、画面上に表示される各オブジェクトの相対位置を認識するための情報(オブジェクト情報)を取得する。例えば、オブジェクト情報は、例えば、class(属性)、text(テキスト情報)、area(絶対座標情報)等の情報である。
例えば、オブジェクト情報取得部111は、図17に示す画面情報から、画面上のオブジェクトそれぞれにindex(例えば、1〜4)を付け、当該オブジェクトのclass(属性)、text(テキスト情報)、area(絶対座標情報)を取得し、図17に示すオブジェクト情報を生成する。そして、オブジェクト情報取得部111は生成したオブジェクト情報をオブジェクト情報保持部121に出力する。
相対位置情報取得部112は、オブジェクト情報に示される各オブジェクトの絶対座標情報から、画面上の任意の2つのオブジェクト間の相対位置を示す相対位置情報を取得する。つまり、相対位置情報取得部112は、各オブジェクトの絶対座標情報に基づき、画面上の任意の2つのオブジェクト間の相対位置を示す相対位置情報を生成し、相対位置情報保持部122に出力する。
例えば、相対位置情報取得部112は、図18に示すように、オブジェクト情報に示される画面上の任意の2つのオブジェクトについて、一方のオブジェクトが他方のオブジェクトの、相対的に右/左/横方向に同位のオブジェクトか(左右相対関係)、相対的に下/上/縦方向に同位のオブジェクトか(上下相対関係)、縦/横方向に隣り合っている(最近傍の)オブジェクトか(最近傍オブジェクト)を判断する。そして、その判断結果を相対位置情報に記録する。
例えば、相対位置情報取得部112は、2つのオブジェクト(obj1とobj2)について、符号501に示すように、obj2がobj1の相対的右に位置するか、obj1の相対的左に位置するか、obj1と横方向に同位(つまり、obj1とobj2とでx座標の少なくとも一部が重なっている)かを判断する。また、相対位置情報取得部112は、符号502に示すように、obj2が、obj1の相対的下に位置するか、obj1の相対的上に位置するか、obj1と縦方向に同位(つまり、obj1とobj2とでy座標の少なくとも一部が重なっている)かを判断する。さらに、相対位置情報取得部112は、符号503に示すように、obj2が、obj1に隣り合っている(離れていても良い)か、obj1に隣り合っていないか判断する。なお、obj2が、obj1に隣り合っていない場合とは、obj2とobj1との間に別オブジェクト(obj3)がある場合や、obj2が、obj1の斜め(縦にも横にも同位でない)に位置する場合等が該当する。
例えば、obj2とobj1とが図19の(1)に示す各位置である場合、相対位置情報取得部112は、obj2が、obj1に対し縦/横方向に隣り合っている(最近傍の)オブジェクトと判断する。一方、obj2とobj1とが図19の(2)に示す各位置である場合、相対位置情報取得部112はobj2が、obj1に対し最近傍ではないと判断する。なお、相対位置情報取得部112は、図19に示すように、obj2とobj1とが重なっているような場合については扱わないものとする。
図16のグリッド行生成部113は、オブジェクトの相対位置情報に基づき、画面上の最左上のオブジェクトを起点に左から右へオブジェクトを配置したグリッド行を生成する。そして、グリッド行生成部113は、生成したグリッド行を、例えば、最左上のオブジェクトを起点に、グリッド行を生成した順序でグリッド行保持部123に出力する。
例えば、グリッド行生成部113は、図20の左に示す画面上の8個のオブジェクトについて、相対位置情報において縦方向に同位にあるオブジェクトを同じグリッド行に左→右の順に並べ、図20の右に示す5行のグリッド行を生成する。なお、図20の右に示すグリッド行の左に付された数字は、グリッド行の取得順序または当該グリッド行が配置される行番号を示す。
また、例えば、グリッド行生成部113は、図21の左に示す画面上の14個のオブジェクトについて、相対位置情報において縦方向に同位にあるオブジェクトを同じグリッド行に左→右の順に並べ、図21の右に示す9行のグリッド行を生成する。
このように、グリッド行生成部113は、相対位置情報に基づき、画面上の最左上のオブジェクトを起点に相対的に縦方向に同位であるオブジェクト群を左から右へ配置してグリッド行を生成する処理を、グリッド行の下のオブジェクトがなくなるまで順次実行することでグリッド行群を生成する。
図16のグリッド配置部114は、グリッド行生成部113により生成されたグリッド行群を、相対位置情報に基づき、グリッド行に含まれるオブジェクトの上下の相対位置に従い配置することでグリッド行列を生成し、出力する。
例えば、グリッド配置部114は、グリッド行保持部123に記憶されるグリッド行群についてグリッド行の処理順(行番号順)に、各グリッド行に含まれるオブジェクトの上下の相対位置を保つように配置する。具体的には、グリッド配置部114は、相対位置情報を参照して、各グリッド行に含まれるオブジェクトのうち相対的に横方向に同位(図18参照)のオブジェクト間で上下の相対位置を保つように配置する。
例えば、グリッド配置部114は、オブジェクトAに対し、オブジェクトBが相対的に横方向に同位かつ相対的上に位置する場合、グリッド行列においてオブジェクトAの上の位置かつ同じ列にオブジェクトBが来るように、オブジェクトAを含むグリッド列およびオブジェクトBを含むグリッド列を配置する。これにより、グリッド配置部114は、相対的に横方向に同位かつ相対的下/上に位置するオブジェクト同士を同じ列に配置したグリッド行列を生成することができる。このグリッド行の配置については、具体例を用いて後記する。
また、グリッド配置部114は、グリッド行に含まれるオブジェクトのまま配置したのでは、グリッド行に含まれるオブジェクトのうち相対的に横方向に同位(図18参照)のオブジェクト間で上下の相対位置を保つことができない場合、グリッド行に含まれるオブジェクトの一部を増加させた上で配置する。ここでのオブジェクトの増加についても、具体例を用いて後記する。
ここでグリッド行の配置の具体例を説明する。なお、以下の説明において、「上位のオブジェクト」とは現在着目しているオブジェクトに対し、横方向に同位、かつ、相対的上にあるオブジェクトを指す。また、図22、図23および図24に示す説明において、例えば、オブジェクト1,2,…は、適宜「1,2,…」等と略して表記している。
例えば、グリッド配置部114は、図20に示したグリッド行について、図22に示すようにしてグリッド行を配置し、グリッド行列を生成する。
まず、グリッド配置部114は、図22に示すグリッド行群から、1行目のグリッド行を取り出す(図22のS1)。次に、グリッド配置部114は、2行目のグリッド行を取り出すと、2行目のグリッド行のオブジェクト3の上位にオブジェクト1を持つため、1行目のグリッド行のオブジェクト3の上にオブジェクト1を追加する(S2)。そして、グリッド配置部114は3行目のグリッド行を取り出すと、それぞれのグリッド行のオブジェクトの上下の相対位置は保たれているので、配置の変更無しとして(S3)、S4へ進む。
S3の後、グリッド配置部114は、4行目のグリッド行を取り出すと、それぞれのグリッド行のオブジェクトの上下の相対位置は保たれているので、配置の変更無しとして(S4)、S5へ進む。その後、グリッド配置部114は、5行目のグリッド行を取り出す。ここで、5行目のグリッド行のオブジェクト7は上位にオブジェクト6を持つため、グリッド配置部114は、オブジェクト7がオブジェクト6の下になるように配置する。また、オブジェクト8の上位に1を持つため、グリッド配置部114は、オブジェクト8がオブジェクト1の下になるようにオブジェクト1を追加する(S5)。このようにすることでグリッド配置部114は、図20に示したグリッド行群の配置を完了する。
また、例えば、グリッド配置部114は、図21に示したグリッド行について、図23、図24に示すようにしてグリッド行を配置する。
すなわち、グリッド配置部114は、図21に示すグリッド行群から、1行目のグリッド行を取り出し(図23のS11)、次に、2行目のグリッド行を取り出すと、オブジェクト3の上位にオブジェクト1を持つため、1行目のグリッド行の2列目にオブジェクト1を追加し(S12)、S13へ進む。続いて、グリッド配置部114は3行目のグリッド行を取り出すと、オブジェクト4の上位(相対的上)にオブジェクト1,2,3を持つため、3行目のグリッド行の2列目にオブジェクト4を追加する(S13)。
S13の後、グリッド配置部114は、4行目のグリッド行を取り出すと、4行目のグリッド行のオブジェクト5は上位にオブジェクト1,2,3,4を持つため、4行目のグリッド行の2列目にオブジェクト5を追加する(S14)。
S14の後、グリッド配置部114は、5行目のグリッド行を取り出す。ここで、5行目のグリッド行のオブジェクト6は上位にオブジェクト1,3,4を持つが、オブジェクト2,5を持たないため、グリッド配置部114は、新たな列(3列目)に5行目のグリッド行の行頭(オブジェクト6)が来るように配置し、また、その列(3列目)にオブジェクト1,3,4を追加する(S15)。つまり、グリッド配置部114は、4行目のグリッド行を配置した上で、符号1001に示すオブジェクトからなる列を追加する。
S15の後、グリッド配置部114は、6行目のグリッド行を取り出す。ここで、6行目のグリッド行のオブジェクト7は上位にオブジェクト1〜5を持つため、グリッド配置部114は、6行目のグリッド行の2列目にオブジェクト7を追加する(S16)。ここで、S16の処理後、6行目のグリッド行のオブジェクト8は3列目以降にしか配置できない。更に、オブジェクト8は上位にオブジェクト1,3,4,5,6を持つため、グリッド配置部114は、3列目の前にオブジェクト1,3,4,5,8を追加する(S17)。つまり、グリッド配置部114は、6行目のグリッド行を配置した上で、3列目に符号1002に示すオブジェクトからなる列を挿入する。
S17の後、グリッド配置部114は、7行目のグリッド行を取り出す。ここで、7行目のグリッド行のオブジェクト9は上位にオブジェクト1〜8を持つため、グリッド配置部114は、7行目のグリッド行の2〜4列目にオブジェクト9を追加する(S18)。
図24のS19の説明に移る。S18の後、7行目のグリッド行のオブジェクト10は上位にオブジェクト1,3,4,6,8を持つため、グリッド配置部114は、5列目に、それら(オブジェクト1,3,4,6,8)とオブジェクト10を配置する(S19)。
S19の後、グリッド配置部114は、8行目のグリッド行を取り出す。ここで、8行目のグリッド行のオブジェクト11は上位にオブジェクト1〜10を持つため、グリッド配置部114は、8行目のグリッド行の2〜4列目にオブジェクト11を追加する(S20)。
S20の後、グリッド配置部114は、9行目のグリッド行を取り出す。ここで、9行目のグリッド行のオブジェクト12は上位にオブジェクト1,3,4,5,6,8,9,11を持つため、3,4列目にオブジェクト12を配置する(S21)。
S21の後、9行目のグリッド行のオブジェクト13は上位にオブジェクト1,3,4,6,8,9,10,11を持つが、オブジェクト9が不足し、かつオブジェクト13は5列目以降にしか配置できない。そのため、グリッド配置部114は、4〜5列目の間に列を挿入してオブジェクト1,3,4,6,8,9,11,13の列を追加する(S22)。
S22の後、9行目のグリッド行のオブジェクト14は上位にオブジェクト1,3,4,6,8,10を持つが、7列目以降にしか配置できない。そのため、グリッド配置部114は、7列目(オブジェクト14の上位)にオブジェクト1,3,4,6,8,10を追加する(S23)。
このようにすることで、グリッド配置部114は、オブジェクト間の上下左右の相対位置を反映したグリッド行列を生成することができる。また、グリッド配置部114は、グリッド行列を生成する際、相対的に縦方向に同位かつ相対的左/右に位置するオブジェクト同士を同じ行に配置し、また、相対的に横方向に同位かつ相対的下/上に位置するオブジェクト同士を同じ列に配置する。
これにより、グリッド配置部114は、画面上で横方向にほぼ同じ位置に並んでいるオブジェクトを同じ行に配置し、画面上で縦方向にほぼ同じ位置に並んでいるオブジェクトを同じ列に配置したグリッド行列を得ることができる。つまり、グリッド配置部114は画面上でオブジェクトの配置ズレがあったとしてもこれを丸め込んだ画面認識情報(グリッド行列)を生成することができる。換言すると、グリッド配置部114はロバストに画面上のオブジェクトの位置関係を認識することができる。
(処理手順)
次に、図25Aを用いて画面認識装置100の処理手順の概要を説明する。まず、画面認識装置100のオブジェクト情報取得部111は、画面情報に基づきオブジェクト情報を取得し(S121:オブジェクト情報取得)、相対位置情報取得部112は、オブジェクト情報における各オブジェクトの絶対座標情報に基づき、オブジェクト間の相対位置情報を取得する(S122:相対位置情報取得)。そして、グリッド行生成部113は、相対位置情報に基づき、グリッド行を生成し(S123:グリッド行生成)、グリッド配置部114は、生成したグリッド行を配置する(S124:グリッド配置)。
次に、図25Bを用いて、図25AのS121のオブジェクト情報取得処理を詳細に説明する。まず、オブジェクト情報取得部111は、画面情報を読み込み(S1211)、画面情報から各オブジェクトのクラス(class)、絶対座標(area)、あればテキスト(text)を取得し(S1212)、各オブジェクトにインデックス(index)を振る(S1213)。そして、オブジェクト情報取得部111は、各オブジェクトのクラス(class)、絶対座標(area)、あればテキスト(text)、インデックス(index)を対応付けた情報(オブジェクト情報)をオブジェクト情報保持部121へ出力する(S1214)。
なお、オブジェクト情報は、オブジェクトごとにクラスを生成し、プロパティとして情報を保持してもよいし、行列で保持してもよい。
次に、図26を用いて、図25AのS122の相対位置情報取得処理を詳細に説明する。まず、相対位置情報取得部112は、オブジェクト情報保持部121のオブジェクト情報を読み込むと(S1221)、各オブジェクトの絶対座標に基づき、各オブジェクトの左右相対関係を取得し(S1222:左右相対関係取得)、上下相対関係を取得し(S1223:上下相対関係取得)、最近傍オブジェクトを取得する(S1224:最近傍オブジェクト取得)。そして、相対位置情報取得部112は、取得した情報を相対位置情報として記録し、相対位置情報保持部122へ出力する(S1225)。
なお、相対位置情報は、オブジェクトごとにリストで保持してもよいし、行列で保持してもよい。また、相対位置を計算するための関数を用意しておき、相対位置情報取得部112が都度、オブジェクトの相対位置を計算するようにしてもよい。
次に、図27を用いて、図26のS1222の左右相対関係取得処理を詳細に説明する。ここでは、2つのオブジェクト(obj1とobj2)の左右の相対関係(相対位置)を判断する場合を例に説明する。
なお、以下の説明では、obj1の左上の座標を(px1,py1)、右下の座標を(qx1,qy1)とし、obj2の左上の座標を(px2,py2)、右下の座標を(qx2,qy2)とする。
相対位置情報取得部112は、オブジェクト情報からオブジェクト(obj1とobj2)の座標位置の情報を読み込み(S131)、obj1とobj2の座標位置がx軸方向についてpx2≧qx1(S132で「px2≧qx1」)、つまり、obj1のx軸最大値がobj2のx軸最小値以下ならば、obj2はobj1の相対右(val=1)であると判断する(S133)。
一方、obj1とobj2の座標位置がx軸方向についてqx2≦px1(S132で「qx2≦px1」)、つまり、obj1のx軸最小値がobj2のx軸最大値以上ならば、相対位置情報取得部112は、obj2はobj1の相対的左(val=-1)であると判断する(S134)。
さらに、px2≧qx1でもqx2≦px1でもない場合(S132で「else」)、つまり、px1≦px2≦qx1またはpx1≦qx2≦qx1の場合、相対位置情報取得部112は、obj2はobj1と横方向に同位(val=0)であると判断する(S135)。
そして、相対位置情報取得部112は、S133〜S135の判断結果(val)をオブジェクトの左右相対関係に関する情報として出力する(S136)。
次に、図28を用いて、図26のS1223の上下相対関係取得処理を詳細に説明する。ここでも、2つのオブジェクト(obj1とobj2)の上下の相対位置を判断する場合を例に説明する。なお、図28に示すようにオブジェクトのy軸の値は画面下のオブジェクトほど高い値になるものとする。
相対位置情報取得部112は、オブジェクト情報からオブジェクト(obj1とobj2)の座標位置の情報を読み込み(S141)、obj1とobj2の座標位置がy軸方向についてpy2≧qy1(S142で「py2≧qy1」)、つまり、obj1のy軸最大値がobj2のy軸最小値以下ならば、obj2はobj1の相対的下(val=1)であると判断する(S143)。
一方、obj1とobj2の座標位置がy軸方向についてqy2≦py1(S142で「qy2≦py1」)、つまり、obj1のy軸最小値がobj2のy軸最大値以上ならば、相対位置情報取得部112は、obj2はobj1の相対的上(val=-1)であると判断する(S144)。
さらに、py2≧qy1でもqy2≦py1でもない場合(S142で「else」)、相対位置情報取得部112は、obj2はobj1と縦方向に同位(val=0)であると判断する(S145)。
そして、相対位置情報取得部112は、S143〜S145の判断結果(val)をオブジェクトの上下相対関係に関する情報として出力する(S146)。
次に、図29を用いて、図26のS1224の最近傍オブジェクト取得処理を詳細に説明する。例えば、相対位置情報取得部112が、オブジェクト(obj1)の左右相対関係および上下相対関係に関する情報を読み込み(S152)、オブジェクト(obj1)の横方向最近傍オブジェクトを取得し(S153)、また、オブジェクト(obj1)の縦方向最近傍オブジェクトを取得すると(S154)、これらをまとめてオブジェクト(obj1)の最近傍オブジェクトとして出力する(S155)。例えば、相対位置情報取得部112は、符号1601に示すオブジェクト(obj2)のうち、太線で囲まれたオブジェクト(obj2)をオブジェクト(obj1)の最近傍オブジェクトとして出力する。
次に、図30を用いて、図29のS153の横方向最近傍オブジェクト取得処理を詳細に説明する。例えば、相対位置情報取得部112が、オブジェクト(obj1)の左右相対関係に関する情報を読み込み(S161)、横方向最近傍オブジェクト群neighbor={}を設定する(S162)。なお、S162の段階ではneighbor={}は空の状態である。
S162の後、相対位置情報取得部112は、obj1の左右相対関係に関する情報から、obj1と縦方向に同位のオブジェクト群(M)を取得する(S163)。例えば、相対位置情報取得部112は、吹き出し1701に示すobj2群を取得する。
S163の後、相対位置情報取得部112は、上記のMに属するobj2それぞれについてS164〜S170に示す処理を実行する。すなわち、相対位置情報取得部112は、obj1からみたobj2の相対位置が相対的左であり(S164で「相対的左」)、Mにobj2とobj1の間に配置されるオブジェクトがなければ(S165でNo)、当該obj2をobj1の最近傍と判断しneighborに追加する(S167)。
一方、Mにobj2とobj1の間に配置されるオブジェクトがあれば(S165でYes)、相対位置情報取得部112は、当該obj2をobj1の最近傍と判断しない(S168)。また、相対位置情報取得部112は、obj1からみたobj2の相対位置が相対的右である場合(S164で「相対的右」)も同様に、Mにobj2とobj1の間に配置されるオブジェクトがなければ(S166でNo)、当該obj2をobj1の最近傍と判断し、neighborに追加する(S169)。
一方、Mにobj2とobj1の間に配置されるオブジェクトがあれば(S166でYes)、相対位置情報取得部112は、当該obj2をobj1の最近傍と判断しない(S170)。
そして、相対位置情報取得部112は、S167〜S170の処理により、obj1の最近傍と判断されたobj2群を横方向最近傍オブジェクト群neighborとして出力する(S171)。
例えば、相対位置情報取得部112は、吹き出し1701に示すobj2群のうち、○の付されたobj2群についてobj1の横方向最近傍オブジェクト群neighborとして出力する。一方、吹き出し1701に示すobj2群のうち、×の付されたobj2群はobj1との間に他のオブジェクトが配置されるので横方向最近傍オブジェクト群neighborとして出力しない。
次に、図31を用いて、図29のS154の縦方向最近傍オブジェクト取得処理を詳細に説明する。例えば、相対位置情報取得部112が、オブジェクト(obj1)の上下相対関係に関する情報を読み込み(S172)、縦方向最近傍オブジェクト群neighbor={}を設定する(S173)。なお、S173の段階ではneighbor={}は空の状態である。
S173の後、相対位置情報取得部112は、obj1の上下相対関係に関する情報から、obj1と横方向に同位のオブジェクト群(M)を取得する(S174)。例えば、相対位置情報取得部112は、吹き出し1801に示すobj2群を取得する。
そして、相対位置情報取得部112は、Mに属するobj2それぞれについてS175〜S181に示す処理を実行する。すなわち、相対位置情報取得部112は、obj1からみたobj2の相対位置が相対的上であり(S175で「相対的上」)、Mにobj2とobj1の間に配置されるオブジェクトがなければ(S176でNo)、当該obj2をobj1の最近傍と判断しneighborに追加する(S178)。
一方、Mにobj2とobj1の間に配置されるオブジェクトがあれば(S176でYes)、相対位置情報取得部112は、当該obj2をobj1の最近傍と判断しない(S179)。また、相対位置情報取得部112は、obj1からみたobj2の相対位置が相対的下である(S175で「相対的下」)場合も同様に、Mにobj2とobj1の間に配置されるオブジェクトがなければ(S177でNo)、当該obj2をobj1の最近傍と判断し、neighborに追加する(S180)。一方、Mにobj2とobj1の間に配置されるオブジェクトがあれば(S177でYes)、相対位置情報取得部112は、当該obj2をobj1の最近傍と判断しない(S181)。
そして、相対位置情報取得部112は、S178〜S181の処理により、obj1の最近傍と判断されたobj2群を縦方向最近傍オブジェクト群neighborとして出力する(S182)。例えば、相対位置情報取得部112は、吹き出し1801に示すobj2群のうち、○の付されたobj2群についてobj1の縦方向最近傍オブジェクト群neighborとして出力する。なお、吹き出し1801に示すobj2群のうち、×の付されたobj2群はobj1との間に他のオブジェクトが配置されるので縦方向最近傍オブジェクト群neighborには含めない。
以上の処理により、相対位置情報取得部112が、各オブジェクトの相対的左/右および相対的下/上の位置関係と、最近傍のオブジェクトとを示した相対位置情報を作成することができる。
次に、図32を用いて、図25AのS123のグリッド行生成処理を詳細に説明する。
まず、グリッド行生成部113は、オブジェクト群の相対位置情報を読み込む(S191)。次に、グリッド行生成部113は、オブジェクト群の相対位置情報を参照して、obj(処理対象とするオブジェクト)として最左上のオブジェクトを選択し(obj←最左上のオブジェクト)、グリッド行集合S={}、探索済オブジェクト集合CS={}、未探索オブジェクト集合US={}を設定する(S192)。なお、S192の段階で、未探索オブジェクト集合USには、S191で読み込んだ相対位置情報の対象となるオブジェクト群が設定される。
そして、グリッド行生成部113は、すべてのオブジェクトを処理するまで、S193〜S199の処理を実行する。
まず、グリッド行生成部113は、オブジェクト群の相対位置情報を参照して、objと縦方向に同位のオブジェクト群を左→右の順に取得し、これをグリッド行とする(S193)。次に、グリッド行生成部113は、S193で得たグリッド行をグリッド行集合Gに追加し(S194)、CS(探索済オブジェクト集合)にグリッド行を追加し、US(未探索オブジェクト集合)からグリッド行を削除する(S195)。
S195の後、グリッド行生成部113が、相対位置情報を参照して、objの相対的下にあり、かつ最近傍のオブジェクトが存在すると判断した場合(S196でYes)、当該最近傍のオブジェクト群の中で、最も上のオブジェクト群を取得する(S197)。そして、グリッド行生成部113は、取得したオブジェクト群の中で最も左にあるオブジェクトを次のobjとする(S199)。例えば、グリッド行生成部113は、吹き出し1901に示すように、objの下に最近傍のオブジェクト群があれば、その中でy軸の値が最も小さいオブジェクト(太線で示したオブジェクト)を次のobjとする。そして、グリッド行生成部113は、この次のobjを対象としてS193以降の処理を行う。
一方、グリッド行生成部113が、相対位置情報を参照して、objの相対的下にオブジェクトが存在しない、または、objの相対的下にオブジェクトが存在したとしても、当該オブジェクトはobjの最近傍のオブジェクトではないと判断した場合(S196でNo)、グリッド行生成部113は、US(未探索オブジェクト集合)から最上位のオブジェクト群を取得し(S198)、S199へ進む。
グリッド行生成部113は、上記の処理を未探索オブジェクト集合US={}が空になるまで実行し、生成したグリッド行集合を出力する(S200)。
以上の処理により、グリッド行生成部113は、横方向に同位のオブジェクト群を左から横に並べたグリッド行を生成することができる。例えば、グリッド行生成部113は、図20に示す画面のオブジェクト群から、図22に示すグリッド行群を生成する。
次に、図33を用いて、図25AのS124のグリッド配置処理を詳細に説明する。例えば、グリッド配置部114は、グリッド行集合を読み込み(S201)、読み込んだグリッド行集合Sをy軸の小さい順(グリッド行の位置が高いものから低い順)にソートする(S202)。次に、グリッド配置部114は、初期グリッドGを生成し、1行目にグリッド行集合Sの1行目を配置する(S203)。例えば、グリッド配置部114は、符号2001に示す初期グリッドGを生成すると、1行目にグリッド行集合Sの1行目(オブジェクト1を含むグリッド行列)を配置する。
そして、グリッド配置部114は、グリッド行集合Sのすべてのグリッド行を処理するまで、S204〜S209に示す処理を実行する。
まず、グリッド配置部114は、グリッド行集合Sをx軸の小さい順にソートし(S204)、グリッド行上の各オブジェクト(obj)に対して、S205〜S209の処理を実行する。つまり、グリッド配置部114は、グリッド行集合Sからobjが配置できる最小列番号iを取得する(S205)。次に、グリッド配置部114は、グリッド行集合Sにおいてobjの上位のオブジェクト群のある列群を取得し(S206)、以下に示す条件を満たす列群がi列以降に存在するか否かを判断する(S207)。
この条件とは、上位(相対的上かつ横に同位)のオブジェクト群をu、グリッド列(S206で取得した列群)をq={q1,q2,…,qn}、xiをグリッド列iにオブジェクトを配置するか否か(1/0)とするとき、qはuの部分集合(q⊆u)、かつ、Σqi xi=|u|であるように配置する、という条件である。
つまり、あるオブジェクトiと同じ列に配置されるオブジェクトは、オブジェクトiの上位のいずれかのオブジェクトであり、かつ、オブジェクトiと同じ列に配置されるオブジェクトの種類の数は、オブジェクトiの上位(オブジェクトiの相対的上かつ横に同位)のオブジェクトの個数と同じである、という条件である。換言すると、オブジェクトiと同じ列の上位に配置されるオブジェクト群は、相対位置情報において当該オブジェクトiの上位に存在するすべてのオブジェクトを網羅している、という条件である。
S207において、グリッド配置部114は、上記条件を満たす列群がi列以降に存在すると判断した場合(S207でYes)、G(グリッド)のobjを上記の条件を満たす列に配置する(S208)。一方、グリッド配置部114は、上記条件を満たす列群がi列以降に存在しないと判断した場合(S207でNo)、G(グリッド)に列に挿入する(S209)。この列の挿入処理について、図34を用いて後記する。
そして、グリッド配置部114は、上記の処理をグリッド行集合のすべてのグリッド行に対し行うと、生成したグリッド(グリッド行列)を出力する(S210)。
以上の処理により、グリッド配置部114は、縦方向に同位のオブジェクト群が同じ列になるよう配置したグリッド行列を生成することができる。
次に、図34を用いて、図33のS209の列の挿入処理を詳細に説明する。グリッド配置部114は、探索行(objの上位のオブジェクト群が存在するグリッド行)の最右列に配置されているオブジェクトをobj2とする(S2091)。そして、グリッド配置部114がobj2はobj1の相対的右であると判断した場合(S2092でYes)、obj2の配置されている行の最左の左側に空の列を追加する(S2093)。
S2093の後、グリッド配置部114は、obj2と上位のオブジェクト群を追加したときに他の各行の配置順に矛盾が発生しないようにobjの上位のオブジェクトとobjを配置する(S2094)。つまり、グリッド配置部114は、追加対象のオブジェクトの配置される行について、相対位置情報を参照して、他のオブジェクトが正しい相対位置関係であるかどうかをチェックする。そして、グリッド配置部114は、相対位置関係に矛盾が発生する場合は矛盾を解消するように、オブジェクトの左または右に列を追加する。
一方、グリッド配置部114がobj2はobj1の相対的右ではなく(S2092でNo)、相対的左と判断した場合(S2095でYes)、グリッド配置部114は、最右列+1列目に空の列を追加して、各行の配置順に矛盾が発生しないようにobjの上位のオブジェクトとobjを配置する(S2096)。なお、グリッド配置部114がobj2はobj1の相対的右でもなく(S2092でNo)、相対的左でもないと判断した場合(S2095でNo)、S2096の処理は行わない。
以上の処理により、グリッド配置部114は、縦方向に同位のオブジェクト群が同じ列になるよう配置したグリッド行列を確実に生成することができる。
(本実施形態の適用例)
以上説明した画面認識装置100によれば、様々なアプリケーションにより表示される画面上の各オブジェクトに対してオブジェクト同士の相対関係を認識できる。
例えば、画面認識装置100は、図35の符号2200に示す旅行の予約用アプリケーションの画面上のオブジェクトの配置を認識し、符号2201に示す画面認識情報(グリッド行列)を得る。
これにより、当該アプリケーションの画面上の情報の検索システムは、符号2201の画面情報におけるImage,Buttonオブジェクト削除、項目名の定義(例えば、Labelクラスを項目名とする、指定のラベル名を項目名とするなど)の処理を行うことで、符号2202に示す画面認識情報を得る。これにより、検索システムは、「往路に関する情報をまとめて抽出」等、項目名を利用した高度な検索ができる。
さらに、上記の画面認識装置100による画面認識技術を用いることで、アプリケーションの画面上のオブジェクトの相対位置による問い合わせ検索もできる。
例えば、図36の(1)に示すように、アプリケーションの画面上における、「決裁状況」の3つ右の画像が比較元の画像(アイコン)と同じかをチェックするというクエリ(問い合わせ)を受け付けた場合において、アプリケーションの画面上における、「決裁状況」の3つ右の画像が比較元の画像(アイコン)と同じか否かの結果を返すことができる。
さらに、例えば、図36の(2)に示すように、アプリケーションの画面上における、「備品番号」の下にある画像群の中で「95-600727」を検索するクエリ(問い合わせ)を受け付けた場合において、アプリケーションの画面上における、「備品番号」の下にある画像群の中で「95-600727」の検索結果を返すことができる。
また、上記の画面認識装置100による画面認識技術を既存の画像マッチング技術と組み合わせることで、特定し終わった各々の画像要素に対して、さらに相対位置情報を利用して絞り込んだマッチングを行い、より条件に合った正しい要素を選択する等、高精度なマッチングを実現することもできる。
(プログラム)
また、上記の実施形態で述べたオブジェクト検索装置1は、オブジェクト検索装置1の機能を実現するオブジェクト検索プログラムを所望の情報処理装置(コンピュータ)にインストールすることによって実装できる。例えば、パッケージソフトウェアやオンラインソフトウェアとして提供される上記のオブジェクト検索プログラムを情報処理装置に実行させることにより、情報処理装置をオブジェクト検索装置1として機能させることができる。ここで言う情報処理装置には、デスクトップ型またはノート型のパーソナルコンピュータが含まれる。また、その他にも、情報処理装置にはスマートフォン、携帯電話機やPHS(Personal Handyphone System)等の移動体通信端末、さらには、PDA(Personal Digital Assistants)等がその範疇に含まれる。また、オブジェクト検索装置1を、クラウドサーバに実装してもよい。
以下に、上記のオブジェクト検索プログラムを実行するコンピュータの一例を説明する。図37は、オブジェクト検索プログラムを実行するコンピュータを示す図である。図37に示すように、コンピュータ1000は、例えば、メモリ1010と、CPU(Central Processing Unit)1020と、ハードディスクドライブインタフェース1030と、ディスクドライブインタフェース1040と、シリアルポートインタフェース1050と、ビデオアダプタ1060と、ネットワークインタフェース1070とを有する。これらの各部は、バス1080によって接続される。
メモリ1010は、ROM(Read Only Memory)1011およびRAM(Random Access Memory)1012を含む。ROM1011は、例えば、BIOS(Basic Input Output System)等のブートプログラムを記憶する。ハードディスクドライブインタフェース1030は、ハードディスクドライブ1090に接続される。ディスクドライブインタフェース1040は、ディスクドライブ1100に接続される。ディスクドライブ1100には、例えば、磁気ディスクや光ディスク等の着脱可能な記憶媒体が挿入される。シリアルポートインタフェース1050には、例えば、マウス1110およびキーボード1120が接続される。ビデオアダプタ1060には、例えば、ディスプレイ1130が接続される。
ここで、図37に示すように、ハードディスクドライブ1090は、例えば、OS1091、アプリケーションプログラム1092、プログラムモジュール1093およびプログラムデータ1094を記憶する。前記した実施形態で説明した各種データや情報は、例えばハードディスクドライブ1090やメモリ1010に記憶される。
そして、CPU1020が、ハードディスクドライブ1090に記憶されたプログラムモジュール1093やプログラムデータ1094を必要に応じてRAM1012に読み出して、上述した各手順を実行する。
なお、プログラムに係るプログラムモジュール1093やプログラムデータ1094は、ハードディスクドライブ1090に記憶される場合に限られず、例えば、着脱可能な記憶媒体に記憶されて、ディスクドライブ1100等を介してCPU1020によって読み出されてもよい。あるいは、プログラムに係るプログラムモジュール1093やプログラムデータ1094は、LAN(Local Area Network)やWAN(Wide Area Network)等のネットワークを介して接続された他のコンピュータに記憶され、ネットワークインタフェース1070を介してCPU1020によって読み出されてもよい。