以下、図面を参照しながら、本発明を実施するための形態(実施形態)について説明する。本発明は、本実施形態に限定されない。
まず、図1を用いて本実施形態の画面認識装置100の概要を説明する。画面認識装置100は、アプリケーションにより表示される画面上のオブジェクトの相対的な位置を認識し、その認識結果を示す情報(画面認識情報)を出力する。画面認識情報は、例えば、図1に示すように、画面上の各オブジェクトの相対的な位置を最小のグリッド行列に配置した情報である。
例えば、画面認識装置100は、図1に示すように、画面情報(画面上の各オブジェクトの絶対位置座標等を示す情報)を取得すると、この画面情報から各オブジェクトの相対的な位置を示す、グリッド行列を生成し、出力する。
なお、以下の説明において、画面上のオブジェクトの相対位置(相対関係)を表現するための格子状の矩形をグリッドと呼び、グリッドを所定の行列数で並べたものをグリッド行列と呼ぶ。また、このグリッド行列上のオブジェクトに、それぞれのオブジェクトの属性(例えば、イメージやボタン、ラベル等)や、オブジェクトに記載されたテキスト情報(例えば、「別のアカウントを使用」等)を併記してもよい。
このように画面認識装置100が画面上の各オブジェクトの相対位置関係を抽象的に認識することで、例えば、操作支援に必要なオブジェクトを検索しやすくなる。
例えば、図2に示すように操作支援を行う装置が、操作対象となる画面上のオブジェクトの配置パターンや変数名定義を含む問い合わせ(クエリ)を受信すると、画面上から、クエリに示される配置パターンに合致するオブジェクト(図2の太線で囲まれたウィンドウ上にあるGUI部品)を検索することができる。そして、上記の装置は、検索されたオブジェクト(操作対象となるオブジェクト)を出力する。例えば、上記の装置は、操作対象となるbutton_setが太線で囲まれたウィンドウ上の23番目のオブジェクト(“設定”ボタン)であり、button_okが太線で囲まれたウィンドウ上の24番目のオブジェクト(“OK”ボタン)であるという結果を出力する。
次に、図3を用いて、画面認識装置100の構成を説明する。画面認識装置100は、オブジェクト情報取得部111と、相対位置情報取得部112と、グリッド行生成部113と、グリッド配置部114とを備える。
また、画面認識装置100は、記憶部(図示省略)に、オブジェクト情報保持部121と、相対位置情報保持部122と、グリッド行保持部123とを備える。オブジェクト情報保持部121は、オブジェクト情報取得部111から出力されたオブジェクト情報を記憶する。相対位置情報保持部122は、相対位置情報取得部112から出力された相対位置情報を記憶する。グリッド行保持部123は、グリッド行生成部113から出力されたグリッド行を記憶する。
オブジェクト情報取得部111は、アプリケーションの表示する画面の画面情報から、画面上に表示される各オブジェクトの相対位置を認識するための情報(オブジェクト情報)を取得する。例えば、オブジェクト情報は、例えば、class(属性)、text(テキスト情報)、area(絶対座標情報)等の情報である。
例えば、オブジェクト情報取得部111は、図4に示す画面情報から、画面上のオブジェクトそれぞれにindex(例えば、1〜4)を付け、当該オブジェクトのclass(属性)、text(テキスト情報)、area(絶対座標情報)を取得し、図4に示すオブジェクト情報を生成する。そして、オブジェクト情報取得部111は生成したオブジェクト情報をオブジェクト情報保持部121に出力する。
相対位置情報取得部112は、オブジェクト情報に示される各オブジェクトの絶対座標情報から、画面上の任意の2つのオブジェクト間の相対位置を示す相対位置情報を取得する。つまり、相対位置情報取得部112は、各オブジェクトの絶対座標情報に基づき、画面上の任意の2つのオブジェクト間の相対位置を示す相対位置情報を生成し、相対位置情報保持部122に出力する。
例えば、相対位置情報取得部112は、図5に示すように、オブジェクト情報に示される画面上の任意の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とが図6の(1)に示す各位置である場合、相対位置情報取得部112は、obj2が、obj1に対し縦/横方向に隣り合っている(最近傍の)オブジェクトと判断する。一方、obj2とobj1とが図6の(2)に示す各位置である場合、相対位置情報取得部112はobj2が、obj1に対し最近傍ではないと判断する。なお、相対位置情報取得部112は、図6に示すように、obj2とobj1とが重なっているような場合については扱わないものとする。
図3のグリッド行生成部113は、オブジェクトの相対位置情報に基づき、画面上の最左上のオブジェクトを起点に左から右へオブジェクトを配置したグリッド行を生成する。そして、グリッド行生成部113は、生成したグリッド行を、例えば、最左上のオブジェクトを起点に、グリッド行を生成した順序でグリッド行保持部123に出力する。
例えば、グリッド行生成部113は、図7の左に示す画面上の8個のオブジェクトについて、相対位置情報において縦方向に同位にあるオブジェクトを同じグリッド行に左→右の順に並べ、図7の右に示す5行のグリッド行を生成する。なお、図7の右に示すグリッド行の左に付された数字は、グリッド行の取得順序または当該グリッド行が配置される行番号を示す。
また、例えば、グリッド行生成部113は、図8の左に示す画面上の14個のオブジェクトについて、相対位置情報において縦方向に同位にあるオブジェクトを同じグリッド行に左→右の順に並べ、図8の右に示す9行のグリッド行を生成する。
このように、グリッド行生成部113は、相対位置情報に基づき、画面上の最左上のオブジェクトを起点に相対的に縦方向に同位であるオブジェクト群を左から右へ配置してグリッド行を生成する処理を、グリッド行の下のオブジェクトがなくなるまで順次実行することでグリッド行群を生成する。
図3のグリッド配置部114は、グリッド行生成部113により生成されたグリッド行群を、相対位置情報に基づき、グリッド行に含まれるオブジェクトの上下の相対位置に従い配置することでグリッド行列を生成し、出力する。
例えば、グリッド配置部114は、グリッド行保持部123に記憶されるグリッド行群についてグリッド行の処理順(行番号順)に、各グリッド行に含まれるオブジェクトの上下の相対位置を保つように配置する。具体的には、グリッド配置部114は、相対位置情報を参照して、各グリッド行に含まれるオブジェクトのうち相対的に横方向に同位(図5参照)のオブジェクト間で上下の相対位置を保つように配置する。
例えば、グリッド配置部114は、オブジェクトAに対し、オブジェクトBが相対的に横方向に同位かつ相対的上に位置する場合、グリッド行列においてオブジェクトAの上の位置かつ同じ列にオブジェクトBが来るように、オブジェクトAを含むグリッド列およびオブジェクトBを含むグリッド列を配置する。これにより、グリッド配置部114は、相対的に横方向に同位かつ相対的下/上に位置するオブジェクト同士を同じ列に配置したグリッド行列を生成することができる。このグリッド行の配置については、具体例を用いて後記する。
また、グリッド配置部114は、グリッド行に含まれるオブジェクトのまま配置したのでは、グリッド行に含まれるオブジェクトのうち相対的に横方向に同位(図5参照)のオブジェクト間で上下の相対位置を保つことができない場合、グリッド行に含まれるオブジェクトの一部を増加させた上で配置する。ここでのオブジェクトの増加についても、具体例を用いて後記する。
ここでグリッド行の配置の具体例を説明する。なお、以下の説明において、「上位のオブジェクト」とは現在着目しているオブジェクトに対し、横方向に同位、かつ、相対的上にあるオブジェクトを指す。また、図9、図10および図11に示す説明において、例えば、オブジェクト1,2,…は、適宜「1,2,…」等と略して表記している。
例えば、グリッド配置部114は、図7に示したグリッド行について、図9に示すようにしてグリッド行を配置し、グリッド行列を生成する。
まず、グリッド配置部114は、図9に示すグリッド行群から、1行目のグリッド行を取り出す(図9の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は、図7に示したグリッド行群の配置を完了する。
また、例えば、グリッド配置部114は、図8に示したグリッド行について、図10、図11に示すようにしてグリッド行を配置する。
すなわち、グリッド配置部114は、図8に示すグリッド行群から、1行目のグリッド行を取り出し(図10の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)。
図11の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はロバストに画面上のオブジェクトの位置関係を認識することができる。
(処理手順)
次に、図12Aを用いて画面認識装置100の処理手順の概要を説明する。まず、画面認識装置100のオブジェクト情報取得部111は、画面情報に基づきオブジェクト情報を取得し(S121:オブジェクト情報取得)、相対位置情報取得部112は、オブジェクト情報における各オブジェクトの絶対座標情報に基づき、オブジェクト間の相対位置情報を取得する(S122:相対位置情報取得)。そして、グリッド行生成部113は、相対位置情報に基づき、グリッド行を生成し(S123:グリッド行生成)、グリッド配置部114は、生成したグリッド行を配置する(S124:グリッド配置)。
次に、図12Bを用いて、図12AのS121のオブジェクト情報取得処理を詳細に説明する。まず、オブジェクト情報取得部111は、画面情報を読み込み(S1211)、画面情報から各オブジェクトのクラス(class)、絶対座標(area)、あればテキスト(text)を取得し(S1212)、各オブジェクトにインデックス(index)を振る(S1213)。そして、オブジェクト情報取得部111は、各オブジェクトのクラス(class)、絶対座標(area)、あればテキスト(text)、インデックス(index)を対応付けた情報(オブジェクト情報)をオブジェクト情報保持部121へ出力する(S1214)。
なお、オブジェクト情報は、オブジェクトごとにクラスを生成し、プロパティとして情報を保持してもよいし、行列で保持してもよい。
次に、図13を用いて、図12AのS122の相対位置情報取得処理を詳細に説明する。まず、相対位置情報取得部112は、オブジェクト情報保持部121のオブジェクト情報を読み込むと(S1221)、各オブジェクトの絶対座標に基づき、各オブジェクトの左右相対関係を取得し(S1222:左右相対関係取得)、上下相対関係を取得し(S1223:上下相対関係取得)、最近傍オブジェクトを取得する(S1224:最近傍オブジェクト取得)。そして、相対位置情報取得部112は、取得した情報を相対位置情報として記録し、相対位置情報保持部122へ出力する(S1225)。
なお、相対位置情報は、オブジェクトごとにリストで保持してもよいし、行列で保持してもよい。また、相対位置を計算するための関数を用意しておき、相対位置情報取得部112が都度、オブジェクトの相対位置を計算するようにしてもよい。
次に、図14を用いて、図13の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)。
次に、図15を用いて、図13のS1223の上下相対関係取得処理を詳細に説明する。ここでも、2つのオブジェクト(obj1とobj2)の上下の相対位置を判断する場合を例に説明する。なお、図15に示すようにオブジェクトの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)。
次に、図16を用いて、図13のS1224の最近傍オブジェクト取得処理を詳細に説明する。例えば、相対位置情報取得部112が、オブジェクト(obj1)の左右相対関係および上下相対関係に関する情報を読み込み(S152)、オブジェクト(obj1)の横方向最近傍オブジェクトを取得し(S153)、また、オブジェクト(obj1)の縦方向最近傍オブジェクトを取得すると(S154)、これらをまとめてオブジェクト(obj1)の最近傍オブジェクトとして出力する(S155)。例えば、相対位置情報取得部112は、符号1601に示すオブジェクト(obj2)のうち、太線で囲まれたオブジェクト(obj2)をオブジェクト(obj1)の最近傍オブジェクトとして出力する。
次に、図17を用いて、図16の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として出力しない。
次に、図18を用いて、図16の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が、各オブジェクトの相対的左/右および相対的下/上の位置関係と、最近傍のオブジェクトとを示した相対位置情報を作成することができる。
次に、図19を用いて、図12Aの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は、図7に示す画面のオブジェクト群から、図8に示すグリッド行群を生成する。
次に、図20を用いて、図12Aの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)。この列の挿入処理について、図21を用いて後記する。
そして、グリッド配置部114は、上記の処理をグリッド行集合のすべてのグリッド行に対し行うと、生成したグリッド(グリッド行列)を出力する(S210)。
以上の処理により、グリッド配置部114は、縦方向に同位のオブジェクト群が同じ列になるよう配置したグリッド行列を生成することができる。
次に、図21を用いて、図20の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は、図22の符号2200に示す旅行の予約用アプリケーションの画面上のオブジェクトの配置を認識し、符号2201に示す画面認識情報(グリッド行列)を得る。
これにより、当該アプリケーションの画面上の情報の検索システムは、符号2201の画面情報におけるImage,Buttonオブジェクト削除、項目名の定義(例えば、Labelクラスを項目名とする、指定のラベル名を項目名とするなど)の処理を行うことで、符号2202に示す画面認識情報を得る。これにより、検索システムは、「往路に関する情報をまとめて抽出」等、項目名を利用した高度な検索ができる。
さらに、上記の画面認識装置100による画面認識技術を用いることで、アプリケーションの画面上のオブジェクトの相対位置による問い合わせ検索もできる。
例えば、図23の(1)に示すように、アプリケーションの画面上における、「決裁状況」の3つ右の画像が比較元の画像(アイコン)と同じかをチェックするというクエリ(問い合わせ)を受け付けた場合において、アプリケーションの画面上における、「決裁状況」の3つ右の画像が比較元の画像(アイコン)と同じか否かの結果を返すことができる。
さらに、例えば、図23の(2)に示すように、アプリケーションの画面上における、「備品番号」の下にある画像群の中で「95-600727」を検索するクエリ(問い合わせ)を受け付けた場合において、アプリケーションの画面上における、「備品番号」の下にある画像群の中で「95-600727」の検索結果を返すことができる。
また、上記の画面認識装置100による画面認識技術を既存の画像マッチング技術と組み合わせることで、特定し終わった各々の画像要素に対して、さらに相対位置情報を利用して絞り込んだマッチングを行い、より条件に合った正しい要素を選択する等、高精度なマッチングを実現することもできる。
(プログラム)
また、上記の実施形態で述べた画面認識装置100は、画面認識装置100の機能を実現する画面認識プログラムを所望の情報処理装置(コンピュータ)にインストールすることによって実装できる。例えば、パッケージソフトウェアやオンラインソフトウェアとして提供される上記の画面認識プログラムを情報処理装置に実行させることにより、情報処理装置を画面認識装置100として機能させることができる。ここで言う情報処理装置には、デスクトップ型またはノート型のパーソナルコンピュータが含まれる。また、その他にも、情報処理装置にはスマートフォン、携帯電話機やPHS(Personal Handyphone System)等の移動体通信端末、さらには、PDA(Personal Digital Assistants)等がその範疇に含まれる。また、画面認識装置100を、クラウドサーバに実装してもよい。
以下に、上記の画面認識プログラムを実行するコンピュータの一例を説明する。図24は、画面認識プログラムを実行するコンピュータを示す図である。図24に示すように、コンピュータ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が接続される。
ここで、図24に示すように、ハードディスクドライブ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によって読み出されてもよい。