(57)【要約】  テキスト情報と１つ以上のグラフィックユーザインターフェイスコンポーネントとを含むＧＵＩ画面画像からのＧＵＩの開発を自動化するための技術が開示される。ＧＵＩ画面画像を解析することにより、テキスト情報を抽出し、ＧＵＩ画面に含まれるＵＩコンポーネントを特定する。ＧＵＩ画面画像内の１つ以上のテキスト領域を検出しプレースホルダに置き換える。ＧＵＩ画面内の１つ以上のグラフィックユーザインターフェイスコンポーネントをＧＵＩ画面画像から抽出し機械学習ベースの分類器を用いて分類する。分類結果、１つ以上のテキスト領域の位置、および１つ以上のグラフィックユーザインターフェイスコンポーネントの位置に基づいて、ＧＵＩのＧＵＩモデルを生成する。生成したモデルを用いて、場合によっては異なるプログラミング言語の各種プラットフォームのために、ＧＵＩの１つ以上のインプリメンテーション（たとえば実行可能なコード）を生成することができる。
2021501382.tif 000002
【特許請求の範囲】
【請求項１】
方法であって、
コンピュータシステムが、入力画像から、グラフィックユーザインターフェイス（ＧＵＩ）のＧＵＩ画面を示すＧＵＩ画面画像を検出するステップと、
前記コンピュータシステムが、第１のテキストコンテンツアイテムを含む前記ＧＵＩ画面画像の第１の領域を検出するステップと、
前記コンピュータシステムが、前記ＧＵＩ画面画像内の前記第１の領域の位置を判断するステップと、
前記コンピュータシステムが、前記第１の領域のコンテンツを、テキストコンテンツを含まないプレースホルダに置き換えるステップと、
前記コンピュータシステムが、前記ＧＵＩ画面画像の第２の領域内に位置する第１のユーザインターフェイス（ＵＩ）コンポーネントを検出するステップとを含み、前記第２の領域は前記プレースホルダを有する前記第１の領域を含み、
前記コンピュータシステムが、前記ＧＵＩ画面画像内の前記第１のＵＩコンポーネントの位置を判断するステップと、
前記コンピュータシステムが、機械学習ベースの分類器を用いて、前記第１のＵＩコンポーネントのＵＩコンポーネントタイプを判断するステップとを含み、前記機械学習ベースの分類器は、複数の訓練画像を含む訓練データを用いて訓練され、前記複数の訓練画像のうちの各訓練画像はＵＩコンポーネントを含み、前記訓練データはさらに、各訓練画像ごとに、前記訓練画像内の前記ＵＩコンポーネントのＵＩコンポーネントタイプを特定する情報を含み、
前記コンピュータシステムが、前記ＧＵＩを実現するためのコードを生成するために使用可能なＧＵＩモデルを生成するステップを含み、前記ＧＵＩモデルは、前記第１のＵＩコンポーネントの情報と、前記第１のテキストコンテンツアイテムの情報とを含み、前記第１のＵＩコンポーネントの情報は、前記第１のＵＩコンポーネントについて判断した前記ＵＩコンポーネントタイプと、前記ＧＵＩ画面画像内の前記第１のＵＩコンポーネントの位置とを示す情報を含む、方法。
【請求項２】
前記第１のＵＩコンポーネントを検出するステップは、前記機械学習ベースの分類器が前記ＧＵＩ画面画像内の前記第１のＵＩコンポーネントを検出するステップを含み、
前記訓練データはさらに、各訓練画像ごとに、前記訓練画像内のＵＩコンポーネントの位置を含む、請求項１に記載の方法。
【請求項３】
前記ＧＵＩ画面画像内の前記第１の領域の位置および前記ＧＵＩ画面画像内の前記第１のＵＩコンポーネントの位置に基づいて、前記第１のテキストコンテンツアイテムとともに前記第１のＵＩコンポーネントをグルーピングするステップをさらに含み、
前記ＧＵＩモデルを生成するステップはさらに、前記ＧＵＩモデルに、前記グルーピングを示す情報を含めるステップを含む、請求項１または２に記載の方法。
【請求項４】
前記コンピュータシステムが、第２のテキストコンテンツアイテムを含む前記ＧＵＩ画面画像の第３の領域を検出するステップと、
前記コンピュータシステムが、前記ＧＵＩ画面画像内の前記第３の領域の位置を判断するステップと、
前記コンピュータシステムが、前記ＧＵＩ画面画像内に位置する第２のＵＩコンポーネントを検出するステップと、
前記ＧＵＩ画面画像内の前記第２のＵＩコンポーネントの位置を判断するステップと、
前記機械学習ベースの分類器を用いて、前記第２のＵＩコンポーネントのＵＩコンポーネントタイプを判断するステップと、
前記第１の領域の前記位置、前記第３の領域の前記位置、前記第１のＵＩコンポーネントの前記ＵＩコンポーネントタイプおよび位置、ならびに前記第２のＵＩコンポーネントの前記ＵＩコンポーネントタイプおよび位置に基づいて、前記第１のテキストコンテンツアイテム、前記第２のテキストコンテンツアイテム、前記第１のＵＩコンポーネント、および前記第２のＵＩコンポーネントをグルーピングするステップと、
前記グルーピングに基づいて前記ＧＵＩ画面のレイアウトを決定するステップとを含み、
前記ＧＵＩモデルを生成するステップはさらに、前記ＧＵＩモデルに、前記グルーピングおよび前記ＧＵＩ画面の前記レイアウトを示す情報を含めるステップを含む、請求項１〜３のいずれか１項に記載の方法。
【請求項５】
前記ＧＵＩ画面画像内の前記第３の領域の前記位置に基づいて、前記第２のテキストコンテンツは前記ＧＵＩ画面画像内のいずれのＵＩコンポーネントにも対応付けられていないと判断するステップと、
前記第２のテキストコンテンツアイテムはアクションを示すと判断するステップとをさらに含み、
前記ＧＵＩモデルを生成するステップは、前記ＧＵＩモデルにおいて、前記ＧＵＩ画面画像の前記第３の領域内の前記第２のテキストコンテンツアイテムはクリッカブルテキストであることを示すステップを含み、前記第２のテキストコンテンツのクリックは前記アクションを開始させる、請求項４に記載の方法。
【請求項６】
前記第１の領域は背景上の前記第１のテキストコンテンツアイテムを含み、前記方法はさらに、
前記ＧＵＩ画面画像の前記第１の領域内の画素の強度値に基づいてヒストグラムを生成するステップと、
前記ＧＵＩ画面画像の前記第１の領域内の、前記第１のテキストコンテンツアイテムに対応する画素の数と前記背景に対応する画素の数とに基づいて、前記ヒストグラムから、前記第１のテキストコンテンツアイテムの画素の強度値は前記背景の画素の強度値よりも高いと判断するステップと、
前記第１の領域内の画素の強度値を反転させるステップとを含み、前記反転により、前記第１のテキストコンテンツアイテムの画素の強度値は、前記第１の領域内の前記背景の画素の強度値よりも低くなり、
前記反転の実施後に前記第１の領域内の前記第１のテキストコンテンツアイテムを認識するステップを含む、請求項１〜５のいずれか１項に記載の方法。
【請求項７】
前記ヒストグラムを生成する前に、前記第１の領域内の各画素の強度値に基づいて、前記ＧＵＩ画面画像の前記第１の領域を、ＲＧＢサブ画像から２値サブ画像に変換するステップをさらに含む、請求項６に記載の方法。
【請求項８】
前記プレースホルダは画素の予め定められたパターンを含み、
前記第１のＵＩコンポーネントのＵＩコンポーネントタイプを判断するステップは、前記第２の領域内の前記プレースホルダの存在と前記プレースホルダ内の前記画素の予め定められたパターンとに基づいて、前記ＧＵＩ画面画像の前記第２の領域を分類するステップを含む、請求項１〜７のいずれか１項に記載の方法。
【請求項９】
前記プレースホルダは、前記第１の領域内の前記第１のテキストコンテンツアイテムの位置の境界を前記ＧＵＩ画面画像から判断することを可能にする画素の予め定められたパターンである、請求項１〜８のいずれか１項に記載の方法。
【請求項１０】
前記画素の予め定められたパターンの画素値は、予め定められた値、または前記第１の領域の背景内の画素の画素値を含む、請求項９に記載の方法。
【請求項１１】
前記ＧＵＩモデルに基づいて前記ＧＵＩの１つ以上のインプリメンテーションを生成するステップをさらに含む、請求項１〜１０のいずれか１項に記載の方法。
【請求項１２】
前記ＧＵＩモデルに基づいて前記ＧＵＩの１つ以上のインプリメンテーションを生成するステップは、
前記ＧＵＩモデルを用いて、第１のプラットフォームのための前記ＧＵＩの第１のインプリメンテーションを生成するステップと、
前記ＧＵＩモデルを用いて、第２のプラットフォームのための前記ＧＵＩの第２のインプリメンテーションを生成するステップとを含み、前記第２のプラットフォームは前記第１のプラットフォームと異なる、請求項１１に記載の方法。
【請求項１３】
前記ＧＵＩモデルに基づいて前記ＧＵＩの１つ以上のインプリメンテーションを生成するステップは、
前記ＧＵＩモデルを用いて、第１のプログラミング言語で前記ＧＵＩの第１のインプリメンテーションを生成するステップと、
前記ＧＵＩモデルを用いて、第２のプログラミング言語で前記ＧＵＩの第２のインプリメンテーションを生成するステップとを含み、前記第２のプログラミング言語は前記第１のプログラミング言語と異なる、請求項１１または１２に記載の方法。
【請求項１４】
前記ＧＵＩモデルに基づいて前記ＧＵＩの１つ以上のインプリメンテーションを生成するステップは、
前記ＧＵＩモデルと１つ以上のコード生成テンプレートとを用いて前記ＧＵＩの１つ以上のインプリメンテーションを生成するステップを含み、各コード生成テンプレートはプラットフォームまたはプログラミング言語に対応付けられている、請求項１１に記載の方法。
【請求項１５】
前記ＧＵＩモデルを生成するステップは、前記ＧＵＩモデルの情報を、ＪａｖａＳｃｒｉｐｔオブジェクト表記（ＪＳＯＮ）フォーマットで格納するステップを含む、請求項１〜１４のいずれか１項に記載の方法。
【請求項１６】
前記機械学習ベースの分類器は、画像ヒストグラムベースの非線形サポートベクターマシン分類器、または、人工ニューラルネットワークベースの分類器を含む、請求項１〜１５のいずれか１項に記載の方法。
【請求項１７】
前記ＧＵＩモデルに関するユーザフィードバックを受けるステップをさらに含み、前記ユーザフィードバックは、
前記ＧＵＩモデルにおいて前記第１のＵＩコンポーネントについて指定された前記ＵＩコンポーネントタイプの代わりに前記第１のＵＩコンポーネントに対応付けられる新たなＵＩコンポーネントタイプを特定する情報、または、
ＧＵＩ画面内に存在するが前記ＧＵＩモデルに含まれない新たなＵＩコンポーネントを特定する情報、および前記新たなＵＩコンポーネントのＵＩコンポーネントタイプを示す情報を含み、
前記ユーザフィードバックに基づいて前記機械学習ベースの分類器を再訓練するステップをさらに含む、請求項１〜１６のいずれか１項に記載の方法。
【請求項１８】
前記ユーザフィードバックはさらに、前記第１のＵＩコンポーネントまたは前記新たなＵＩコンポーネントのサブ画像を含み、前記方法はさらに、
前記複数の訓練画像から特徴を抽出するステップと、
前記複数の訓練画像から抽出した前記特徴を、多次元空間内のデータポイントにマッピングするステップとを含み、前記データポイントは、前記多次元空間内の一組のクラスタを形成し、
前記第１のＵＩコンポーネントまたは前記新たなＵＩコンポーネントの前記サブ画像から特徴を抽出するステップと、
前記第１のＵＩコンポーネントまたは前記新たなＵＩコンポーネントの前記サブ画像から抽出した特徴を、前記多次元空間内のデータポイントにマッピングするステップと、
前記第１のＵＩコンポーネントまたは前記新たなＵＩコンポーネントの前記サブ画像に対応する前記データポイントと、前記一組のクラスタの各クラスタの中心との間の距離を判断するステップと、
前記距離がしきい値未満であるという判断に応じて、前記第１のＵＩコンポーネントまたは前記新たなＵＩコンポーネントの前記サブ画像を前記訓練データに含めるステップとを含む、請求項１７に記載の方法。
【請求項１９】
１つ以上のプロセッサによる実行が可能な複数の命令を格納する非一時的なコンピュータ読取可能媒体であって、前記複数の命令は前記１つ以上のプロセッサによって実行されると前記１つ以上のプロセッサに以下を含む処理を実行させ、前記処理は、
入力画像から、グラフィックユーザインターフェイス（ＧＵＩ）のＧＵＩ画面を示すＧＵＩ画面画像を検出することと、
第１のテキストコンテンツアイテムを含む前記ＧＵＩ画面画像の第１の領域を検出することと、
前記ＧＵＩ画面画像内の前記第１の領域の位置を判断することと、
前記第１の領域のコンテンツを、テキストコンテンツを含まないプレースホルダに置き換えることと、
前記ＧＵＩ画面画像の第２の領域内に位置する第１のユーザインターフェイス（ＵＩ）コンポーネントを検出することとを含み、前記第２の領域は前記プレースホルダを有する前記第１の領域を含み、
前記ＧＵＩ画面画像内の前記第１のＵＩコンポーネントの位置を判断することと、
機械学習ベースの分類器を用いて、前記第１のＵＩコンポーネントのＵＩコンポーネントタイプを判断することとを含み、前記機械学習ベースの分類器は、複数の訓練画像を含む訓練データを用いて訓練され、前記複数の訓練画像のうちの各訓練画像はＵＩコンポーネントを含み、前記訓練データはさらに、各訓練画像ごとに、前記訓練画像内の前記ＵＩコンポーネントのＵＩコンポーネントタイプを特定する情報を含み、
前記ＧＵＩを実現するためのコードを生成するために使用可能なＧＵＩモデルを生成することを含み、前記ＧＵＩモデルは、前記第１のＵＩコンポーネントの情報と、前記第１のテキストコンテンツアイテムの情報とを含み、前記第１のＵＩコンポーネントの情報は、前記第１のＵＩコンポーネントについて判断した前記ＵＩコンポーネントタイプと、前記ＧＵＩ画面画像内の前記第１のＵＩコンポーネントの位置とを示す情報を含む、非一時的なコンピュータ読取可能媒体。
【請求項２０】
システムであって、
１つ以上のプロセッサと、
前記１つ以上のプロセッサに結合されたメモリとを備え、前記メモリは、前記１つ以上のプロセッサによって実行されると前記システムに、
入力画像から、グラフィックユーザインターフェイス（ＧＵＩ）のＧＵＩ画面を示すＧＵＩ画面画像を検出することと、
第１のテキストコンテンツアイテムを含む前記ＧＵＩ画面画像の第１の領域を検出することと、
前記ＧＵＩ画面画像内の前記第１の領域の位置を判断することと、
前記第１の領域のコンテンツを、テキストコンテンツを含まないプレースホルダに置き換えることと、
前記ＧＵＩ画面画像の第２の領域内に位置する第１のユーザインターフェイス（ＵＩ）コンポーネントを検出することとを実行させ、前記第２の領域は前記プレースホルダを有する前記第１の領域を含み、
前記ＧＵＩ画面画像内の前記第１のＵＩコンポーネントの位置を判断することと、
機械学習ベースの分類器を用いて、前記第１のＵＩコンポーネントのＵＩコンポーネントタイプを判断することとを実行させ、前記機械学習ベースの分類器は、複数の訓練画像を含む訓練データを用いて訓練され、前記複数の訓練画像のうちの各訓練画像はＵＩコンポーネントを含み、前記訓練データはさらに、各訓練画像ごとに、前記訓練画像内の前記ＵＩコンポーネントのＵＩコンポーネントタイプを特定する情報を含み、
前記ＧＵＩを実現するためのコードを生成するために使用可能なＧＵＩモデルを生成することを実行させ、前記ＧＵＩモデルは、前記第１のＵＩコンポーネントの情報と、前記第１のテキストコンテンツアイテムの情報とを含み、前記第１のＵＩコンポーネントの情報は、前記第１のＵＩコンポーネントについて判断した前記ＵＩコンポーネントタイプと、前記ＧＵＩ画面画像内の前記第１のＵＩコンポーネントの位置とを示す情報を含む、システム。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本願は、２０１８年２月１２日に出願され「AUTOMATED CODE GENERATION」と題されたインド仮特許出願第２０１８４１００５１３０号に基づく優先権の利益を主張する２０１８年６月１日に出願され「AUTOMATED CODE GENERATION」と題された米国非仮特許出願第１５／９９６，３１１号に基づく利益および優先権を主張し、あらゆる目的のために上記特許出願の内容全体を本明細書に引用により援用する。
【背景技術】
【０００２】
背景
典型的なグラフィックユーザインターフェイス（graphic user interface）（ＧＵＩ）開発プロセスにおいて、ＧＵＩは、設計者が、顧客またはクライアント調査、マーケティング調査、および、開発するＧＵＩに含まれるべき機能および外観を伝える他の情報源に基づいて設計することができる。ＧＵＩは、アプリケーションのための各種画面のモックアップ画像、画面の設計およびルック・アンド・フィール（look and feel）、画面と画面との間の移行などのような、アプリケーションの所望のユーザインターフェイス（ＵＩ）を記述することができる。画面のモックアップ画像に加えて、ＧＵＩは、ＧＵＩに関する情報をユーザに提供するテキストコンテンツも含み得る。
【０００３】
アプリケーションのためのＧＵＩ（ＧＵＩ画面の画像を含む）は、設計者が文書（たとえば設計文書）または仕様書（たとえば画像ファイルもしくは概略スケッチ）において文書化することができる。次に、このＧＵＩ設計文書を用いて、アプリケーションのためのＧＵＩを実現するためのコードを作成または開発することができる。たとえば、開発段階において、アプリケーションのためのＧＵＩ画面の１つ以上の画像またはスケッチを含むＧＵＩ設計文書は、ＧＵＩ設計文書に基づいてＧＵＩおよび／またはアプリケーションを実現するためのコードを記述するタスクが課された技術者または開発者を含む工学技術組織に提供することができる。これらの開発者は、手作業でこのコードを記述する、または「ドラッグ＆ドロップ」ベースの開発ツールを用いて所望のＧＵＩ画面を構築しＧＵＩ設計文書に記載されている所望の外観および機能を有するＧＵＩを実現するコードを生成することができる。
【０００４】
このように、実行可能なアプリケーションのためのＧＵＩを設計文書から開発することは、相当な開発者の手作業の手間を要する場合がある。これは、開発者が、設計文書を検討し、ＧＵＩ画面の所望の機能および外観を含む要件を理解し、それからコードを記述してＧＵＩおよび／またはアプリケーションを実現することを必要とする場合がある。これはまた、開発者が、ＧＵＩの開発に使用されるアプリケーション開発プラットフォームおよびプログラミング言語に関する知識を有すること、ならびに、ＧＵＩおよびアプリケーションの開発対象である特定のターゲットシステムまたはプラットフォーム（たとえばｉＯＳ（登録商標）またはＡｎｄｒｏｉｄ（登録商標）、モバイルまたはデスクトップ）に関する知識を有することも、必要とする場合がある。このため、ＧＵＩの開発には特定の専門技術を有する開発者が必要であることが極めて多い。これらの要因はすべて、開発段階を、冗長で、時間がかかり、大きな労働力を要し、高コストなものにする。
【発明の概要】
【課題を解決するための手段】
【０００５】
簡単な概要
本開示は、アプリケーション開発に関し、より具体的には、アプリケーションのためのグラフィックユーザインターフェイス（ＧＵＩ）を、当該アプリケーションの１つ以上のＧＵＩ画面用の１つ以上の画像またはスケッチ等の設計文書から開発することを自動化する技術に関する。方法、システム、１つ以上のプロセッサによる実行が可能なプログラム、コードまたは命令を格納する非一時的なコンピュータ読取可能記憶媒体などを含む、発明の各種実施形態が、本明細書に記載される。
【０００６】
特定の実施形態において、アプリケーションのためのＧＵＩは、１つ以上のＧＵＩ画面を含み得る。各画面は、ボタン、テキスト入力ボックス、ドロップダウンリスト、ドロップダウンメニュー、アイコン、表などのような１つ以上のユーザインターフェイス（ＵＩ）コンポーネントを含む。ＧＵＩ画面はまた、ＵＩコンポーネントに加えてテキストコンテンツを含む部分を含み得る。テキストコンテンツは、特定のＵＩコンポーネントに対応付けることができ、たとえば、ＵＩコンポーネントに入力される情報、ＵＩコンポーネントの機能、ＵＲＬリンクその他を記述することができる。
【０００７】
特定の実施形態において、たとえばＧＵＩ設計者が設計したＧＵＩ画面の画像（ＧＵＩ画面画像とも呼ぶ）を解析することにより、ＧＵＩ画面画像からテキスト情報を抽出するとともに、ＧＵＩ画面に含まれるＵＩコンポーネントを特定する。各種の機械学習ベースの技術を用いることによりＧＵＩ画面画像を解析することができる。たとえば、ＵＩコンポーネントを、機械学習ベースの分類器（たとえばサポートベクターマシン分類器または畳み込みニューラルネットワークベースの分類器）によって検出および分類することができ、この分類器は、入力ＧＵＩ画面画像を提供し、画面画像に存在するＵＩコンポーネントおよび画像内の検出したＵＩコンポーネントの位置を特定するように構成されている。加えて、機械学習ベースの分類器は、検出された各ＵＩコンポーネントのタイプおよび／または検出された各ＵＩコンポーネントに対応付けられた機能を特定するように構成されてもよい。ＧＵＩ画面画像内のテキストコンテンツアイテムおよび対応するそれぞれの位置を検出し認識してもよい。
【０００８】
次に、たとえば、検出したＵＩコンポーネント、ＵＩコンポーネントのタイプ、ＵＩコンポーネントの位置、ＵＩコンポーネントの対応付けられたテキスト情報、および、どのＵＩコンポーネントにも対応付けられていない可能性があるその他のテキスト情報に基づいて、アプリケーションのためのＧＵＩについて、ＧＵＩモデルを生成することができる。ＧＵＩモデルは、言語から独立しかつプラットフォームから独立している。アプリケーションのためのＧＵＩを記述する情報は、アプリケーションのための１つ以上のＧＵＩ画面を記述する情報と、各ＧＵＩ画面ごとの、ＧＵＩ画面上の、検出したＵＩコンポーネント、テキスト部分その他に関する情報とを含み得る。
【０００９】
アプリケーションのために生成されたモデルを格納するために各種異なるフォーマットを使用することができる。たとえば、特定の実施形態において、生成したモデルは、ＪａｖａＳｃｒｉｐｔ（登録商標）オブジェクト表記（JavaScript Object Notation）（ＪＳＯＮ）フォーマットのような、言語および／またはプラットフォームから独立したデータ交換フォーマットで記述することができる。いくつかの実装例において、ＧＵＩモデルは、アプリケーションに対応付けることができるメタデータとして生成してもよい。
【００１０】
続いて、アプリケーションのためのＧＵＩの解析に基づいて生成されたＧＵＩモデルを用いて、このモデルに記述されているアプリケーションのためのＧＵＩを実現するコードを生成することができる。生成されるこのコードは、実行または解釈されると、アプリケーションＧＵＩを記述する設計文書（たとえばＧＵＩを表す一組の画像を含む設計文書）に示されるルック・アンド・フィールおよび機能を有するＧＵＩを生成するものである。生成された同じモデルを、各種の異なるプラットフォーム（たとえばｉＯＳ（登録商標）、アンドロイド（登録商標）など）のための潜在的に異なる言語でコードを生成するために使用してもよい。
【００１１】
先に述べたように、ＧＵＩ画面を表す画像を解析することにより、この画像内に存在する１つ以上のテキストコンテンツアイテムおよびＵＩコンポーネントを検出することができる。いくつかの実施形態において、ＵＩコンポーネントを分類する前に、テキストコンテンツアイテムを、ＵＩコンポーネントの画像から抽出してもよく、テキストコンテンツを含まないプレースホルダに置き換えてもよい。いくつかの実施形態において、テキストコンテンツアイテムを含む画像の部分の画素に基づいてヒストグラムを生成することができる。ヒストグラムを用いて、テキストコンテンツアイテムの強度が背景の強度よりも低いか否かを判断することができる。次に、画像のこの部分の画素を反転させることにより、この画像の部分のテキストコンテンツアイテムを、この画像の部分の背景よりも暗くすることができる。次に、反転させた画像の部分に基づいて、テキストコンテンツアイテムを認識することができる。いくつかの実施形態において、この画像の部分のテキストコンテンツアイテムを、画素の予め定められたパターンを有する、またはこの画像の部分の背景の画素値を有する画素アレイに置き換えてもよい。この画素アレイの置き換えにより、実際のおテキストコンテンツが画像部分から削除されるだけでなく、画像内のテキストコンテンツの位置および協会が識別される。いくつかの実施形態において、画素の予め定められたパターンにより、テキストコンテンツアイテムの位置および／またはＵＩコンポーネントのタイプを判断し易くすることができる。
【００１２】
特定の実施形態において、アプリケーションのためのＧＵＩについて生成されたＧＵＩモデルは、このアプリケーションのための１つ以上のＧＵＩ画面に対応する情報をカプセル化することができる。各ＧＵＩ画面ごとに、ＧＵＩモデルは、ＧＵＩ画面に含まれる１つ以上のユーザインターフェイス（ＵＩ）コンポーネントを特定する情報を含み得る。各ＧＵＩ画面ごとに、このモデルはまた、ユーザインターフェイスコンポーネントの階層的組織を特定する情報およびＧＵＩ画面上のテキストコンテンツアイテム等の、ＧＵＩ画面の構造に関する情報を含み得る。たとえば、いくつかの実施形態において、ＵＩコンポーネントを、たとえば、ＵＩコンポーネントのタイプおよび位置に基づいてグルーピングすることにより、ＵＩコンポーネントのサブグループ（たとえば表またはリスト）を形成することができる。サブグループをさらにクラスタ化することによって、ＧＵＩ画面のより高いレベルのレイアウトを決定することができる。いくつかの実施形態において、テキストコンテンツアイテムもグルーピングすることにより、たとえば、テキストのラインまたはテキストのパラグラフを形成することができる。いくつかの実施形態において、たとえば、テキストコンテンツアイテムおよびＵＩコンポーネントの位置情報に基づいて、テキストコンテンツアイテムをグルーピングするかまたはＵＩコンポーネントに対応付けることができる。
【００１３】
特定の実施形態において、ＧＵＩ画面の画像を解析することにより、テキストコンテンツアイテムおよびＵＩコンポーネントを含む画像の部分を特定することができる。テキストコンテンツアイテムの位置および性質に応じて、テキストコンテンツアイテムは画面上で検出されたＵＩコンポーネントに対応付けられていると判断することができる、または、特定の実施形態において、テキストコンテンツアイテムは独立しており検出されたどのＵＩコンポーネントにも対応付けられていないと判断することができる。生成されたＧＵＩモデルはこの情報をカプセル化する。いくつかの実施形態において、ＧＵＩモデルはこのようにして、特定のテキストコンテンツアイテムは独立しておりどのＵＩコンポーネントにも対応付けられていないことを示すことができる。特定の実施形態において、対応付けられていないテキストコンテンツアイテムを検出し、クリックされるとアクションを開始できるクリッカブルテキスト（またはリンク）に分類することができる。この情報はＧＵＩモデルに格納することができる。
【００１４】
いくつかの実施形態において、ＧＵＩモデルは、設計されたＧＵＩ画面のルック・アンド・フィールを再現できるようにＧＵＩ画面の各種ＵＩコンポーネントを如何にして表示すべきかを記述することができる。特定の実施形態において、ＧＵＩモデルはまた、ＧＵＩ画面上の特定のＵＩコンポーネントに対応付けられる機能に関する情報を含み得る。ユーザインターフェイスコンポーネントに対応付けられる機能は、たとえば、機械学習ベースの分類器によって分類されたユーザインターフェイスコンポーネントのタイプ、および／または対応付けられたテキストコンテンツアイテム（もしあれば）に基づいて、判断することができる。
【００１５】
いくつかの実施形態において、生成したＧＵＩモデルに関するフィードバックをユーザが編集および提供できるようにするインフラストラクチャが提供される。ユーザフィードバックは、たとえば、自動的に生成されたモデルの部分に対して行われる訂正（たとえばＵＩコンポーネントに対応付けられたタイプの変更）を含み得る。フィードバックはまた、ユーザがモデルに追加される追加情報を提供することを含み得る。次に、ユーザフィードバックは、機械学習ベースの分類器を改善する（たとえば再訓練する）ために使用することができる。
【００１６】
ＧＵＩ設計情報に基づいてＧＵＩについて生成されたＧＵＩモデルは、さまざまなダウンストリームコンシューマによって使用されることができる。たとえば、ダウンストリームコンシューマは、このモデルを使用することにより、ＧＵＩを実現するためのコードを自動でかつ実質的に手作業によるコーディングなしで、生成することができる。このコードは、たとえば、ＧＵＩモデルを生成するために使用された一組の画像に示されている所望のルック・アンド・フィールおよび／または機能と実質的に同様のルック・アンド・フィールおよび／または機能を有するＧＵＩを表示するために、ウェブブラウザによって解釈されることが可能な解釈可能プログラムまたは１つ以上のプロセッサによって実行されることが可能な実行可能プログラムであってもよい。同じＧＵＩモデルを異なるコンシューマが使用してもよい。たとえば、第１のコンシューマが第１のプラットフォーム（たとえばｉＯＳ（登録商標））に対して実行可能なものを自動的に生成するためにこのＧＵＩモデルを使用してもよく、第２のコンシューマが異なるプラットフォーム（たとえばＡｎｄｒｏｉｄ（登録商標））に対して第２の実行可能なものを自動的に生成するためにこの同じＧＵＩモデルを使用してもよい。また、ＧＵＩモデル（たとえばＪＳＯＮフォーマット）を用いて、マークアップ言語（たとえばＨＴＭＬもしくはＸＭＬ）またはスタイルシート言語（たとえばカスケーディングスタイルシート（cascading style sheet）（ＣＳＳ））のような異なるプログラミング言語でコードを生成することもできる。
【００１７】
特定の実施形態に従うと、コンピュータによって実現される方法は、入力画像から、グラフィックユーザインターフェイス（ＧＵＩ）のＧＵＩ画面を示すＧＵＩ画面画像を検出するステップと、第１のテキストコンテンツアイテムを含むＧＵＩ画面画像の第１の領域を検出するステップと、ＧＵＩ画面画像内の第１の領域の位置を判断するステップと、第１の領域のコンテンツを、テキストコンテンツを含まないプレースホルダに置き換えるステップとを含み得る。このコンピュータによって実現される方法はさらに、ＧＵＩ画面画像の第２の領域内に位置する第１のユーザインターフェイス（ＵＩ）コンポーネントを検出するステップを含み得る。第２の領域はプレースホルダを有する第１の領域を含む。さらに、ＧＵＩ画面画像内の第１のＵＩコンポーネントの位置を判断するステップと、機械学習ベースの分類器を用いて、第１のＵＩコンポーネントのＵＩコンポーネントタイプを判断するステップとを含み得る。機械学習ベースの分類器は、複数の訓練画像を含む訓練データを用いて訓練されてもよく、複数の訓練画像のうちの各訓練画像はＵＩコンポーネントを含み得る。訓練データはさらに、各訓練画像ごとに、訓練画像内のＵＩコンポーネントのＵＩコンポーネントタイプを特定する情報を含み得る。次に、ＧＵＩを実現するためのコードを生成するために使用可能なＧＵＩモデルが生成されてもよい。ＧＵＩモデルは、第１のＵＩコンポーネントの情報と、第１のテキストコンテンツアイテムの情報とを含み得る。第１のＵＩコンポーネントの情報は、第１のＵＩコンポーネントについて判断したＵＩコンポーネントタイプと、ＧＵＩ画面画像内の第１のＵＩコンポーネントの位置とを示す情報を含み得る。
【００１８】
この方法のいくつかの実施形態において、第１のＵＩコンポーネントを検出するステップは、機械学習ベースの分類器がＧＵＩ画面画像内の第１のＵＩコンポーネントを検出するステップを含み得る。訓練データはさらに、各訓練画像ごとに、訓練画像内のＵＩコンポーネントの位置を含み得る。いくつかの実施形態において、この方法はさらに、ＧＵＩ画面画像内の第１の領域の位置およびＧＵＩ画面画像内の第１のＵＩコンポーネントの位置に基づいて、第１のテキストコンテンツアイテムとともに第１のＵＩコンポーネントをグルーピングするステップをさらに含み、
ＧＵＩモデルを生成するステップはさらに、ＧＵＩモデルに、グルーピングを示す情報を含めるステップを含む。
【００１９】
いくつかの実施形態において、このコンピュータによって実現される方法はさらに、第２のテキストコンテンツアイテムを含み得るＧＵＩ画面画像の第３の領域を検出するステップと、ＧＵＩ画面画像内の第３の領域の位置を判断するステップと、ＧＵＩ画面画像内に位置する第２のＵＩコンポーネントを検出するステップと、ＧＵＩ画面画像内の第２のＵＩコンポーネントの位置を判断するステップと、機械学習ベースの分類器を用いて、第２のＵＩコンポーネントのＵＩコンポーネントタイプを判断するステップとを含み得る。このコンピュータによって実現される方法はさらに、第１の領域の位置、第３の領域の位置、第１のＵＩコンポーネントのＵＩコンポーネントタイプおよび位置、ならびに第２のＵＩコンポーネントのＵＩコンポーネントタイプおよび位置に基づいて、第１のテキストコンテンツアイテム、第２のテキストコンテンツアイテム、第１のＵＩコンポーネント、および第２のＵＩコンポーネントをグルーピングするステップと、グルーピングに基づいてＧＵＩ画面のレイアウトを決定するステップとを含み得る。ＧＵＩモデルを生成するステップはさらに、ＧＵＩモデルに、グルーピングおよびＧＵＩ画面のレイアウトを示す情報を含めるステップを含み得る。
【００２０】
いくつかの実施形態において、このコンピュータによって実現される方法はさらに、ＧＵＩ画面画像内の第３の領域の位置に基づいて、第２のテキストコンテンツはＧＵＩ画面画像内のいずれのＵＩコンポーネントにも対応付けられていないと判断するステップと、第２のテキストコンテンツアイテムはアクションを示すと判断するステップとをさらに含み得る。ＧＵＩモデルを生成するステップは、ＧＵＩモデルにおいて、ＧＵＩ画面画像の第３の領域内の第２のテキストコンテンツアイテムはクリッカブルテキストであることを示すステップを含み得る。第２のテキストコンテンツのクリックはアクションを開始させることができる。
【００２１】
いくつかの実施形態において、第１の領域は、背景上の第１のテキストコンテンツアイテムを含み得る。このコンピュータによって実現される方法はさらに、ＧＵＩ画面画像の第１の領域内の画素の強度値に基づいてヒストグラムを生成するステップと、ＧＵＩ画面画像の第１の領域内の、第１のテキストコンテンツアイテムに対応する画素の数と背景に対応する画素の数とに基づいて、ヒストグラムから、第１のテキストコンテンツアイテムの画素の強度値は背景の画素の強度値よりも高いと判断するステップと、第１の領域内の画素の強度値を反転させるステップとを含み得る。反転により、第１のテキストコンテンツアイテムの画素の画素値は、第１の領域内の背景の画素の強度値よりも低くなり得る。反転の実施後に第１の領域内の第１のテキストコンテンツアイテムを認識するステップを含み得る。ヒストグラムを生成する前に、第１の領域内の各画素の強度値に基づいて、ＧＵＩ画面画像の第１の領域を、ＲＧＢサブ画像から２値サブ画像に変換するステップをさらに含む。
【００２２】
この方法のいくつかの実施形態において、プレースホルダは画素の予め定められたパターンを含み得る。第１のＵＩコンポーネントのＵＩコンポーネントタイプを判断するステップは、第２の領域内のプレースホルダの存在とプレースホルダ内の画素の予め定められたパターンとに基づいて、ＧＵＩ画面画像の第２の領域を分類するステップを含み得る。いくつかの実施形態において、画素の予め定められたパターンの画素値は、予め定められた値、または第１の領域の背景内の画素の画素値を含み得る。
【００２３】
いくつかの実施形態において、ＧＵＩモデルを生成するステップは、ＧＵＩモデルの情報を、ＪａｖａＳｃｒｉｐｔオブジェクト表記（ＪＳＯＮ）フォーマットで格納するステップを含み得る。いくつかの実施形態において、この方法は、ＧＵＩモデルに基づいてＧＵＩの１つ以上のインプリメンテーションを生成するステップをさらに含み得る。いくつかの実施形態において、ＧＵＩモデルに基づいてＧＵＩの１つ以上のインプリメンテーションを生成するステップは、ＧＵＩモデルを用いて、第１のプラットフォームのためのＧＵＩの第１のインプリメンテーションを生成するステップと、ＧＵＩモデルを用いて、第２のプラットフォームのためのＧＵＩの第２のインプリメンテーションを生成するステップとを含み得る。第２のプラットフォームは第１のプラットフォームと異なる。いくつかの実施形態において、ＧＵＩモデルに基づいてＧＵＩの１つ以上のインプリメンテーションを生成するステップは、ＧＵＩモデルを用いて、第１のプログラミング言語でＧＵＩの第１のインプリメンテーションを生成するステップと、ＧＵＩモデルを用いて、第２のプログラミング言語でＧＵＩの第２のインプリメンテーションを生成するステップとを含み得る。第２のプログラミング言語は第１のプログラミング言語と異なる。いくつかの実施形態において、ＧＵＩモデルに基づいてＧＵＩの１つ以上のインプリメンテーションを生成するステップは、ＧＵＩモデルと１つ以上のコード生成テンプレートとを用いてＧＵＩの１つ以上のインプリメンテーションを生成するステップを含み、各コード生成テンプレートはプラットフォームまたはプログラミング言語に対応付けられている。
【００２４】
いくつかの実施形態において、機械学習ベースの分類器は、機械学習ベースの分類器は、画像ヒストグラムベースの非線形サポートベクターマシン分類器、または、人工ニューラルネットワークベースの分類器を含み得る。いくつかの実施形態において、この方法はＧＵＩモデルに関するユーザフィードバックを受けるステップをさらに含み得る。ユーザフィードバックは、ＧＵＩモデルにおいて第１のＵＩコンポーネントについて指定されたＵＩコンポーネントタイプの代わりに第１のＵＩコンポーネントに対応付けられる新たなＵＩコンポーネントタイプを特定する情報、または、ＧＵＩ画面内に存在するがＧＵＩモデルに含まれない新たなＵＩコンポーネントを特定する情報、および新たなＵＩコンポーネントのＵＩコンポーネントタイプを示す情報を含み得る。この方法は、ユーザフィードバックに基づいて機械学習ベースの分類器を再訓練するステップをさらに含み得る。
【００２５】
いくつかの実施形態において、ユーザフィードバックは、第１のＵＩコンポーネントまたは新たなＵＩコンポーネントのサブ画像を含み得る。この方法はさらに、複数の訓練画像から特徴を抽出するステップと、複数の訓練画像から抽出した特徴を、多次元空間内のデータポイントにマッピングするステップとを含み得る。データポイントは、多次元空間内の一組のクラスタを形成し、第１のＵＩコンポーネントまたは新たなＵＩコンポーネントのサブ画像から特徴を抽出するステップと、第１のＵＩコンポーネントまたは新たなＵＩコンポーネントのサブ画像から抽出した特徴を、多次元空間内のデータポイントにマッピングするステップと、第１のＵＩコンポーネントまたは新たなＵＩコンポーネントのサブ画像に対応するデータポイントと、一組のクラスタの各クラスタの中心との間の距離を判断するステップと、距離がしきい値未満であるという判断に応じて、第１のＵＩコンポーネントまたは新たなＵＩコンポーネントのサブ画像を訓練データに含めるステップとを含み得る。
【００２６】
特定の実施形態に従うと、非一時的なコンピュータ読取可能媒体は、１つ以上のプロセッサによる実行が可能な複数の命令を格納し得る。これら複数の命令は、上記１つ以上のプロセッサによって実行されると、当該１つ以上のプロセッサに上記方法を実行させることができる。
【００２７】
特定の実施形態に従うと、システムは、１つ以上のプロセッサと、この１つ以上のプロセッサに結合されたメモリとを備える。メモリは、当該１つ以上のプロセッサによって実行されると、このシステムに上記方法を実行させることができる。
【００２８】
以下の明細書、請求項、および添付の図面を参照すると、これまでの記述はその他の特徴および実施形態とともに、より明らかになるであろう。
【図面の簡単な説明】
【００２９】
【図１】特定の実施形態に係る、グラフィックユーザインターフェイス（ＧＵＩ）の設計情報に基づいてＧＵＩのＧＵＩモデルを生成するためのシステムの一例の簡略化されたハイレベル図を示し、ダウンストリームコンシューマが、生成されたＧＵＩモデルを使用することにより、ＧＵＩの１つ以上のインプリメンテーションを自動的に生成することができる。
【図２】特定の実施形態に係る、ＧＵＩ画面のモックアップ画像の一例を示す図である。
【図３】特定の実施形態に係る、ＧＵＩの設計情報に基づいてＧＵＩのＧＵＩモデルを生成するためのシステムの一例を示す図である。
【図４】特定の実施形態に係る、機械学習ベースの分類器を用いてＧＵＩモデルおよび／またはＧＵＩの１つ以上のインプリメンテーションを生成するために実行されるハイレベル処理を示す簡略化されたフローチャートである。
【図５】特定の実施形態に係る、ユーザインターフェイスコンポーネントを検出し分類するために機械学習ベースの分類器を訓練するために実行されるハイレベル処理を示す簡略化されたフローチャートである。
【図６】特定の実施形態に係る、ＧＵＩの設計情報に基づいてＧＵＩモデルおよび／またはグラフィックユーザインターフェイスのソースコードを生成するために実行されるハイレベル処理を示す簡略化されたフローチャートである。
【図７】特定の実施形態に係る、ＧＵＩ画面の画像からテキストコンテンツアイテムを抽出するために実行されるハイレベル処理を示す簡略化されたフローチャートである。
【図８】特定の実施形態に係る、ＵＩコンポーネントをクラスタリングすることによってグラフィックユーザインターフェイス画面に対して生成することができるＵＩコンポーネント階層の一例を示す図である。
【図９】特定の実施形態に係る、ＧＵＩモデルおよびＧＵＩ画面のためのＧＵＩコードを自動的に生成するためのソフトウェアアプリケーションのＧＵＩ画面の一例を示す図である。
【図１０】特定の実施形態に係る、ＧＵＩモデルおよびＧＵＩ画面のためのＧＵＩコードを自動的に生成するためのソフトウェアアプリケーションのＧＵＩ画面の一例を示す図である。
【図１１】特定の実施形態に係る、ＧＵＩモデルおよびＧＵＩ画面のためのＧＵＩコードを自動的に生成するためのソフトウェアアプリケーションのＧＵＩ画面の一例を示す図である。
【図１２】特定の実施形態に係る、ＧＵＩモデルおよびＧＵＩ画面のためのＧＵＩコードを自動的に生成するためのソフトウェアアプリケーションのＧＵＩ画面の一例を示す図である。
【図１３】特定の実施形態に係る、ＧＵＩ画面について生成されたＪＳＯＮフォーマットのＧＵＩモデルの一例を示す図である。
【図１４】特定の実施形態に係る、入力ＧＵＩ画面画像の一例と、本明細書に開示された技術に基づいて生成されたコードを用いて表示された対応するＧＵＩ画面画像とを示す図である。
【図１５】特定の実施形態に係る、本明細書に開示された技術に基づいて入力ＧＵＩ画面画像の一例について生成されたｈｔｍｌコードの一例を示す図である。
【図１６Ａ】特定の実施形態に係る、本明細書に開示された技術に基づいて生成されたコードを用いて表示された入力ＧＵＩ画面画像の別の例を示す図である。
【図１６Ｂ】特定の実施形態に係る、本明細書に開示された技術に基づいて生成されたコードを用いて表示された対応するＧＵＩ画面画像の別の例を示す図である。
【図１７】特定の実施形態を実現するための分散型システムの簡略図を示す。
【図１８】特定の実施形態に係る、各種サービスがクラウドサービスとして提供され得るクラウドベースのシステム環境の簡略化されたブロック図である。
【図１９】特定の実施形態を実現するために使用し得るコンピュータシステムの一例を示す図である。
【発明を実施するための形態】
【００３０】
詳細な説明
本開示は、概してアプリケーション開発に関し、より具体的には、アプリケーションのためのグラフィックユーザインターフェイス（ＧＵＩ）を、ＧＵＩについての設計情報から開発することを自動化する技術に関する。方法、システム、１つ以上のプロセッサによる実行が可能なプログラム、コードまたは命令を格納する非一時的なコンピュータ読取可能記憶媒体などを含む、発明の各種実施形態が、本明細書に記載される。
【００３１】
以下の記載において、説明を目的として、発明の特定の実施形態が十分に理解されるようにするために特定の詳細について述べる。しかしながら、これらの特定の詳細がなくても各種実施形態は実施し得ることは明らかである。図面および説明は限定を意図しているのではない。本明細書において「例」または「例示的な」という単語は、ひとつの例、場合、または実例の役割を果たす」ことを意味するために使用されている。本明細書に記載の「例示的」なものまたは「例」として記載されるいかなる実施形態または設計も、必ずしもその他の実施形態または設計よりも好ましいまたは好都合であると解釈されることを意図している訳ではない。
【００３２】
特定の実施形態において、アプリケーションのためのＧＵＩは、１つ以上のＧＵＩ画面を含み得る。各画面は、ボタン、テキスト入力ボックス、ドロップダウンリスト、ドロップダウンメニュー、アイコン、表などのような１つ以上のユーザインターフェイス（ＵＩ）コンポーネントを含む。アプリケーションのためのＧＵＩはまた、テキスト情報を含み得る。テキスト情報は、アプリケーションのＧＵＩおよび／または各種ＵＩコンポーネントに対応付けられた機能および挙動を記述する、または、その他の情報もしくはユーザに対する命令を与える。
【００３３】
特定の実施形態において、ＧＵＩ設計者が設計したＧＵＩ画面の画像（ＧＵＩ画面画像とも呼ぶ）を解析することにより、テキスト情報を抽出し、ＵＩコンポーネントを特定する。たとえば、ＵＩコンポーネントを、機械学習ベースの分類器（たとえばサポートベクターマシン分類器または畳み込みニューラルネットワークベースの分類器）によって検出し分類することにより、各ＵＩコンポーネントのタイプおよび／または対応付けられた機能を特定することができる。対応する、テキスト情報およびＵＩコンポーネントの位置は、ＧＵＩ画面画像から判断することもできる。ＧＵＩ画面のレイアウトは、テキスト情報およびＵＩコンポーネントの特定の属性に基づいて決定することができる。次に、たとえば、特定したＵＩコンポーネント、ＵＩコンポーネントのタイプ、ＵＩコンポーネントの位置、ＵＩコンポーネントの対応付けられたテキスト情報、どのＵＩコンポーネントにも対応付けられていない可能性があるその他のテキスト情報、および、ＧＵＩ画面のレイアウトに基づいて、ＧＵＩ画面に対し、言語から独立したＧＵＩモデルを生成することができる。生成したモデルは、データ交換フォーマットで記述してもよく、続いて、各種プログラミング言語を用いて各種プラットフォーム上にＧＵＩ画面を実現するコードを生成することができる。いくつかの実施形態において、実行可能または解釈可能なコードを、ＧＵＩモデルに基づいて生成することにより、ＧＵＩについての設計情報に記述されているのと同じルック・アンド・フィールおよび機能を有するＧＵＩを表示することができる。
【００３４】
いくつかの実施形態において、ＵＩコンポーネントを検出または分類する前に、ＧＵＩ画面画像内のテキストコンテンツを抽出し、テキストコンテンツを含まないプレースホルダに置き換えてもよい。たとえば、いくつかの実施形態において、テキストコンテンツアイテムを含むＧＵＩ画面画像の部分の画素の強度値に基づいてヒストグラムを生成することができる。ＧＵＩ画面画像の上記部分の画素を次に反転させることにより、このＧＵＩ画面画像の部分内のテキストコンテンツの色を、このＧＵＩ画面画像の部分内の背景の色よりも暗くしてもよい。次に、ＧＵＩ画面画像の反転された部分から、テキストコンテンツアイテムを認識することができる。いくつかの実施形態において、上記ＧＵＩ画面画像の部分内のテキストコンテンツを、画素の予め定められたパターンを有する、または上記画面画像の部分の背景の画素値を有する、画素アレイに置き換えてもよい。いくつかの実施形態において、画素の予め定められたパターンは、テキストコンテンツアイテムの位置および／またはテキストコンテンツアイテムに対応付けられたＵＩコンポーネントのタイプを判断し易くすることができる。
【００３５】
特定の実施形態において、ＧＵＩについて生成されたＧＵＩモデルは、アプリケーションのための１つ以上のＧＵＩ画面に対応する情報をカプセル化してもよい。各ＧＵＩ画面ごとに、ＧＵＩモデルは、ＧＵＩ画面に含まれる１つ以上のユーザインターフェイス（ＵＩ）コンポーネントを特定する情報を含み得る。各ＧＵＩ画面ごとに、このモデルはまた、ＧＵＩ画面の構造に関する情報、たとえば、ＧＵＩ画面内のユーザインターフェイスコンポーネントの階層組織を特定する情報などを含み得る。たとえば、いくつかの実施形態において、ＵＩコンポーネントを、たとえば、ＵＩコンポーネントのタイプおよび位置に基づいてグルーピングすることにより、ＵＩコンポーネントのサブグループ（たとえば表またはリスト）を形成することができる。サブグループをさらにクラスタリングすることにより、ＧＵＩ画面のより高いレベルのレイアウトを決定することができる。いくつかの実施形態において、テキストコンテンツアイテムもグルーピングすることにより、たとえばテキストのラインまたはテキストのパラグラフを形成することができる。いくつかの実施形態において、テキストコンテンツアイテムを、たとえば、テキストコンテンツアイテムおよびＵＩコンポーネントの位置情報に基づいて、グルーピングするかまたはＵＩコンポーネントに対応付けることができる。
【００３６】
いくつかの実施形態において、ＧＵＩモデルは、いずれのＵＩコンポーネントにも対応付けられない特定のテキストコンテンツアイテムを、クリックされるとアクションを開始させることができるクリッカブルテキストとして示すことができる。いくつかの実施形態において、ＧＵＩモデルは、設計されたＧＵＩ画面のルック・アンド・フィールを再現できるようにＧＵＩ画面の各種ＵＩコンポーネントを如何にして表示すべきかを記述することができる。特定の実施形態において、ＧＵＩモデルはまた、ＧＵＩ画面上でユーザインターフェイスコンポーネントに対応付ける機能に関する情報を含み得る。ユーザインターフェイスコンポーネントに対応付けられる機能は、たとえば、機械学習ベースの分類器によって分類されたユーザインターフェイスコンポーネントのタイプ、および／または対応付けられたテキストコンテンツアイテム（もしあれば）に基づいて、判断することができる。いくつかの実装例において、ＧＵＩモデルはメタデータとして生成されてもよい。いくつかの実装例において、ＧＵＩモデルはＪａｖａＳｃｒｉｐｔオブジェクト表記（ＪＳＯＮ）フォーマットのような、言語から独立したデータ交換フォーマットで記述されてもよい。いくつかの実施形態において、ユーザは、ＧＵＩモデルに関するフィードバックを提供することができる。次に、このユーザフィードバックを用いて、機械学習ベースの分類器Ｑを改善（たとえば再訓練）することができる。
【００３７】
設計情報に基づいて生成されたＧＵＩモデルは、各種ダウンストリームコンシューマが使用できる。たとえば、ダウンストリームコンシューマは、このモデルを使用することにより、ＧＵＩを実現するためのコードを、自動的にかつ実質的に手作業のコーディングなしで、生成することができる。このコードは、ＧＵＩを表示するために、１つ以上のプロセッサが実行可能な実行可能プログラムであってもよく、または、たとえばウェブブラウザが解釈可能な解釈可能プログラムであってもよい。同じＧＵＩモデルを異なるコンシューマが使用することが可能である。たとえば、第１のコンシューマが第１のプラットフォーム（たとえばｉＯＳ（登録商標））に対して実行可能なものを自動的に生成するためにこのＧＵＩモデルを使用してもよく、第２のコンシューマが異なるプラットフォーム（たとえばＡｎｄｒｏｉｄ（登録商標））に対して第２の実行可能なものを自動的に生成するためにこの同じＧＵＩモデルを使用してもよい。また、ＧＵＩモデル（たとえばＪＳＯＮフォーマット）を用いて、マークアップ言語（たとえばＨＴＭＬもしくはＸＭＬ）またはスタイルシート言語（たとえばカスケーディングスタイルシート（ＣＳＳ））のような異なるプログラミング言語でコードを生成することもできる。
【００３８】
本明細書で使用するＵＩコンポーネントは、ＧＵＩ画面のグラフィカルコンポーネントを意味し得る。ＵＩコンポーネントは、ボタン、テキスト入力ボックス、ドロップダウンリスト、ドロップダウンメニュー、チェックボックス、ラジオボタン、スイッチボタン、アイコン、表、（人々または物体の）写真、ラインディバイダ、コンテナなどのような、さまざまなタイプのＵＩコンポーネントを含み得る。ＧＵＩ画面は１つ以上のテキスト領域を含み得る。各テキスト領域はテキストコンテンツを含み得る。各テキスト領域内のテキストコンテンツは、１つ以上のテキストコンテンツアイテムを含み得る。本明細書で使用するテキストコンテンツアイテムは、任意の言語の特定のテキスト文字を含むＧＵＩ画面の非グラフィカルコンポーネントを意味し得る。たとえば、テキストコンテンツアイテムは、単語、特殊文字、または短い語句を含み得る。本明細書で使用する、ＧＵＩコンポーネントは、ＵＩコンポーネントまたはテキストコンテンツアイテムを含む、ＧＵＩ画面に示される何等かの要素を含み得る。
【００３９】
説明のために、本明細書において特定の例について述べる。しかしながら、これらの例は、限定ではなく例示を意図している。本明細書に開示される教示は、モバイルアプリケーション、非モバイルアプリケーション、デスクトップアプリケーション、ウェブアプリケーション、企業アプリケーションなどのような、さまざまな種類のアプリケーションにも適用可能である。さらに、本開示の教示は、特定の動作環境（たとえばオペレーティングシステム、デバイス、プラットフォームなど）に限定されるのではなく、複数の異なる動作環境に適用することが可能である。
【００４０】
図１は、特定の実施形態に係る、グラフィックユーザインターフェイス（ＧＵＩ）についての設計情報に基づいてＧＵＩのＧＵＩモデルを生成するためのシステム１００の一例の簡略化されたハイレベル図を示し、生成されたＧＵＩモデルは、ダウンストリームコンシューマが使用して、ＧＵＩの１つ以上のインプリメンテーションを自動的に生成することが可能である。図１に示されるシステム１００は、一例にすぎず、本開示の範囲を不当に制限することを意図しているのではない。当業者は多数の可能な変形、代替形、および修正を認識するであろう。たとえば、いくつかの実装例において、システム１００は、図１に示されているものよりも多くのまたは少ないサブシステムまたはコンポーネントを有していてもよく、２つ以上のサブシステムを組み合わせてもよく、または、サブシステムの異なる構成または配置を有していてもよい。
【００４１】
図１に示されるように、システム１００は、ＧＵＩの１つ以上のＧＵＩ画面画像１０４を入力として受け、１つ以上のＧＵＩ画面画像１０４に基づいてＧＵＩのＧＵＩモデル１２４を生成するように構成された、モデル生成システム（model generation system）（ＭＧＳ）１０２を含み得る。次に、ＧＵＩモデル１２４は、１つ以上のダウンストリームコンシューマ１０３によって使用されることができる。１つ以上のダウンストリームコンシューマ１０３は、ＧＵＩモデル１２４に基づいて、実質的に手作業によるコーディングなしで、ＧＵＩの１つ以上のＧＵＩインプリメンテーション１１０、１１２、および１１４を生成することができる。ＧＵＩインプリメンテーション１１０、１１２、および１１４は、１つ以上のプロセッサによって実行可能であり、それにより、異なるプラットフォーム上にＧＵＩを表示することができる。
【００４２】
先に示したように、ＧＵＩのためのＧＵＩモデルまたはインプリメンテーションの作成前に、ＧＵＩについての情報を定義または収集してもよい。１つ以上のＧＵＩ画面画像１０４を、顧客またはクライアント調査、マーケティング調査、ならびに、ＧＵＩのルック・アンド・フィールおよびＧＵＩに含めるべき機能を伝えるその他の情報源に基づいて、集約してもよい。したがって、１つ以上のＧＵＩ画面画像１０４は、ＧＵＩの所望のルック・アンド・フィールおよび機能を記述することができる。機能コンサルタント、ユーザ体験（ＵＸ）設計者などのようなさまざまな異なる人員がＧＵＩ画面画像１０４の準備に関わり得る。ＧＵＩ画面画像１０４は、コンピュータ支援設計ツールを用いて生成しデジタルフォーマットで保存してもよく、または紙の上にスケッチとして手作業で作成してからスキャンしてデジタル画像にしてもよい。
【００４３】
図１に示される実施形態のような特定の実施形態において、ＧＵＩ画面画像１０４は、１つ以上の画像を含み得る。各画像は、１つのＧＵＩ画面のためのものであってもよく、複数のＧＵＩ画面のためのものであってもよい。特定の実施形態において、ＧＵＩ画面画像１０４は、シーケンスとして受けてもよく、順序を有していてもよく、このシーケンスまたは順序は、画像によって示される画面と画面との間の流れを特定する。ＧＵＩ画面画像１０４は、画面の設計およびルック・アンド・フィール、画面と画面との間の移行などを示し得る。各ＧＵＩ画面画像１０４は、１つ以上のＵＩコンポーネント１３４とテキスト情報１３２とを含み得る。ＧＵＩ画面画像１０４は、ビットマップファイル、ＪＰＥＧファイル、ＰＮＧ（ポータブルネットワークグラフィックス）ファイル、ＧＩＦファイル、ＰＤＦファイルなどのような、多種多様なフォーマットのうちの１つで受けることができる。多種多様な技術を用いてＧＵＩ画面画像１０４を生成することができる。たとえば、ＧＵＩ画面画像１０４は、カメラ、スキャナなどのような画像取込デバイスを用いて取り込まれた写真である画像を含み得る。別の例として、ＧＵＩ画面画像１０４は、スクリーンショット、たとえば既存のアプリケーションの画面のスクリーンショットである画像を含み得る。この場合、これから開発されるアプリケーションが、既存のアプリケーションと同様のＧＵＩ画面を有することになる（たとえば、既存のアプリケーションは、アプリケーションの新たなバージョンを開発しようとしているアプリケーションの前のバージョンの可能性がある）。ＧＵＩ画面画像１０４はまた、画像編集アプリケーション（たとえばAdobe Corporation（登録商標）が提供する各種画像編集アプリケーション）のようなアプリケーションを用いて生成された画像を含み得る。ＧＵＩ画面画像１０４はまた、各種ワードプロセッサ（たとえばＭＳ  ＷＯＲＤ（登録商標））、図作成アプリケーション（たとえばＶｉｓｉｏ（登録商標））、およびその他のアプリケーションのような画像を作成または編集可能なソフトウェアアプリケーションを用いて生成された画像を含み得る。
【００４４】
ＧＵＩ画面画像１０４を用いて開発しようとしているアプリケーションは、モバイルアプリケーション（たとえばモバイルデバイスが実行可能なアプリケーション）、デスクトップアプリケーション、ウェブアプリケーション、企業アプリケーションなどを含むがこれらに限定されない各種のアプリケーションのうちの１つであってもよい。アプリケーションは、多種多様なデバイス（たとえばスマートフォン、タブレット、ラップトップ、デスクトップコンピュータなど）およびプラットフォーム（たとえばｉＯＳ（登録商標）プラットフォーム、Ａｎｄｒｏｉｄ（登録商標）プラットフォーム、Ｗｉｎｄｏｗ（登録商標）プラットフォームなど）を対象とし得る。たとえば、ＧＵＩ画面画像１０４は、Ａｐｐｌｅ（登録商標）ｉＰｈｏｎｅ（登録商標）上で実行されるように設計されたモバイルアプリケーションのための１つ以上のＧＵＩ画面の１つ以上の画像を含み得る。この場合、画面は、モバイルデバイスの画面の面積全体またはその一部にわたっている。
【００４５】
各ＧＵＩ画面画像１０４は、ボタン、テキスト入力ボックス、ドロップダウンリスト、ドロップダウンメニュー、チェックボックス、アイコン、表、（人々または物体の）写真などのような、１つ以上のＵＩコンポーネント１３４を含み得る。いくつかの実施形態において、いくつかのＵＩコンポーネント１３４は、対応付けられたテキストを含み得る。たとえば、あるボタンは、このボタンの上の「次へ」、「取消」、「確認」、または「ＯＫ」のような単語を含み得る。また、ＵＩコンポーネント１３４は、サイズ、位置、または対応付けられたアクションもしくは機能のような、対応付けられた属性を有し得る。たとえば、ＵＩコンポーネント１３４は、ＧＵＩ画面画像１０４内のいずれかの位置にあればよい。いくつかの実施形態において、ＵＩコンポーネント１３４は、表、リスト、ツリー構造、フローチャート、組織図などのような、レイアウトまたは階層構造に従って配置されてもよい。いくつかのＵＩコンポーネント１３４は、クリック可能であってもよく、選択可能であってもよく、そうでなければユーザ入力（たとえばユーザエントリ）を取り込んでもよく、その他いくつかのＵＩコンポーネントは、静的であってもよく、またはユーザ入力を取り込まなくてもよい。
【００４６】
図１に示されるように、各ＧＵＩ画面画像１０４はテキスト情報１３２を含み得る。テキスト情報１３２は、画面のルック・アンド・フィール（たとえば、画面の構造、画面のユーザインターフェイスコンポーネント、使用されるフォント、画面上で使用される色（たとえば前景および背景色）、画面の機能およびそのユーザインターフェイスコンポーネント、画面およびそのユーザインターフェイスコンポーネントが表示するデータなどを含むが、これらに限定されない、アプリケーションの機能のテキスト記述を提供し得る。また、テキスト情報１３２は、その他有益な材料またはユーザに対する命令を含み得る。いくつかの実施形態において、テキスト情報１３２はまた、複数の画面間の移行を記述し得る。
【００４７】
従来のアプリケーション開発環境において、アプリケーションは、ＧＵＩ画面画像１０４に基づいて手作業で構築することができる。たとえば、ＧＵＩ画面画像１０４は、アプリケーションのためのＧＵＩ画面画像１０４を実現するためのコードおよびアプリケーションのその他のコンポーネントを記述するタスクが課された技術者または開発者を含む工学技術組織に提供することができる。これらの開発者は、ＧＵＩ画面画像１０４を理解してから、ＧＵＩ画面画像１０４に定められているアプリケーションのＧＵＩおよび対応付けられた機能を実現するコードを手作業で書き込む必要がある場合がある。
【００４８】
特定の実施形態に従うと、モデル生成システム１０２は、ＧＵＩ画面画像１０４を入力として取り込み、たとえば、モデル生成器１２０、ＵＩコンポーネント分類器１３６、および／またはメモリ１２２に格納されている参照情報１２１を用いて、ＧＵＩモデル１２４を自動的に生成するように構成することができる。次に、ＧＵＩモデル１２４を用いて、ＧＵＩの１つ以上のインプリメンテーションを自動的に生成することができる。これらのインプリメンテーションは、ＧＵＩを実現するコードおよびロジックを含み得る。これらのインプリメンテーションは、１つ以上のプロセッサが実行することができる実行可能なインプリメンテーションを含み得る。
【００４９】
図１に示されるように、モデル生成システム１０２は、協働することによりＧＵＩモデル１２４を生成するように構成された１つ以上のサブシステムを含み得る。これらのサブシステムは、ハードウェア、コンピュータシステムの１つ以上の処理ユニット（たとえばプロセッサもしくはコア）によって実行されるソフトウェア（たとえばコード、命令、プログラム）、またはその組み合わせで実現されてもよい。ソフトウェアは、メモリ１２２のような非一時的な記憶媒体（たとえばメモリデバイス）に格納されてもよい。図１に示される実施形態において、モデル生成システム１０２は、１つのモデル生成器１２０を含む。代替の実施形態において、モデル生成システム１０２は複数のモデル生成器１２０を含み得る。
【００５０】
モデル生成システム１０２は、さまざまな異なる技術を用いて、ＧＵＩ画面画像１０４からＧＵＩモデル１２４を構築することができる。たとえば、モデル生成システム１０２は、ＧＵＩ画面画像１０４を処理し解析することにより、ＧＵＩに対して指定される１つ以上のＧＵＩ画面を決定することができ、各ＧＵＩ画面ごとに、この画面上に含まれる一組のユーザインターフェイスコンポーネントおよびこれらのユーザインターフェイスコンポーネントの物理的配置を決定することができる。いくつかの実施形態において、このＧＵＩモデル生成処理は、たとえば、ＧＵＩ画面について、一組のユーザインターフェイスコンポーネント（たとえばボタン、ドロップダウンリスト、セグメントなど）およびそれらの属性（たとえばラベル、サイズ、位置）を決定することと、ＧＵＩ画面内のＵＩコンポーネントの物理的レイアウトを決定すること（たとえばＵＩコンポーネントまたはＵＩコンポーネントのグループの階層的包含関係を決定すること）と、ＵＩコンポーネントのうちの１つ以上に対応付けられる機能を決定することとを含み得る。
【００５１】
特定の実施形態において、モデル生成システム１０２は、ＧＵＩ画面画像１０４を処理し解析し、たとえば、ＵＩコンポーネントの各々の境界を検出可能な輪郭検出技術を用いて、画面に含まれる１つ以上のユーザインターフェイスコンポーネントを特定するように、構成することができる。ＵＩコンポーネントの各々の境界に基づいて、各ＵＩコンポーネントのサイズおよび位置を決定することができる。各ＵＩコンポーネントの境界の内部の画像を、抽出し、サポートベクターマシン分類器、畳み込みニューラルネットワークベースの分類器のような機械学習ベースの分類器を用いて（たとえばソフトマックス（Softmax）分類器を用いて）、または、その他の深層ニューラルネットワークベースの分類器を用いて、分類することができる。分類器は、ＵＩコンポーネントを、ボタン、テキスト入力ボックス、ドロップダウンリスト、ドロップダウンメニュー、チェックボックス、アイコン、表、（人々または物体の）写真などのような、多数の可能なＵＩコンポーネントのタイプのうちの、あるＵＩコンポーネントのタイプに分類することができる。ＧＵＩ画面のコンポーネントおよびＧＵＩ画面のレイアウトを決定するためにモデル生成システム１０２が実行し得る処理のその他の説明および例を以下に示す。
【００５２】
特定の実施形態において、モデル生成システム１０２は、ＧＵＩ画面画像１０４からテキスト情報１３２を抽出することができる。たとえば、モデル生成システム１０２のいくつかの実装例において、テキスト検出ツールを用いることにより、テキストコンテンツを含み得るＧＵＩ画面画像１０４内の領域の位置（たとえば座標）を判断することができ、次に、光学文字認識（ＯＣＲ）ツールを用いて、ＧＵＩ画面画像１０４内のこれらの領域からテキストコンテンツアイテムを抽出する（たとえば認識する）ことができる。いくつかの実施形態において、各ＵＩコンポーネントのサイズおよび位置ならびにテキストコンテンツアイテムの位置および情報に基づいて、いくつかのテキストコンテンツアイテム（たとえばクリッカブルボタン上のテキスト）を特定のＵＩコンポーネント（たとえばクリッカブルボタン）に対応付けることができる。
【００５３】
特定の実施形態において、モデル生成システム１０２が実行する処理は、モデル生成器１２０およびＵＩコンポーネント分類器１３６を含むモデル生成システム１０２にアクセス可能な参照情報１２１によってガイドされてもよい。参照情報１２１はさまざまな種類の情報を含み得る。たとえば、特定の実施形態において、参照情報１２１は、モデル生成システム１０２が実行する胥吏をガイドするさまざまなルールを含み得る。特定の実施形態において、参照情報１２１は、ＧＵＩに対して指定される１つ以上のＧＵＩ画面、および／または各ＧＵＩ画面ごとの、この画面に含まれる一組のユーザインターフェイスコンポーネント、およびＧＵＩ画面の物理的レイアウトを決定するためにモデル生成システム１０２が使用し得るルールを含み得る（たとえば、ＵＩコンポーネントおよびテキストコンテンツアイテムクラスタリングのためのルール）。図１に示される実施形態において、参照情報１２１はメモリ１２２に格納されてもよい。いくつかの他の実施形態において、参照情報１２１は、モデル生成システム１０２から遠隔にある場所に格納されてもよい。さらに他の実施形態において、参照情報１２１の一部がモデル生成システム１０２において局所的にメモリ１２２に格納されてもよく、その他の部分がモデル生成システム１０２から遠隔に格納されてもよい。
【００５４】
特定の実施形態において、モデル生成システム１０２が実行する処理または処理の一部は、各種機械学習技術を用いて実行してもよい。たとえば、機械学習技術を、ＵＩコンポーネントの検出および分類、テキスト検出、テキストコンテンツ（たとえば手書きのテキストコンテンツ）認識、またはＵＩコンポーネントおよびテキストコンテンツアイテムのクラスタリングのために、使用してもよい。これらの機械学習技術に関連する情報（たとえばニューラルネットワークの重み、畳み込みニューラルネットワークのフィルタ、機械学習に使用されるモデル、モデルを訓練するためのデータ、モデルのアプリケーション、モデルの精度を改善するためのフィードバック情報など）も、参照情報１２１に含まれていてもよい。特定の実施形態において、ルールベースの処理と機械学習ベースの技術との組み合わせを、モデル生成システム１０２が使用してもよい。よって、参照情報１２１は、機械学習ベースのモデルに関連する情報およびルールを含み得る。
【００５５】
特定の実施形態において、参照情報１２１はまた、さまざまなタイプのＵＩコンポーネントに関する情報を含み得る。ＵＩコンポーネントのタイプについての情報は、このタイプ（たとえばボタン、チェックボックス、入力ボックスなど）の名称（たとえば識別）、ＵＩコンポーネントのタイプについてのパラメータ（たとえば属性、要素、またはフィールド名）、ＵＩコンポーネントのタイプについての機能またはアクション、接続性、および記憶情報、および／またはＵＩコンポーネントのタイプについてのデータソースなどのような、情報を含み得る。モデル生成システム１０２は、このような情報を用いることにより、ＧＵＩモデル１２４において、特定したＵＩコンポーネントを記述し特定のアクションをＵＩコンポーネントに対応付ける。
【００５６】
特定の実施形態において、参照情報１２１は、ユーザ（たとえばプログラマー）またはモデル生成システム１０２の管理者によって構成されてもよい。いくつかの他の実施形態において、参照情報１２１は、１つ以上の機械学習技術を用いて構築されてもよい。たとえば、参照情報１２１は、訓練データおよび教師あり機械学習技術を用いて構築された１つ以上の機械学習ベースのモデルを含み得る。１つ以上の機械学習ベースのモデルを用いることにより、ＧＵＩモデル１２４を生成することができる。
【００５７】
特定の実施形態において、ＧＵＩモデル１２４を、モデル生成器１２０が生成した１つ以上のファイルに存続させてもよい。ＧＵＩモデル１２４はさまざまなフォーマットで記述し得る。たとえば、いくつかの他の実装例において、ＧＵＩモデル１２４は、ＪａｖａＳｃｒｉｐｔオブジェクト表記（ＪＳＯＮ）フォーマットのような、言語から独立したデータ交換フォーマットで記述することができる。特定の実施形態において、モデル情報は、拡張可能マークアップ言語（ＸＭＬ）またはｊＱｕｅｒｙのようなマークアップ言語で符号化されてもよい。たとえば、モデル生成システム１０２は、ともにＧＵＩモデル１２４を表す１つ以上のＸＭＬファイルを生成してもよい。生成したファイルは、メモリ１２２に、または、モデル生成システム１０２がアクセス可能な何等かのその他のメモリ場所に格納してもよい。特定の実施形態において、ＧＵＩモデル１２４を、モデル生成システム１０２により、最初にファイルに存続させることなく、１つ以上のダウンストリームコンシューマ、たとえばコード生成器１２６、１２８、および１３０に送ってもよい。
【００５８】
次に、ＧＵＩモデル１２４を、１つ以上のダウンストリームモデルコンシューマ１０３が使用することができる。たとえば、モデルコンシューマ１０３は、ＧＵＩモデル１２４に基づいて１つ以上のＧＵＩインプリメンテーション１１０、１１２、および１１４を生成するように構成し得る。ＧＵＩインプリメンテーション１１０、１１２、および１１４は各々、ＧＵＩモデル１２４において特定された情報に基づき得る。ＧＵＩモデル１２４は設計されたＧＵＩ画面画像１０４に基づいて生成されるので、ＧＵＩモデル１２４に基づいて生成されるＧＵＩインプリメンテーションは、ＧＵＩ画面画像１０４に記述されているルック・アンド・フィールおよび機能を有し得る。たとえば、ＧＵＩモデル１２４は、特定の一組のＵＩコンポーネントを含み特定の一組の機能またはアクションにマッピングされた特定のＧＵＩウィンドウまたは画面を指定する情報を含み得る。ＧＵＩモデル１２４に基づいて生成されるＧＵＩインプリメンテーション（たとえばＧＵＩを実現するコードまたは命令）は、特定の一組のＵＩコンポーネントを含み特定の一組の機能またはアクションにマッピングされた特定のＧＵＩ画面をインスタンス化するためのコードおよびロジックを含み得る。
【００５９】
したがって、ＧＵＩインプリメンテーションは、ＧＵＩ画面画像１０４に基づいて生成されたＧＵＩモデル１２４によって記述されたＧＵＩ画面および対応付けられたアクションまたは機能を実現することができる。たとえば、ＧＵＩモデル１２４が特定の物理的レイアウトで配置された一組のユーザインターフェイスコンポーネントを含む特定の画面を指定している場合、この画面および特定の物理的レイアウトをＧＵＩインプリメンテーションによって実現することができる。ＧＵＩモデル１２４が特定のユーザインターフェイスコンポーネントの特定の機能を指定している場合、このモデルに基づいて生成されたＧＵＩインプリメンテーションは、この特定の機能を実現しこの機能を特定のユーザインターフェイスコンポーネントに対応付けるためのロジックを含み得る。特定の実施形態において、ＧＵＩインプリメンテーションは、特定のユーザインターフェイスコンポーネントを、この特定のユーザインターフェイスコンポーネントに対応付けられる特定の機能を実現するコードにリンクさせることを可能にするフックを提供し得る。特定の実施形態において、ＧＵＩインプリメンテーションは、開発者が、追加機能を実現する追加コードをＧＵＩインプリメンテーションにフックさせるまたは追加することを可能にするフックを提供するコードを含み得る。
【００６０】
特定の実施形態において、ダウンストリームモデルコンシューマ１０３は１つ以上のコード生成器１２６、１２８、および１３０を含み得る。これらのコード生成器は、ＧＵＩモデル１２４を入力として取り込み、場合によっては、たとえば、異なるプログラミング言語および／または異なるプラットフォームのためのコード生成テンプレート１４０に基づいて、異なるプログラミング言語および／または異なるプラットフォームでＧＵＩのコードインプリメンテーションを生成するように構成されている。コード生成器は、ＧＵＩモデル１２４を入力として取り込み、ＧＵＩをそのコード生成器に固有の言語で生成してもよい。インプリメンテーションは、１つ以上のプロセッサが実行可能なＧＵＩの実行可能インプリメンテーションであってもよい。たとえば、コード生成器１２６は、モデル１２４を入力として取り込み、第１のプラットフォーム（たとえばｉＯＳ（登録商標）プラットフォーム）のための第１の言語でＧＵＩインプリメンテーション１１０を生成してもよい。コード生成器１２８は、第１のプラットフォームのためのＧＵＩモデル１２４を用いて第２の言語でＧＵＩインプリメンテーション１１２を生成してもよい。コード生成器１３０は、Ａｎｄｒｏｉｄ（登録商標）プラットフォームのためにＧＵＩモデル１２４を用いてＧＵＩインプリメンテーション１１４を生成してもよい。ＧＵＩインプリメンテーションをコンパイルする（または解釈する、またはそれに対して実行される何等かのその他の処理）ことにより、ＧＵＩの実行可能バージョンを生成してもよい。
【００６１】
特定の実施形態において、ＧＵＩインプリメンテーション１１０、１１２、および１１４の各々は、ＧＵＩを実現するために使用可能なコード生成テンプレートに対応する。コード生成テンプレートは、コンピュータシステムの１つ以上のプロセッサが実行するために実行可能なＧＵＩを生成するためにコンパイルまたは解釈することが可能なハイレベルコード（方法、機能、クラス、イベントハンドラなどを含み得る）を含む１つ以上のソースコードファイルを含み得る。このようにして、ＧＵＩの実行可能なインプリメンテーションを、ＧＵＩモデル１２４に基づいて自動的に生成することが可能であり、実行可能なインプリメンテーションは、ＧＵＩ設計情報に記述されているＧＵＩのルック・アンド・フィールならびにＧＵＩおよびＵＩコンポーネントの機能をカプセル化する。たとえば、コード生成器１２６を、ＧＵＩモデル１２４に対応するマークアップコードを含む１つ以上のファイルを受け、マークアップコード（たとえばＸＭＬ）を（ハイレベル）ソースコード（たとえばＪａｖａ（登録商標）、Ｃ＋＋、またはその他のプログラミング言語）に変換することによって１つ以上のソースコードファイルを含むＧＵＩインプリメンテーション１１０を出力するように、構成してもよい。
【００６２】
いくつかの実装例において、モデル生成システム１０２は、ユーザ１０６が、直接またはクライアントデバイス１０８を介してモデル生成システム１０２とやり取りすることを可能にする１つ以上のインターフェイスを提供し得る。これらのユーザインターフェイスは、たとえば、各種ＧＵＩ、コマンドラインインターフェイス（ＣＬＩ）、およびその他のインターフェイスを含み得る。特定の実施形態において、モデル生成システム１０２は、統合開発環境（integrated development environment）（ＩＤＥ）の一部であってもよい。
【００６３】
クライアントデバイス１０８は、パーソナルコンピュータ、デスクトップコンピュータ、モバイルもしくはハンドヘルドデバイス（たとえばラップトップ、スマートフォン、タブレットなど）、またはその他の種類のデバイスを含むがこれらに限定されない、異なる種類のものであってもよい。特定の実施形態において、クライアントデバイス１０８は、直接または通信ネットワークを介してモデル生成システム１０２に通信可能に結合されてもよい。通信ネットワークはさまざまな種類のものであってもよく、１つ以上の通信ネットワークを含み得る。通信ネットワークの例は、インターネット、ワイドエリアネットワーク（ＷＡＮ）、ローカルエリアネットワーク（ＬＡＮ）、イーサネット（登録商標）ネットワーク、パブリックまたはプライベートネットワーク、有線ネットワーク、無線ネットワークなど、およびその組み合わせを含み得るがこれらに限定されない。異なる通信プロトコルを用いることにより、クライアントデバイス１０８とモデル生成システム１０２との間の通信を容易にしてもよく、これは、ＩＥＥＥ８０２．ＸＸプロトコルスイート、ＴＣＰ／ＩＰ、ＩＰＸ、ＳＡＮ、ＡｐｐｌｅＴａｌｋ（登録商標）、Ｂｌｕｅｔｏｏｔｈ（登録商標）、およびその他のプロトコルなどの無線プロトコルおよび有線プロトコル双方を含む。
【００６４】
ユーザとモデル生成システム１０２とのやり取りは各種形態を取ることができる。ユーザは、ＧＵＩ画面画像１０４を、モデル生成システム１０２が提供する１つ以上のインターフェイスを用い、上記やり取りを介してモデル生成システム１０２に提供することができる。特定の実施形態において、モデル生成システム１０２の出力（たとえばＧＵＩモデル１２４）または処理の状態に関する情報を、モデル生成システム１０２が、クライアントデバイス１０８に伝達しクライアントデバイス１０８を介してユーザ１０６に示してもよい。たとえば、ＧＵＩモデル１２４に関連する情報をユーザ１０６に対して提示してもよい。そうすると、ユーザ１０６は、ＧＵＩモデル１２４の精度をレビューし、必要であればＧＵＩモデル１２４に対して変更を加えることができる。このようにして、ユーザ１０６は、モデル生成システム１０２が生成したＧＵＩモデル１２４に関するフィードバックを提供することが可能である。そうすると、モデル生成システム１０２はこのフィードバックを用いて参照情報１２１（たとえば訓練サンプル）をアップデートすることができる。アップデートされた参照情報１２１は、１つ以上の機械学習ベースのモデルを再訓練するためおよび／または次世代のＧＵＩモデル１２４を生成するために使用することができる。たとえば、ユーザ１０６が、ＧＵＩモデル１２４をレビューしながら、ＧＵＩモデルにおいて示されているＵＩコンポーネントのうちの１つが間違って分類されたと判断した場合、ユーザは、フィードバック（たとえば誤って分類されたＵＩコンポーネントの画像およびＵＩコンポーネントの実際のクラスまたはタイプ）をクライアントデバイス１０８を介してモデル生成システム１０２に与えることができる。モデル生成システム１０２は、ユーザフィードバックに基づいて、ＵＩコンポーネントを適切なアクションに対応付ける、ＵＩコンポーネントを再度グルーピングする、またはレイアウトを再度生成するなどして、ＧＵＩモデル１２４のアップデートを行うことができる。このようにして、ユーザからのフィードバックループにより、モデル生成システム１０２の精度を経時的に改善することが可能である。次に、注釈付きの画像を参照情報として保存し、何等かの機械学習ベースのモデル（たとえばＵＩコンポーネント分類器）を再訓練するための訓練サンプルとして使用してもよい。
【００６５】
先に述べたように、モデル生成システム１０２は、ＧＵＩ画面画像１０４に基づいて、自動的にかつ実質的にユーザの手作業による介入なしで、ＧＵＩモデル１２４を生成するように構成されている。さらに、同じＧＵＩモデル１２４を用いて、異なるデバイス、プラットフォーム、および／または言語のためのＧＵＩインプリメンテーションを生成することができる。多くの場合、ＧＵＩモデル１２４をダウンストリームモデルコンシューマが用いてＧＵＩインプリメンテーションを自動的に生成することができる。たとえば、ＧＵＩインプリメンテーションは、開発者による実現のために手作業でコードを記述することなく、ＧＵＩモデル１２４に基づいて生成することができる。このようにして、実行可能なＧＵＩインプリメンテーションを、実質的にユーザの手作業による介入なしで、またはアプリケーションのためのコードまたはロジックを手作業で記述することなく、ＧＵＩ画面画像１０４から自動的に生成することができる。この自動化レベルは、実質的にアプリケーション開発サイクルを高速化し開発コストを低減することが可能である。いくつかの実施形態において、ＧＵＩモデル１２４を用いて、ＧＵＩインプリメンテーションのテストを自動化するためのテストを生成することもできる。
【００６６】
図２は、特定の実施形態に係るＧＵＩ画面２００のモックアップ画像の一例を示す。ＧＵＩ画面２００の画像は、ＧＵＩ設計者から、開発者がアプリケーションのためのＧＵＩを実現するために使用するようにするために提供することができる。ＧＵＩ画面２００は、１つ以上のＵＩコンポーネントと１つ以上のテキストコンテンツアイテムとを含み得る。ＵＩコンポーネントは、ＧＵＩ画面２００上のいずれかの位置にあればよい。ＵＩコンポーネントは、たとえば、１つ以上のボタン、テキスト入力ボックス、ドロップダウンリスト、ドロップダウンメニュー、チェックボックス、アイコン、表、（人々または物体の）写真、ラインディバイダ、コンテナなどを含み得る。たとえば、図２に示されるように、ＧＵＩ画面２００は、ボタン２１４、テキスト入力ボックス２０６、ラジオボタン２１０、ドロップダウンリスト２１２、およびドロップダウン表８たとえばカレンダー）２０８を含み得る。いくつかのＵＩコンポーネントは、対応付けられたテキストコンテンツアイテムを含み得る。たとえば、ボタン２１４は、ボタン上の「次へ」、「取消」、または「ＯＫ」ボタンのようなテキストコンテンツアイテム２１８を含み得る。ＵＩコンポーネントは、サイズ、色、位置のような対応付けられた属性、または、対応付けられたアクションもしくは機能を有し得る。
【００６７】
いくつかの実施形態において、ＵＩコンポーネントは、表、リスト、ツリー構造、フローチャート、組織図などのようなレイアウトまたは階層構造に従って、ＧＵＩ画面２００上に配置することができる。たとえば、図２に示される例において、テキスト入力ボタン２０６は縦方向に並べてもよく、表を形成してもよい。
【００６８】
いくつかのＵＩコンポーネントは、クリック可能、選択可能、またはその他のユーザ入力を取り込んでもよく、その他いくつかのＵＩコンポーネントは、静的でユーザ入力を取り込まないものであってもよい。たとえば、テキスト入力ボックス２０６は、キーボードからのユーザ入力を取り込むことができ、ラジオボタン２１０およびドロップダウンは（たとえばマウスを用いて）手作業で選択可能であり、ボタン２１４はクリックされることにより新たなＧＵＩ画面を表示させることができる。ＧＵＩ画面２００のＵＩコンポーネントは、静的コンポーネントであっても動的コンポーネントであってもよい。静的コンポーネントは、ＧＵＩ画面上に表示されたその値がインスタントが異なっても不変のコンポーネントである。動的コンポーネントは、ＧＵＩ画面に表示されたその値が、インスタントが異なると変化し得るコンポーネントである。たとえば、図２において、いくつかのテキスト入力ボックスは静的コンポーネントである。ボタン２１４は、各々が異なるタイプのＵＩコンポーネントであれば、静的コンポーネントであり得る。ボタン２１４は、同じタイプのＵＩコンポーネントに対応付けられているのであれば、動的コンポーネントであり得るものであり、ボタン各々についてテキストがＵＩコンポーネントの一部である場合と比較して、対応するテキストを動的に追加することにより、同じＵＩコンポーネント画像を用いて生成し得るものである。
【００６９】
図２に示されるように、ＧＵＩ画面２００は、タイトル２２０、入力ボックスの説明２０４、デフォルト入力２１６、およびボタン２１４に対応付けられたテキストコンテンツアイテム２１８のような同一タイプの異なるＵＩコンポーネントを区別するテキスト情報といった、さまざまなテキスト情報を含み得る。タイトル２２０のようないくつかのテキスト情報は、アプリケーションの機能のテキスト記述を提供し得る。入力ボックスの説明２０４５のようないくつかのテキスト情報は、いくつかのＵＩコンポーネントのテキスト記述を提供し得る。テキストコンテンツアイテム２１８のようないくつかのテキスト情報の各々は、ＵＩコンポーネントの一部であってもよく、ボタン２１４のような、対応付けられたＵＩコンポーネントの機能を記述してもよい。デフォルト入力２１６のようないくつかのテキスト情報は、その値が入力、選択、そうでなければ変更され得るいくつかのＵＩコンポーネントのデフォルト値を提供し得る。テキスト情報は、フォント、サイズ、色、位置などのような、対応付けられた属性を有し得る。いくつかの実施形態において、テキスト情報はユーザに対する命令を含み得る。テキスト情報は静的であっても動的であってもよい。図２における静的テキストの例は、ヘッダセクションにおけるヘッダタイトル「アカウント作成」、本体セクションにおける属性タイトル「名」、「姓」、「Ｅメール」、「ユーザ名」などを含み得る。図２における動的テキストの例は、本体セクションにおける属性値「英語」、「Peter」など、その値があるインスタンスの第１の人物に関する情報から、別のインスタンスの第２の人物に関する情報に変更する可能性があるものを含み得る。
【００７０】
各種情報をＧＵＩ画面画像から抽出し、画面のＵＩコンポーネントおよびテキストコンテンツを識別するために使用することができる。識別したコンポーネントの特定の属性を、たとえば、機械学習ベースのモデルを用いて判断することができる。次に、識別したコンポーネントの属性を用いて、ＧＵＩモデルおよび／またはＧＵＩを実現するためのコードを生成することができ、詳細は以下に述べる通りである。
【００７１】
図３は、特定の実施形態に係る、ＧＵＩについての設計情報に基づいてＧＵＩのためのＧＵＩモデルを生成するためのシステム３００の一例を示す。この例において、システム３００は、クライアントサブシステム３１０とサーバサブシステム３２０とを含むクライアント−サーバアーキテクチャを有する。クライアントサブシステム３１０は、ＧＵＩプロトタイプを画像またはスケッチの形態でアップロードするためのプロビジョンと、ＧＵＩインプリメンテーションを生成するためのコード生成ロジックとを含み得る。いくつかの実施形態において、コード生成ロジックは、クライアントサブシステム３１０ではなくサーバサブシステム３２０上に実現し得る。サーバサブシステム３２０は、モデル生成システム３３０と、クライアントサブシステム３１０とサーバサブシステム３２０との間の相互運用性および分離を提供するレプレゼンテーショナル・ステート・トランスファー（Representational State Transfer）（ＲＥＳＴ）サービス３４０とを含み得る。いくつかの実施形態において、システム３００は、サーバ等の同一のコンピューティングシステム上で実現されてもよい。
【００７２】
１つ以上のＧＵＩ画面のための１つ以上の画像（またはスケッチ）等のＧＵＩ設計文書を受けると、ＧＵＩ画面の各画像は、クライアントサブシステム３１０上のアップローダ３０２によってサーバサブシステム３２０にアップロードすることができる。ＧＵＩ画面の画像は、ＲＥＳＴサービス３４０を介してサーバサブシステム３２０に送信することができ、ＲＥＳＴサービス３４０は、ＧＵＩ画面の画像をモデル生成システム３３０に送ることにより、サーバサブシステム３２０上でモデル生成プロセスを開始させることができる。モデル生成システム３３０は、ＧＵＩ画面の画像、および、機械学習サブシステム３６０が生成した機械学習ベースのモデルに基づいて、ＧＵＩモデルを生成するように構成されている、モデル生成器３５０を含み得る。
【００７３】
機械学習サブシステム３６０は、ＧＵＩ画面の画像のような、ＧＵＩ設計文書に基づいて、ＧＵＩモデルを生成するために使用される、機械学習ベースのモデルを生成し得る。機械学習ベースのモデルは、たとえば、ＵＩコンポーネント検出器および／または分類器およびテキスト検出器および／または文字分類器を含み得る。いくつかの実施形態において、機械学習ベースのモデルは、画像ファイル内のオブジェクトを識別し分類することができる畳み込みニューラルネットワーク（ＣＮＮ）等のニューラルネットワークベースの分類器を含み得る。
【００７４】
機械学習ベースのモデルは、教師あり学習技術および注釈付き訓練サンプル３６８を用いて訓練することができる。注釈付き訓練サンプル３６８は、ボタン、テキストフィールド、テキスト入力ボックス、ドロップダウンリスト、ドロップダウンメニュー、アイコン、表、円グラフ、棒グラフなどのような、各種ＵＩコンポーネントを含む画像を含み得る。注釈は、画像内の各ＵＩコンポーネントの位置、ＵＩコンポーネントのタイプもしくはクラス、またはＵＩコンポーネントに対応付けられたアクションのような、各ＵＩコンポーネントを一意的に識別するラベルまたはタグを含み得る。いくつかの実施形態において、注釈は画像ファイルにメタデータとして格納されてもよい。いくつかの実施形態において、注釈は画像ファイルとは別に格納されてもよい。いくつかの実施形態において、訓練サンプル内の画像はテキストコンテンツを含まなくてもよい。たとえば、訓練サンプルを生成するために使用される画像内のテキストコンテンツアイテムを、識別し、ブラックボックスまたはホワイトボックスのような予め定められたパターンに置き換えてもよい。
【００７５】
注釈付き訓練サンプル３６８は、特徴抽出エンジン３６６に送ることができる。特徴抽出エンジン３６６は、たとえば、深層ＣＮＮを実現することにより、さまざまなコンポーネントの画像から異なるレベルの特徴を取り出すことができる。これに対し、従来のコンピュータビジョンベースの技術は、特徴工学の面倒なタスクを要し得るものであり、特定のＵＩコンポーネントについて明確な特徴を手作業で識別し、サポートベクターマシン（support vector machine）（ＳＶＭ）または浅層ニューラルネットワークのような分類器に送ることができる。
【００７６】
特徴抽出エンジン３６６は、畳み込み、非線形（または活性化）関数（たとえばＲｅＬＵ）、および／またはプーリング（またはサブサンプリング）等の動作を、深層ＣＮＮの異なるレイヤの入力画像に対して実行することができる。ＣＮＮにおける畳み込み演算を用いることにより、入力画像（たとえば訓練画像またはＧＵＩ画面画像）から特徴を抽出することができる。畳み込みにおいて、（フィルタ、カーネル、または特徴検出器と呼ばれる）行列を、入力画像（または処理された画素アレイもしくは特徴マップ）の上で、（ストライドと呼ばれる）特定のステップでスライドさせることができる。すべての位置（またはステップ）で、入力画像内のフィルタ行列と重複した行列との間の要素ごとの操作を計算し合計することにより、畳み込み特徴または特徴マップと呼ぶことができる、出力行列の１要素を表す最終値を得ることができる。
【００７７】
活性化関数（たとえば正規化線形ユニット（ＲｅＬＵ））を用いる、追加の非線形演算を、すべての畳み込み演算後に用いてもよい。ＲｅＬＵの目的は非線形性をＣＮＮに導入することである。ｔａｎｈまたはシグモイド関数のようなその他の非線形関数も使用できるが、ＲｅＬＵがほとんどの状況においてより性能がよいことがわかっている。
【００７８】
（サブサンプリングまたはダウンサンプリングとも呼ばれる）空間プーリングは、各特徴マップの次元を低減する一方で、最も重要な情報を保持することができる。特に、プーリングは、特徴次元をより小さくかつより管理し易くすることができ、ネットワーク内のパラメータおよび計算の数を減じることができる。また、プーリングは、ネットワークを、入力画像内の小さな変形、歪み、および移動に対して不変にすることができ、入力画像内の小さな歪みはプーリングの出力を変化させないであろう。なぜなら、ローカルな近隣の最大値または平均値を使用するからである。よって、プーリングは、入力画像の同変表現を得るのに役立ち得るものであり、画像内の物体は、どこに位置していても検出できる。空間プーリングは、最大プーリング、平均プーリング、合計プーリングなどのような異なるやり方で実行してもよい。
【００７９】
入力画像（たとえば訓練画像またはＧＵＩ画面画像）から特徴を抽出するために、先ず畳み込みレイヤを用いて、１つ以上のフィルタで入力画像を畳み込むことにより、画像内のエッジまたは傾斜の検出のような、入力画像の１つ以上の特徴マップを生成することができる。活性化関数は非線形性を特徴マップに導入することができる。任意で、プーリングレイヤが特徴マップをダウンサンプリングすることにより、特徴マップの次元を低減してもよい。畳み込み、非線形（または活性化）関数、および任意のプーリングまたはサブサンプリング動作を再び、前のレイヤが生成した特徴マップに対して実行することにより、異なるレベルで特徴マップを抽出することができ、前のレイヤからの特徴マップを畳み込みの入力として使用することができる。このようにして、複数レベルの特徴マップを抽出して使用することにより、ＧＵＩ画面画像または訓練画像内のＵＩコンポーネントを検出し分類することができる。
【００８０】
次に、機械学習ベースのモデルを、抽出された特徴および注釈付き訓練サンプルの注釈を用いて訓練することができる。いくつかの実施形態において、ＳＳＤ技術（たとえば、Liu et al., “SSD: Single Shot MultiBox Detector,” arXiv:1512.02325v5, Dec. 29, 2016参照）またはＹＯＬＯ技術（たとえば、e.g., Redmon et al., “YOLO9000: Better, Faster, Stronger,” arXiv:1612.08242v1, Dec. 25, 2016参照）のようなオブジェクト検出技術を用い、オブジェクトを訓練画像のさまざまな異なる位置に、抽出した特徴を用いてローカライズすることができる。たとえば、深層ＣＮＮにおける分類レイヤ（全結合レイヤなど）は、抽出した特徴を用いることにより、訓練画像内に存在するＵＩコンポーネントを検出し分類することができる。分類結果は、訓練サンプルに対応付けられた注釈と比較することができる。分類結果が注釈に一致しない場合、フィードバックを分類レイヤおよび／または特徴抽出レイヤ（たとえば畳み込みレイヤ）に与えることにより、たとえば、バックプロパゲーション技術を用いて、深層ＣＮＮのパラメータを調整することができる。上記訓練プロセスは、各訓練サンプルごとに繰り返してもよい。深層ＣＮＮは、注釈付き訓練サンプルに基づいて、自身でＵＩコンポーネントのさまざまなタイプを区別するために使用できる一組の特徴を学習できるので、特徴抽出の面倒なタスクは回避できる。訓練プロセス後に、訓練されたモデル３６４を生成することができ、これは訓練サンプル内にあるＵＩコンポーネントを正確に検出し分類することができるであろう。機械学習ベースのモデルを生成するためのより詳細な処理は、以下でたとえば図５に関連して説明する。
【００８１】
モデル生成器３５０は、光学特徴認識（ＯＣＲ）モジュール３５２を含み得る。ＯＣＲモジュール３５２は、ＧＵＩ画面の画像内のテキストコンテンツを検出し認識する、および／またはテキストコンテンツをＧＵＩ画面画像から分離することができる。いくつかの実施形態において、ＯＣＲモジュール３５２は、機械学習ベースのモデルを使用することにより、テキストコンテンツを検出し認識することができる。ＯＣＲモジュール３５２の出力は、テキストコンテンツアイテムと、それらの位置と、テキストコンテンツなしの画像とを含み得る。以下で詳細に述べるように、ＯＣＲモジュール３５２からの出力画像において、ＧＵＩ画面画像内にテキストコンテンツアイテムが存在する領域は、ブラックボックス等の何等かの予め定められたパターンを含み得る。ＯＣＲモジュール３５２の出力はオブジェクト検出モジュールに送ればよい。ＯＣＲモジュール３５２のより詳細な動作は以下でたとえば図７との関連で説明する。
【００８２】
オブジェクト検出モジュール３５４は、機械学習サブシステム３６０が生成した機械学習ベースのモデルを用いてＯＣＲモジュール３５２からの出力画像内のＵＩコンポーネントを検出し分類することができる。たとえば、機械学習ベースのモデルは、ＵＩコンポーネント検出器および／または分類器を含み得る。いくつかの実施形態において、機械学習ベースのモデルは、画像内のオブジェクトを識別し分類することができる、畳み込みニューラルネットワークのようなニューラルネットワークベースの分類器を含み得る。オブジェクト検出モジュール３５４は、機械学習ベースのモデルを用いることにより、ＧＵＩ画面画像内のＵＩコンポーネントを識別し、各ＵＩコンポーネントを分類することにより、ＵＩコンポーネントのタイプと対応付けられたアクションまたは機能を実現することができる。出力検出モジュール３５４の出力は、テキストコンテンツアイテム（およびそれらの位置情報）、ならびに位置、タイプ（もしくはクラス）、対応付けられたアクションまたは機能を含み得る。
【００８３】
いくつかの実施形態において、オブジェクト検出モジュール３５４の出力はクラスタリングモジュール３５６に送ることができる。クラスタリングモジュール３５６は、検出したＵＩコンポーネントおよびテキストコンテンツアイテムを、たとえば、ＵＩコンポーネントおよび／またはテキストコンテンツアイテムローカル情報、ＵＩコンポーネントのタイプなどに基づいて、グルーピングすることができる。たとえば、グルーピングは、コンポーネント間の距離および／または類似性に基づいていてもよい。いくつかの実施形態において、クラスタリングモジュール３５６は、一組のルールを用いてグルーピングを実行し得る。たとえば、テキストコンテンツアイテムを、テキストボタンではなくテキスト入力ＵＩコンポーネントとともにグルーピングしてもよい。別の例として、ボタンおよびデートピッカー（date picker）コンポーネント（たとえばカレンダー）はともにグルーピングしなくてもよく、レイアウトにおいて個別の要素とみなしてもよい。いくつかの実施形態において、グルーピングに使用される一組のルールは、メモリ１２２内の参照情報１２１の一部として格納されるなど、パーシステントメモリデバイス内のデータ構造（たとえば表またはリスト）に格納してもよい。
【００８４】
クラスタリングモジュール３５６は、ボトムアップでグルーピングを再帰的に実行することができる。たとえば、個々のコンポーネント（たとえばＵＩコンポーネントおよび／またはテキストコンテンツアイテム）をグルーピングしてサブグループにすることができ、次に、このサブグループをグルーピングして高レベルのサブグループにし、１つのグループが画像内のすべてのコンポーネントをカバーするまで、続けることが判明した。
【００８５】
いくつかの実施形態において、テキストコンテンツアイテム、ＵＩコンポーネント、テキストコンテンツアイテムおよびＵＩコンポーネントに対応付けられた情報（たとえば位置、タイプなど）、およびクラスタマップ（またはレイアウト）を、テキスト解析モジュール３５８に送ることができる。テキスト解析モジュール３５８は、テキストコンテンツアイテムを解析することにより、ＧＵＩ画面画像内のクリッカブルテキストコンテンツアイテムを識別できる。クリッカブルテキストコンテンツアイテムは、何等かのアクションまたは機能を示すことができ、通常は、少なくとも１つの動詞（たとえば、取消、保存、クリアなど）を含み得るものであり、どのＵＩコンポーネントにも対応付けられないであろうものである。たとえば、他のテキストコンテンツアイテムから分離された「取消」というテキストを有するテキストコンテンツアイテムは、クリッカブルテキストであることを意図し得る。いくつかの実施形態において、このようなクリック可能な単語の辞書を管理しテキスト解析に使用してもよい。
【００８６】
いくつかの実施形態において、ＯＣＲモジュール３５２の出力は、個々の単語をそれぞれの位置情報とともに含み得る。クラスタリングモジュール３５６によるグルーピングの後に、個々の単語は、ラインまたはパラグラフの一部になり得る、または、ＧＵＩ画面画像上の独立したアイテムになり得る。クラスタリングモジュール３５６は、個々の単語を、これらの単語がラインまたはパラグラフの一部である場合に、グルーピングすることができる。クリッカブルテキストコンテンツアイテムは、独立したアイテムであるかまたは特定数までの単語を有するラインに含まれるがパラグラフの一部である単語からのものではない単語から、識別することができる。いくつかの実施形態において、クリック可能と識別されたテキストコンテンツアイテムのタイプを、テキストから、「クリッカブルテキスト」に変更することができる。
【００８７】
クリッカブルテキストコンテンツアイテムを識別しそれに対応付けられたタイプを変更するためのテキスト解析後に、クラスタマップをアップデートしメタデータ生成器３６２に与えてもよい。メタデータ生成器３６２は、１つ以上のＧＵＩ画面を含み得るＧＵＩのＧＵＩモデルを生成し得る。ＧＵＩモデルは、サーバサブシステム３２０に提供されるＧＵＩ画面画像の最適表現であってもよい。いくつかの実施形態において、メタデータ生成器３６２は、ＧＵＩモデルを、ＪａｖａＳｃｒｉｐｔオブジェクト表記（ＪＳＯＮ）フォーマットのような言語から独立したデータ交換フォーマットで、生成することができる。次に、ＧＵＩモデル（たとえばＪＳＯＮメタデータで記述されている）を、クライアントサブシステム３１０からの要求に対する応答として、ＲＥＳＴサービス３４０を介してクライアントサブシステム３１０に送ることができる。
【００８８】
ＧＵＩモデル３０６の受信後に、クライアントサブシステム３１０は、ＧＵＩモデル（たとえばＪＳＯＮメタデータ）をページ生成器３０８に送ることができる。ページ生成器３０８は、図１に関連して先に述べたようにコード生成器（たとえばコード生成器１２６、１２８、または１３０）を含み得る。ページ生成器３０８は、ＧＵＩモデル３０６を入力として取り込み、ターゲットプラットフォーム、たとえばｉＯＳ（登録商標）またはＡｎｄｒｏｉｄ（登録商標）を用いて動作するモバイルデバイスや、ｉＯＳ（登録商標）、Ｗｉｎｄｏｗｓ（登録商標）、またはＬｉｎｕｘ（登録商標）を用いて動作するワイド画面を有するシステムに対し、対象言語でＧＵＩを実現するコードを生成することができる。たとえば、コードはＡｎｇｕｌａｒ  ＪＳまたはＢｏｏｔｓｔｒａｐに対して生成することができる。ＧＵＩインプリメンテーションは、１つ以上のプロセッサが実行可能なＧＵＩの実行可能なインプリメンテーションであってもよい。いくつかの実施形態において、ＧＵＩインプリメンテーションをコンパイルする（または解釈する、またはそれに対して実行される解釈されたまたはその他何等かの処理が実行された）ことにより、ＧＵＩの事項可能バージョンを生成することができる。ＧＵＩに対して生成されるページアーティファクト３１２を次にエンドユーザが使用できるようにする。
【００８９】
いくつかの場合において、モデル生成システム３３０は、ＧＵＩ画面画像内のＵＩコンポーネントを正確に検出または分類しなくてもよい。フィードバックプロセスを用いることにより、モデル生成システム３３０にフィードバックを与え、生成されたＧＵＩモデルを訂正することができる。たとえば、開発者は、ＧＵＩモデル３０６をレビューし、未検出のまたは誤分類されたＵＩコンポーネントを特定し、特定した未検出のまたは誤分類されたＵＩコンポーネントの画像と正しいラベルとを、任意のフィードバックモジュール３０４を介して提供することができる。たとえば、モデル生成システム３３０（より具体的にはオブジェクト検出モジュール３５４）によって誤分類されたもしくはまだ検出されていないＵＩコンポーネントがある場合、誤分類されたもしくは未検出のＵＩコンポーネントの画像または誤分類されたもしくは未検出のＵＩコンポーネントを含むＧＵＩ画面画像を、誤分類されたまたは未検出のＵＩコンポーネントの正しいラベルとともに、ＲＥＳＴサービス３４０を介してモデル生成システム３３０に与えることができる。フィードバック情報を、特徴抽出エンジン３６６が使用して、上述のように誤分類されたもしくは未検出のＵＩコンポーネントまたはＧＵＩ画面画像から特徴（たとえば特徴マップまたは特徴ベクトル）を抽出してもよい。いくつかの実施形態において、ユーザフィードバックから抽出される特徴を、特徴クラスタリングモジュール３７２に送ってもよい。
【００９０】
特徴クラスタリングモジュール３７２は、訓練サンプル内のＵＩコンポーネントの各々の特徴を、多次元空間であってもよい特徴空間内のデータポイントにマッピングすることができる。一組のクラスタを特徴空間内に形成してもよく、各クラスタはＵＩコンポーネントのタイプに対応し得る。クラスタ間変化（または距離）は、ＵＩコンポーネントをこれらの特徴を用いて適切に分類できる、重要であり得る。誤分類されたまたは未検出のＵＩコンポーネントのフィードバック画像から抽出された特徴も特徴空間内のデータポイントにマッピングできる。誤分類されたまたは未検出のＵＩコンポーネントの画像から抽出された特徴を表すデータポイントと、一組のクラスタのクラスタ中心との距離を計算することにより、誤分類されたまたは未検出のＵＩコンポーネントと訓練サンプルに既に含まれているＵＩコンポーネントとの間の類似性または相違性を求めることができる。これらの距離のうちの１つがしきい値未満である場合、誤分類されたまたは未検出のＵＩコンポーネントの画像を訓練サンプルに追加し、機械学習ベースのモデルの再訓練をトリガしてもよい。いくつかの実施形態において、このしきい値は実験結果に基づいて決定してもよい。
【００９１】
しきい値は、注釈付き訓練サンプル３６８の特定のセキュリティレベルを保証するのに役立ち得る。たとえば、いくつかの場合において、開発者が「円グラフ」を誤って「棒グラフ」としてラベル付けすることがある。上述のようにフィードバックにおいて開発者が提供する注釈付きサンプルをフィルタリングするための距離が計算されていない場合、機械学習ベースのモデルを、間違ってラベル付けされたサンプルで再訓練してもよい。これは、再訓練されたモデルを、前のモデルよりも悪化させる可能性がある、または、訓練プロセスを収束させない可能性がある。よって、特徴クラスタリングモジュール３７２および距離比較ブロック３７０は、ユーザが提供したサンプルのＵＩコンポーネントが既に訓練サンプル内にあるいくつかのＵＩコンポーネントと似ている場合は専らユーザが提供したサンプルを用いてモデルを再訓練することを保証するのに役立ち得る。いくつかの実施形態において、計算した距離がしきい値を上回る場合、ユーザが提供したサンプルは無視すればよい。いくつかの実施形態において、人間による介入は、計算した距離がしきい値を上回る場合に要求すればよい。
【００９２】
次に、ユーザが提供したサンプルを用いて再訓練されたモデルを用いて、現在のＧＵＩ画面画像およびその後受けるＧＵＩ画面画像内のＵＩコンポーネントを検出し分類することができる。ＧＵＩモデルを、再訓練されたモデルを用いた検出および分類の結果に基づいてアップデートし、ＧＵＩインプリメンテーションを生成するためにクライアントサブシステム３１０に送り返すことができる。
【００９３】
図１または図３に記載のシステムを用いることにより、機械学習ベースのモデルを訓練し、このモデルを用いてＧＵＩモデルおよび／またはＧＵＩインプリメンテーションを自動的に生成することができる。
【００９４】
図４は、特定の実施形態に係る、機械学習ベースの分類器を用いてＧＵＩモデルおよび／またはＧＵＩの１つ以上のインプリメンテーションを生成するために実行されるハイレベル処理を示す簡略化されたフローチャート４００である。図４に示される処理は、それぞれのシステムの１つ以上の処理ユニット（たとえばプロセッサ、コア）によって実行されるソフトウェア（たとえばコード、命令、プログラム）、ハードウェア、またはその組み合わせで実現することができる。ソフトウェアは非一時的な記憶媒体（たとえばメモリデバイス）に格納されていてもよい。図４に示され以下で説明される方法は、限定ではなく例示を意図している。図４は特定のシーケンスまたは順序で発生する各種処理ステップを示すが、これは限定を意図したものではない。特定の代替実施形態において、ステップは異なる順序で実行されてもよく、いくつかのステップは並列に実行されてもよい。特定の実施形態において、図４に示される処理は、上記モデル生成システム１０２または３００を含むサーバ、クライアントコンピュータシステム、プロセッサ（たとえばグラフィック処理ユニット（graphic processing unit）（ＧＰＵ）またはテンソル処理ユニット（tensor processing unit）（ＴＰＵ））、ＡＳＩＣ，またはＦＰＧＡによって実行されてもよい。
【００９５】
図４に示されるように、この処理は、モデル生成システム、より具体的には機械学習サブシステム（たとえばモデル生成システム３３０内の機械学習サブシステム３６０）が、ＧＵＩ画面画像内のＵＩコンポーネントを検出し分類するための分類器のような機械学習ベースのモデルを構築することができる４０２から始めることができる。機械学習ベースの分類器を構築するために、サポートベクターマシン（ＳＶＭ）分類器または畳み込みニューラルネットワーク（ＣＮＮ）分類器のようなタイプの分類器を先ず選択することができる。分類器のいくつかのパラメータ、たとえばＳＶＭのカーネルのタイプまたはＣＮＮ分類器のレイヤの数ならびにフィルタの数およびサイズを決定することができる。次に、（既知のタイプのＵＩコンポーネントの訓練画像、または既知のタイプのＵＩコンポーネントを有するＧＵＩ画面の訓練画像のような）訓練サンプルを、選択した分類器タイプおよび／または分類器のパラメータに基づいて、処理することができる。いくつかの実装例において、訓練および推論プロセスの精度および速度を改善するために、訓練および／または推論プロセスの開始前に、テキスト情報を抽出して取り除いてもよい。既知のタイプのＵＩコンポーネント（注釈が示される）を有する処理後の訓練画像を用いて運類器を訓練することができる。
【００９６】
たとえば、分類器のパラメータ（たとえば分類器内の畳み込みレイヤの各種重みまたはフィルタ）を（たとえば何等かのランダムまたはデフォルト値）に初期化し、各訓練画像ごとに、分類器が訓練画像から特徴を抽出し、抽出した特徴に基づいて訓練画像を分類することができる。損失関数値（たとえばエラー）を、訓練画像および分類結果における既知のタイプのＵＩコンポーネントに基づいて求めることができる。分類器のパラメータを調整することにより、損失関数値を低減することができる。いくつかの実装例において、訓練画像を分類器を用いて分類することは、訓練画像から特徴を抽出すること、たとえばフィルタを用いて訓練画像を畳み込むことにより特徴マップを生成すること、または画像の特定のヒストグラム（たとえばカラーヒストグラムまたは傾斜のヒストグラム）から特徴を抽出すること、および、訓練画像の抽出した特徴に基づいて訓練画像内のＵＩコンポーネントのタイプを判断することを、含み得る。機械学習ベースのモデルの構築のさらなる詳細は、以下、図５との関連で説明する。
【００９７】
４０４で、モデル生成システムは、機械学習ベースのモデルを用いてＧＵＩのためのＧＵＩモデルを生成することができる。たとえば、いくつかの実装例において、入力されたＧＵＩ画面画像の各々を処理することにより、テキストコンテンツアイテムおよび個々のＵＩコンポーネントを含むＧＵＩコンポーネントを特定して抽出し、テキストコンテンツアイテムおよびＵＩコンポーネントのパラメータ（たとえばサイズ、位置、色など）を判断し、機械学習ベースのモデルを用いてＵＩコンポーネントを分類することにより、ＵＩコンポーネントのタイプを判断することができる。次に、分類したＵＩコンポーネントおよびテキストコンテンツアイテムをグルーピングすることにより、ＧＵＩコンポーネントの階層を形成することができる。ＧＵＩ画面のレイアウト（またはクラスタマップ）をこの階層に基づいて判断することができる。いくつかの実施形態において、クリッカブルテキストコンテンツアイテムを特定してもよい。次に、ＧＵＩモデルを生成することにより、ＧＵＩ画面、ＧＵＩ画面内のＵＩコンポーネント、ＧＵＩ画面内のテキストコンテンツアイテムなどのレイアウトを記述することができる。いくつかの実装例において、ＧＵＩモデルは、ＪａｖａＳｃｒｉｐｔオブジェクト表記（ＪＳＯＮ）フォーマットのような、言語から独立したデータ交換フォーマットで記述されてもよい。次に、４０４で生成されたＧＵＩモデルを、さまざまなダウンストリームの目的のために使用することが可能である。
【００９８】
たとえば、４０６で、ＧＵＩモデルに基づいて、ＧＵＩの１つ以上のＧＵＩ画面の１つ以上のインプリメンテーションを自動的に生成することができる。いくつかの実施形態において、その上でＧＵＩを使用し得るプラットフォームおよびこのインプリメンテーションのターゲット言語に基づいて、コード生成テンプレートを、利用できるコード生成テンプレート（たとえば図１に関して説明したコード生成テンプレート１４０）から選択することができる。コード生成器（たとえばコード生成器１２６、１２８、または１３０）は、選択したコード生成テンプレートおよび図１に関して先に述べたＧＵＩモデルに基づいて、ＧＵＩを実現するためのコードを生成することができる。特定の実施形態において、このインプリメンテーションは、１つ以上のプロセッサが実行可能なＧＵＩの実行可能なインプリメンテーションであってもよい。他の実施形態において、このインプリメンテーションは、ＧＵＩを実現するためのコードおよびロジックを含み得る。次に、このインプリメンテーションをコンパイルまたは解釈することにより、実行可能なＧＵＩを生成することができる。
【００９９】
いくつかの実施形態において、４０８で、モデル生成システムは、４０４で生成したＧＵＩモデルに関するユーザフィードバックを受けることができる。たとえば、ＧＵＩモデル内で誤分類されたまたは未検出のＵＩコンポーネントがある場合、誤分類されたまたは未検出のＵＩコンポーネントの画像、または、誤分類されたまたは未検出のＵＩコンポーネントを含むＧＵＩ画面画像（および画像内の誤分類されたまたは未検出のＵＩコンポーネントの位置）を、ユーザから提供された誤分類されたまたは未検出のＵＩコンポーネントについての注釈とともに、モデル生成システムに提供することができる。誤分類されたまたは未検出のＵＩコンポーネントの画像および注釈を用いることにより、機械学習ベースのモデルを再訓練するおよび／またはＧＵＩモデルを再度生成することができる。
【０１００】
図５は、特定の実施形態に係る、ユーザインターフェイスコンポーネントを検出し分類するための機械学習ベースの分類器を訓練するために実行されるハイレベル処理を示す簡略化されたフローチャート５００である。特定の実施形態において、図５に示される処理は、図４の４０２で実行される処理の一部として実行することができる。図５に示される処理は、それぞれのシステムの１つ以上の処理ユニット（たとえばプロセッサ、コア）によって実行されるソフトウェア（たとえばコード、命令、プログラム）、ハードウェア、またはその組み合わせで、実現し得る。ソフトウェアは（たとえばメモリデバイス上の）非一時的な記憶媒体に格納されていてもよい。図５に示され以下で説明される方法は、例示を意図しているのであって限定しているのではない。図５は特定のシーケンスまたは順序で発生する各種処理ステップを示しているが、これは限定を意図している訳ではない。特定の代替実施形態において、これらのステップは何等かの異なる順序で実行されてもよく、または、いくつかのステップが並列に実行されてもよい。特定の実施形態において、図５に示される処理は、モデル生成システム１０２、機械学習サブシステム３６０、プロセッサ（たとえばＧＰＵもしくはＴＰＵ）、ＡＳＩＣ，またはＦＰＧＡによって実行されることができる。
【０１０１】
５０２で、１つ以上の注釈付き訓練画像を受け、たとえばメモリ１２２に格納することができる。訓練画像は、ボタン、テキスト入力ボックス、ドロップダウンリスト、ドロップダウンメニュー、チェックボックス、ラジオボタン、スイッチボタン、アイコン、表、（人々または物体の）写真、ラインディバイダ、コンテナなどのような、既知のタイプの各種ＵＩコンポーネントを含み得る。訓練画像には、ＵＩコンポーネントのタイプ、および、訓練画像内のＵＩコンポーネントの位置等の、ＵＩコンポーネントに対応付けられたその他の情報を用いて、注釈を付けることができる。いくつかの実施形態において、各訓練画像は１つのＵＩコンポーネントの画像を含むだけであってもよい。いくつかの実施形態において、各訓練画像は複数のＵＩコンポーネントを含んでいてもよい。いくつかの実施形態において、各訓練画像は、テキストコンテンツを含むまたは含まない場合があるＧＵＩ画面の画像に対応していてもよい。いくつかの実施形態において、訓練ＧＵＩ画面画像は、ＧＵＩを設計するために使用し得る各種フロントエンド技術にまたがる各種ソースからのものであってもよい。
【０１０２】
各訓練画像を処理することにより、この訓練画像内の１つ以上のＵＩコンポーネントを抽出し分類することができる。訓練画像がＵＩコンポーネント以外の特徴を含むいくつかの実施形態において、訓練プロセスの精度および速度を改善するために、訓練のためのＵＩコンポーネントの検出および分類に干渉する可能性が高い視覚的特徴を一時的に消去してもよい。たとえば、下記の５０４および５０６における動作について説明するように、１つ以上のＵＩコンポーネントを検出し分類する前に、ＧＵＩ画面に対応する各訓練画像ごとに、テキスト情報を抽出し訓練画像から削除してもよい。各訓練画像ごとに、画像内の特徴を抽出し、抽出した特徴に基づいて訓練された機械学習ベースの分類器を用いて訓練画像内のＵＩコンポーネントを検出し分類することができる。分類器を、分類結果と訓練画像の注釈との比較に基づいて調整してもよい。
【０１０３】
任意で、５０４で、（もしあれば）テキスト情報を訓練画像から抽出してもよい。テキスト情報の抽出は、訓練画像内のテキストコンテンツアイテムを検出することと、検出したテキストコンテンツアイテムを認識することとを含み得る。たとえば、いくつかの実施形態において、全層畳み込みネットワーク（fully convolutional network）（ＦＣＮ）モデル（たとえば、Zhou, et al., “EAST: An Efficient and Accurate Scene Text Detector,” arXiv:1704.03155v2, July 10, 2017参照）を用いて、訓練画像内のテキストコンテンツアイテムを検出し、テキストコンテンツアイテムの位置（たとえばバウンディングボックス（bounding box）の座標）および／またはテキストコンテンツアイテムの寸法を求めることができる。いくつかの実施形態において、設計ツールの拡張（たとえばＧＩＭＰまたはＰｈｏｔｏｓｈｏｐ）を用いて、訓練画像のレイヤからテキスト領域を抽出してもよい。次に、求めた位置におけるサブ画像を抽出してもよく、光学文字認識（ＯＣＲ）プロセスを抽出したサブ画像各々に対して実行することにより、テキストコンテンツアイテムに対応付けられたテキスト情報を抽出することができる。いくつかの実施形態において、ＯＣＲプロセスはまた、機械学習ベースのモデルを使用することにより、テキストコンテンツアイテム内の文字を認識することができる。たとえば、いくつかの場合において、テキストコンテンツアイテムは従来のＯＣＲ技術では正確に認識されないかもしれない手書き文字を含み得る。機械学習ベースの分類器を用いて、各文字を一組の既知の文字のうちの１つに分類することができる。
【０１０４】
５０６で、訓練画像内の（もしあれば）テキスト情報を、予め定められたパターンのようなプレースホルダに置き換えてもよい。たとえば、サブ画像内の画素値を、背景画素値または予め定められた画素値に置き換えて、続くＵＩコンポーネント検出および分類にテキストコンテンツアイテムが干渉しないようにすることができる。いくつかの実装例において、プレースホルダは訓練のための特徴の役割も果たし得る。たとえば、プレースホルダは、元のＵＩコンポーネントが特定のテキスト情報を含み得るものでありしたがってクリック可能ボタンまたはテキスト入力ボックスのような特定のタイプのＵＩコンポーネントのうちの１つである可能性があることを、示すことができる。加えて、ＵＩコンポーネント内のテキストコンテンツアイテムの配列はプレースホルダによって保存することができる。
【０１０５】
５０８で、訓練画像から特定の特徴を抽出することができる。たとえば、特徴抽出エンジン３６６について先に述べたように、深層ＣＮＮを用いて、訓練画像から異なるレベルにある各種特徴（たとえば特徴ベクトルまたは特徴マップ）を抽出してもよい。異なる特徴は異なるフィルタを用いて抽出することができる。たとえば、フィルタを用いることにより、訓練画像を、訓練画像内のオブジェクトのエッジまたは輪郭を含む特徴マップに畳み込むことができる。抽出すべき特徴のタイプは訓練プロセス中に自動的に決定することができ、よって、異なるタイプのＵＩコンポーネントを、抽出した特徴に基づいて、正確に検出し分類することができる。
【０１０６】
５１０で、ＳＶＭ分類器またはＣＮＮ分類器のような機械学習ベースの分類器は、５０８で抽出した特徴に基づいて、訓練画像内のＵＩコンポーネントを検出し分類することができる。各種実施形態において、ＵＩコンポーネントの検出およびＵＩコンポーネントの分類は、異なる機械学習ベースのモデルを用いて別々に実行してもよく、または、同一の分類器を用いて合同で実行してもよい。いくつかの実施形態において、先ず、ＵＩコンポーネントの各々の境界を検出できる各種輪郭検出技術を用いて、訓練画像内のＵＩコンポーネントを特定し訓練画像から抽出し、次に、サブ画像内の抽出したＵＩコンポーネントを分類することができる。たとえば、ニューラルネットワークは、オブジェクト検出技術（たとえば上記ＳＳＤまたはＹＯＬＯ技術）を実現することにより、抽出した特徴を用いて、１つ以上のＵＩコンポーネントを訓練画像の１つ以上の異なる位置にローカライズすることができる。各ＵＩコンポーネントの位置または境界に基づいて、各ＵＩコンポーネントの境界内のサブ画像を抽出してもよい。次に、ＵＩコンポーネントを含む訓練画像の、判断した位置から抽出したサブ画像を、分類器によるＵＩコンポーネントの分類に使用してもよい。いくつかの実施形態において、同じ深層ニューラルネットワークは、合同ＵＩコンポーネント検出および分類を実行してもよく、抽出された特徴を用いて、ＵＩコンポーネントと訓練画像の１つ以上の異なる位置にローカライズするとともに１つ以上のＵＩコンポーネントをパイプラインまたは並列処理で分類してもよい。いくつかの実施形態において、機械学習ベースのモデルを訓練することによりＧＵＩ画面画像内の複数のＵＩコンポーネントを検出するために、少なくともいくつかの訓練画像は異なる位置の複数のＵＩコンポーネントを含み得る。
【０１０７】
ＵＩコンポーネントの分類中に、訓練画像から抽出した特定の特徴を組み合わせて使用することにより、あるタイプのＵＩコンポーネントを他のタイプのＵＩコンポーネントから区別することができる。先に述べたように、テキスト情報のような干渉する特徴を、潜在的に区別がつく特徴（たとえば予め定められたパターン）と置き換えることができるので、訓練処理をより速くすることができ、より正確な分類器をもたらすことができる。ＵＩコンポーネントを分類するために使用できる数種類の機械学習ベースの分類器が存在し得る。以下、ＵＩコンポーネントを分類するために使用し得る分類器のいくつかの例について説明する。
【０１０８】
いくつかの実装例において、サポートベクターマシン（ＳＶＭ）分類器を用いてＵＩコンポーネントを分類することができる。ＳＶＭ分類器はデシジョン境界を定めるデシジョン面に基づく。ＳＶＭ分類器は、線形分類器（すなわちラインを用いて一組のオブジェクトをそれぞれのクラスまたはグループに分離する分類器）であってもよく、または、非線形カーネル関数に基づくより複雑な構造（超平面）を用いて異なるクラスのオブジェクトを分離する非線形分類器であってもよい。いくつかの実施形態において、画像の画素ではなく、画像のヒストグラム特徴（たとえばカラーヒストグラム、傾斜のヒストグラム）を、ＳＶＭ分類器を用いる分類に使用してもよい。
【０１０９】
先に述べたように、各種ニューラルネットワークベースの分類器を用いることによりＵＩコンポーネントを分類することもできる。たとえば、ニューラルネットワークベースの分類器は、特徴抽出用のいくつかのレイヤと分類用のいくつかのレイヤ（たとえば全結合レイヤ）とを含み得る。特徴抽出用のレイヤは、特徴抽出エンジン３６６について先に述べた特徴抽出レイヤと同様であってもよい。全結合レイヤでは、あるレイヤ内のすべてのノードが隣接するレイヤ上のすべてのノードに接続される。全結合レイヤは、入力画像の抽出された特徴を、入力として用いて、入力画像を出力レイヤの各種クラスに分類することができ、出力レイヤ上の各ノードは、ＵＩコンポーネントの可能なクラス（またはタイプ）に対応し得る。たとえば、全結合レイヤは、出力レイヤ上でソフトマックス活性化関数を使用してもよい。ソフトマックス関数は、任意の実数値スコアのベクトルを得て、合計１になる０と１との間の値（確率）を有するベクトルに変換することができる。次に、入力画像を、出力レイヤにおける可能な各クラスに対応付けられた確率値に基づいて分類することができる。
【０１１０】
５１２で、分類器（たとえばＣＮＮベースの分類器）を、分類結果と訓練画像の注釈との比較に基づいて調整することができる。一般的に、分類器のパラメータ（たとえばフィルタの重みおよび全結合レイヤの重み）は、先ず、何等かのランダム値、デフォルト値、または同様の分類器で使用される値で、初期化することができる。重みのような分類器のパラメータはランダム値を有し得るものであり訓練例について最適化されないので、出力確率はランダムであろう。いくつかの実施形態において、可能な各クラスについての分類エラーは、分類結果と訓練画像の注釈との比較に基づいて判断することができ、出力レイヤにおける総エラーは、可能なすべてのクラスの確率エラーを合計することによって計算できる。次に、バックプロパゲーション技術のような技術を用いて、すべてのパラメータを基準とするエラーの傾斜と、ネットワークで訓練される重みとを計算することができ、出力エラーを最小にするために、傾斜降下を用いてネットワーク内で訓練するすべてのパラメータおよび重みをアップデートすることができる。重みは総エラーに対するその貢献度に従って調整することができる。同じ訓練画像が再び入力にある場合、出力確率はターゲット確率により近くなるであろう。このことは、ネットワークがこの特定の画像の分類を学習したことを示す。上記訓練プロセスは、訓練サンプル内のおすべての訓練画像に対して繰り返すことができる。先に述べたように、フィルタの数、フィルタサイズのような畳み込みニューラルネットワークのいくつかのパラメータ、ニューラルネットワークのアーキテクチャなどは、予め選択されており訓練プロセス中は不変であってもよい。
【０１１１】
訓練プロセスの最後において、分類器のすべてのパラメータは最適化されており訓練サンプルからの訓練画像を正確に分類することができる。まだ見られていない画像（たとえばテスト画像または新たな場増）が分類器に入力されると、分類器は、フォワードプロパゲーションステップを経て、訓練された重みおよびパラメータを用いて各クラスの確率を出力することができ、これは、訓練プロセスとの対比で推論プロセスと呼ぶことができる。訓練サンプルが十分である場合、訓練された分類器は、まだ見られていないサンプルを正しいクラスに分類することができる。
【０１１２】
先に述べたように、いくつかの実施形態において、分類器はユーザフィードバックに基づいて再訓練することができる。たとえば、ユーザは、機械学習ベースの分類器を用いてモデル生成システムが生成したＧＵＩモデルをレビューしてもよい。分類器が誤分類したまたはまだ検出していないＵＩコンポーネントがある場合、誤分類されたもしくは未検出のＵＩコンポーネントの画像、または、誤分類されたもしくは未検出のＵＩコンポーネントを含むＧＵＩ画像を、ユーザが提供する誤分類されたまたは未検出のＵＩコンポーネントについての正しい注釈とともに、モデル生成システムにフィードバックしてもよい。
【０１１３】
５１４で、機械学習サブシステム３６０のような機械学習サブシステムは、ユーザフィードバックに基づく分類器の再訓練が必要か否かを判断してもよい。たとえば、フィードバックにおける画像の特徴を、５０８で述べたように抽出し、多次元特徴空間内のデータポイントにマッピングしてもよい。この特徴空間は、既に訓練サンプル内にある異なるタイプのＵＩコンポーネントに対応する一組のクラスタを含み得る。誤分類されたまたは未検出のＵＩコンポーネントから抽出された特徴を表すデータポイントと、一組のクラスタのクラスタ中心との間の距離を計算することにより、誤分類されたまたは未検出のＵＩコンポーネントと、訓練サンプルに含まれるＵＩコンポーネントとの類似点または相違点を判断することができる。距離のうちの１つがしきい値未満の場合、誤分類されたまたは未検出のＵＩコンポーネントの画像と、ユーザが提供した注釈とを、信頼できるとみなしてもよく、訓練サンプルに追加して機械学習ベースのモデルの再訓練をトリガしてもよい。計算した距離がしきい値を上回っている場合、ユーザが提供する画像および注釈は無視してもよい、または、人間による介入を要求してもよい。
【０１１４】
５１４で、ユーザフィードバックにおいて提供された画像および注釈が信頼できると判断された場合、分類器をユーザフィードバックの基づいて再訓練してもよい。ユーザフィードバックに基づいて分類器を再訓練するための動作は、５０８、５１０、および５１２に関して先に述べた動作と同様であってもよい。機械学習ベースのモデルが訓練された後に、モデル生成システムは、機械学習ベースのモデルを用い、ユーザが提供するＧＵＩ画面画像に基づいてＧＵＩモデルを生成することができる。ＧＵＩを実現するためのソースコードも、人間による介入を最小にして自動的に生成することができる。
【０１１５】
図６は、特定の実施形態に係る、ＧＵＩの設計情報に基づいてグラフィックユーザインターフェイスのためのＧＵＩモデルおよび／またはソースコードを生成するために実行されるハイレベル処理を示す、簡略化されたフローチャート６００である。図６に示される処理は、１つ以上の処理ユニット（たとえばプロセッサ、コア）によって実行されるソフトウェア（たとえばコード、命令、プログラム）、ハードウェア、またはその組み合わせで実現することができる。ソフトウェアはメモリ（たとえばメモリデバイスのような非一時的なコンピュータ読取可能記憶媒体）に格納されていてもよい。図６に示される特定の一連の処理ステップは限定を意図しているのではない。これらの処理ステップは図６に示される順序と異なる順序で実行されてもよく図６に示されるすべてのステップを実行する必要がある訳ではないことがわかる。いくつかの実施形態において、図６に示される処理のうちの少なくとも一部を、図１に示されるモデル生成システム１０２または図３に示されるモデル生成システム３３０が実行してもよい。
【０１１６】
簡潔にするために、図６および以下の関連する説明に示されるフローチャート６００は、ＧＵＩのための１つのＧＵＩ画面画像に対する処理について説明している。しかしながらこれは限定を意図しているのではない。代替実施形態において、複数のＧＵＩ画面画像を用いてＧＵＩのための複数のＧＵＩ画面について説明することができる。いくつかのこのようなシナリオにおいて、図６に示される処理（またはこの処理の一部）を、ＧＵＩのための各ＧＵＩ画面ごとに繰り返してもよい。
【０１１７】
６０２で、１つ以上のＧＵＩ画面画像を含む入力画像を受けることができる。各ＧＵＩ画面画像は、１つ以上のＵＩコンポーネントと、テキスト情報を含む１つ以上のテキスト領域とを含み得る。先ず、各ＧＵＩ画面画像を検出し入力画像から抽出することができる。先に述べたように、ＧＵＩ画面画像は、ユーザインターフェイスの設計者が、顧客またはクライアント調査、マーケティング調査、ならびに、ＧＵＩのルック・アンド・フィールおよび開発するＧＵＩに含まれる機能を伝える情報のその他のソースに基づいて生成し得るものである。ＧＵＩ画面画像は、コンピュータ支援設計ツールを用いて生成されてデジタルフォーマットで保存されてもよく、または、紙の上のスケッチとして手作業で生成されスキャンされてデジタル画像にされてもよい。いくつかの実施形態において、ＧＵＩ画面画像は、いくつかの修正が施されたＧＵＩの前のバージョンのスナップショットであってもよい。特定の実施形態において、クライアントデバイス１０８（またはクライアントサブシステム３１０）によって実行されるプログラムは、ユーザがモデル生成システム１０２（またはモデル生成システム３３０）に対してインターフェイスしやり取りすることを可能にし得る。たとえば、プログラムは、ユーザ（たとえばプログラマー）がソフトウェアアプリケーションを構築するための設備およびツールを提供する統合開発環境（ＩＤＥ）の一部であってもよい。このような環境において、ＩＤＥは、ＵＩ開発者が設計したＧＵＩ画面画像をユーザがインポート（たとえばドラッグ・アンド・プレース）することを可能にするツールを提供することができる。
【０１１８】
先に述べたように、モデル生成システムが、ＧＵＩ画面の機能およびレイアウト、ＧＵＩ画面のコンポーネント、ＵＩコンポーネントのタイプおよび機能、ＵＩコンポーネント間のマッピングなどを決定できるようにするために、ＧＵＩのためのＧＵＩ画面画像が、各種解析を受けてもよい。
【０１１９】
６０４で、テキストコンテンツを含むテキスト領域を検出しＧＵＩ画面画像から抽出することができる。各テキスト領域内のテキストコンテンツは１つ以上のテキストコンテンツアイテムを含み得る。いくつかの実施形態において、深層畳み込みネットワークモデルを用いて、ＧＵＩ画面画像内のテキスト領域を検出し、テキスト領域の位置（たとえばバウンディングボックスの座標）および／または寸法を求めることができる。いくつかの実施形態において、設計ツールの拡張（たとえばＧＩＭＰまたはＰｈｏｔｏｓｈｏｐ）を用いて、訓練画像のレイヤからテキスト領域を抽出してもよい。次に、求めた位置におけるサブ画像を抽出しテキストコンテンツアイテムの抽出に使用してもよい。
【０１２０】
６０６で、サブ画像から、テキストコンテンツアイテムおよびテキスト領域内の対応する位置を抽出することができる。たとえば、いくつかの実施形態において、光学文字認識（ＯＣＲ）プロセスを、抽出した各サブ画像に対して実行することにより、各テキストコンテンツアイテムに対応付けられたテキスト情報を抽出することができる。いくつかの実施形態において、ＯＣＲプロセスはまた、機械学習ベースのモデルを用いることにより、テキストコンテンツアイテム内の文字を認識することもできる。たとえば、いくつかの場合において、テキストコンテンツアイテムは、従来のＯＣＲ技術では正しく認識されない可能性がある手書き文字を含むことがある。機械学習ベースの分類器を用いることにより、各文字を、一組の既知の文字のうちの１つに分類することができる。テキストコンテンツアイテムの検出および認識についてのさらなる詳細については以下で図７との関連で説明する。
【０１２１】
６０８で、ＧＵＩ画面画像内のテキスト領域をプレースホルダに置き換えることができる。たとえば、サブ画像内の画素値を、背景画素値または予め定められた画素値に置き換えて、続くＵＩコンポーネントの抽出および分類にテキスト領域が干渉しないようにすることができる。先に述べたように、いくつかの実装例において、プレースホルダは分類のための特徴の役割も果たし得る。たとえば、プレースホルダは、元のＵＩコンポーネントが特定のテキスト情報を含み得るものでありしたがってクリック可能ボタンまたはテキスト入力ボックスのような特定のタイプのＵＩコンポーネントのうちの１つである可能性があることを、示すことができる。加えて、ＵＩコンポーネント内のテキストコンテンツアイテムの配列はプレースホルダによって保存することができる。いくつかの実装例において、ＵＩコンポーネントに重なるまたはＵＩコンポーネントに隣接するテキストのみをプレースホルダに置き換えてもよい。
【０１２２】
６１０で、５１０に関して先に述べた処理と同様のやり方で、ＵＩコンポーネントを検出することができ、ＧＵＩ画面画像内の対応する位置を求めることができる。ＵＩコンポーネントは、たとえば、ボタン、チェックボックス、リスト、テキスト入力ボックス、アイコン、コンテナ、ラジオボタン、スイッチボタンなどを含み得る。各種輪郭検出技術を用いることにより、各ＵＩコンポーネントの境界を検出することができる。たとえば、先に述べたように、ニューラルネットワークは、ＧＵＩ画面画像から特徴を抽出することができ、オブジェクト検出技術（たとえば上記ＳＳＤまたはＹＯＬＯ技術）を実現することにより、抽出された特徴を用いて、１つ以上のＵＩコンポーネントをＧＵＩ画面画像の１つ以上の異なる位置にローカライズすることができる。各ＵＩコンポーネントの位置または境界に基づいて、各ＵＩコンポーネントの境界内のサブ画像をＧＵＩ画面画像から抽出することができる。
【０１２３】
６１２で、６１０で検出したＵＩコンポーネントを、機械学習ベースの分類器およびサブ画像を用いて分類することができる。先に述べたように、機械学習ベースの分類器は、たとえば、既知のタイプのＵＩコンポーネントを含む訓練画像を用いて訓練することができるＳＶＭまたはＣＮＮ分類器を含み得る。分類器は、ＵＩコンポーネントが属しているであろうＵＩコンポーネントのタイプを判断することができる。いくつかの実施形態において、各タイプのＵＩコンポーネントを、このタイプのＵＩコンポーネントの、たとえば画像または画像のソース、機能、対応するアクション、対応するコード、他のアプリケーションまたはＧＵＩ画面へのリンクなどを記述し得るデータモデルに対応付けることができる。先に述べたように、いくつかの実施形態において、６１０および６１２における動作は、同じ深層ＣＮＮベースの分類器によって実行されてもよい。
【０１２４】
６１４で、６１０で検出され６１２で分類されたＵＩコンポーネント、および６０４で検出され６０６で抽出されたテキストコンテンツアイテムをグルーピングすることにより、ＧＵＩ画面のレイアウトを生成することができる。先に述べたように、クラスタリングモジュール（たとえばクラスタリングモジュール３５６）は、特定の予め定められたルールに基づいてボトムアップでグルーピングを再帰的に実行することができる。テキストコンテンツアイテムおよびＵＩコンポーネントの属性、たとえば位置、サイズ、タイプ、機能等を、グルーピングに使用することができる。たとえば、個々のコンポーネント（たとえばＵＩコンポーネントおよび／またはテキストコンテンツアイテム）をサブグループ（たとえば表、リスト、組織図、パラグラフなどを表す）にグルーピングすることができ、次にサブグループをより高いレベルのサブグループにグルーピングすることができ、これは、１つのグループが画像内のすべてのコンポーネントをカバーするまで行われる。たとえば、６０６で抽出されたテキストコンテンツアイテムは、個々の単語をその位置情報とともに含み得る。クラスタリングモジュールは、個々の単語を、これらの単語がラインまたはパラグラフの一部であれば、グルーピングすることができる。異なるレベルでのグルーピングに基づいて、クラスタリングモジュールは、階層および位置情報を用い、画像内のコンポーネントの階層、および、ＧＵＩ画面の最適なレイアウトを決定することができる。
【０１２５】
６１６で、どのＵＩコンポーネントにも対応付けられていないクリッカブルテキストコンテンツアイテムを特定することができる。クリッカブルテキストコンテンツアイテムは、何等かのアクションまたは機能を示し得るものであり、通常は少なくとも１つの動詞（たとえば取消、保存、クリアなど）を含むが、どのＵＩコンポーネントにも対応付けられていない場合がある。たとえば、他のテキストコンテンツアイテムから分離されている「取消」というテキストを有するテキストコンテンツアイテムは、クリッカブルテキストを意図し得るものであり、このテキストコンテンツアイテムがクリックされるとアクションが実行され得る。よって、ＧＵＩモデルは、テキストコンテンツアイテムをクリック可能であると説明しクリッカブルテキストコンテンツアイテムに対応付けられたリンクまたはコードを提供することができる。いくつかの実施形態において、クリッカブルテキストコンテンツアイテムは、独立したアイテムであるかまたは特定数までの単語を有するラインに含まれるがパラグラフの一部である単語からのものではない単語から、識別することができる。いくつかの実施形態において、このようなクリッカブルテキストコンテンツアイテムのタイプを、「テキスト」から「クリック可能テキスト」に変更してもよい。
【０１２６】
６１８で、テキストコンテンツアイテムおよび対応する位置、分類されたＵＩコンポーネントおよび対応する位置、ならびにＧＵＩ画面のレイアウトに基づいて、ＧＵＩのためのＧＵＩモデルを生成することができる。特定の実施形態において、ＧＵＩモデルは、６０４、６０６、６１０、６１２、６１４、および６１６で実行された処理に関する情報を格納することができる。たとえば、ＧＵＩモデルは、６０４および６０６で決定されたＧＵＩ画面内のテキストコンテンツアイテム、６１０で決定されたＵＩコンポーネントの位置、６１２で決定されたＵＩコンポーネント（およびＵＩコンポーネントに対応付けられたデータモデル）のタイプ、６１４で決定されたＧＵＩ画面のレイアウトなどを格納することができる。ＧＵＩモデルに格納された情報は、ダウンストリームコンシューマが使用して、ＧＵＩのインプリメンテーションを生成することができる。いくつかの実装例において、ＧＵＩモデルはＧＵＩのためのメタデータとして生成されてもよい。いくつかの実装例において、ＧＵＩモデルは、ＪａｖａＳｃｒｉｐｔオブジェクト表記（ＪＳＯＮ）フォーマットのような言語から独立したデータ交換フォーマットで記述されてもよい。
【０１２７】
６２０で、ＧＵＩモデルに基づいて、ＧＵＩを実現するためのソースコードを自動的に生成することができる。いくつかの実施形態において、ＧＵＩを実現するためのソースコードは、特定のコード生成テンプレートに基づいて生成することができる。たとえば、各種コード生成器アプリケーション（たとえばコード生成器１２６、１２８、および１３０）は、ＧＵＩモデルを入力として取り込み、場合によっては異なるプログラミング言語でおよび／または異なるプラットフォームのために、たとえば異なるプログラミング言語および／または異なるプラットフォームのためのコード生成テンプレート１４０に基づいて、ＧＵＩを実現するためのコードを生成することができる。
【０１２８】
コード生成器は、このコード生成器に固有の言語でＧＵＩを実現するコードを生成することができる。インプリメンテーションは、１つ以上のプロセッサが実行可能なＧＵＩの実行可能なインプリメンテーションであってもよい。たとえば、コード生成器は、ＧＵＩモデルを入力として取り込み、第１のプラットフォーム（たとえばｉＯＳ（登録商標））のためのインプリメンテーションを第１の言語で生成することができる。別のコード生成器システムは、第１のプラットフォームのための同じＧＵＩモデルを用いて第２の言語でＧＵＩのインプリメンテーションを生成することができ、第３のコード生成器は、Ａｎｄｒｏｉｄ（登録商標）プラットフォームのための同じＧＵＩモデルを用いてＧＵＩの別のインプリメンテーションを生成することができる。コード生成テンプレートは、コンピュータシステムの１つ以上のプロセッサが実行することが可能な実行可能ＧＵＩを生成するためにコンパイルまたは解釈することが可能なハイレベルコード（方法、機能、クラス、イベントハンドラなどを含み得る）を含む１つ以上のソースコードから構成されていてもよい。
【０１２９】
このようにして、ＧＵＩの実行可能なインプリメンテーションを、ＧＵＩモデルに基づいて自動的に生成することが可能であり、この実行可能なインプリメンテーションは、ＧＵＩ設計情報に記述されている、ＧＵＩのルック・アンド・フィール、ＧＵＩの機能、およびＵＩコンポーネントに対応するデータモデルに対するマッピングまたは関係を、カプセル化する。
【０１３０】
いくつかの実施形態において、開発者はさらに、追加コードを用いてコードテンプレートインプリメンテーションをさらに拡張することにより、コードベースを完成または向上させる（たとえばコードベースに追加機能を加える）ことができる。たとえば、コード生成器は、ＧＵＩモデルに対応するマークアップコード（たとえばＸＭＬ）を含む１つ以上のファイルを受け、マークアップコードを（ハイレベル）ソースコード（たとえばＪａｖａ、Ｃ＋＋、またはその他の言語）に変換することにより１つ以上のソースコードを含むＧＵＩインプリメンテーションを出力するように、構成することができる。次に、コードインプリメンテーションをコンパイルする（または解釈するまたはこれに対してその他何等かの処理を実行する）ことにより、ＧＵＩの実行可能なバージョンを生成することができる。いくつかの実施形態において、ＧＵＩモデル（たとえばＪＳＯＮフォーマット）を用いて、マークアップ言語（たとえばＨＴＭＬもしくはＸＭＬ）またはスタイルシート言語（たとえばカスケーディングスタイルシート（ＣＳＳ））のような異なるプログラミング言語でコードを生成することができる。
【０１３１】
先に述べたように、ほとんどのＯＣＲ技術の短所は、暗い背景上に色が薄いテキストが存在するときに、たとえば青色の背景に白色のテキストがあるときに、テキストコンテンツを検出しないことである。特定の実施形態に従うと、全層畳み込みネットワークモデル（たとえば上記ＥＡＳＴ技術）を用いて、ＧＵＩ画面画像内のテキストコンテンツアイテムを検出し、テキストコンテンツアイテムの位置（たとえばバウンディングボックスの座標）および／または寸法を求めることができる。次に、求めた位置のサブ画像を抽出することができ、改良されたＯＣＲプロセスを、抽出した各サブ画像に対して実行することにより、各テキストコンテンツアイテムに対応付けられたテキスト情報を抽出することができる。
【０１３２】
図７は、特定の実施形態に係る、ＧＵＩ画面の画像からテキストコンテンツアイテムを抽出するために実行されるハイレベル処理を示す簡略化されたフローチャート７００である。フローチャート７００に示される処理は、たとえばＯＣＲモジュール３５２によって実行されてもよく、６０６および５０４に関して先に述べたように、ＧＵＩ画面画像または訓練画像からテキスト情報を抽出するために使用することができる。図７に示される処理は、１つ以上の処理ユニット（たとえばプロセッサ、コア）によって実行されるソフトウェア（たとえばコード、命令、プログラム）、ハードウェア、またはその組み合わせで、実現することができる。ソフトウェアは、（たとえばメモリデバイスのような非一時的なコンピュータ読取可能記憶媒体上の）メモリに格納されていてもよい。図７に示される特定の一連の処理ステップは限定を意図したものではない。なお、これらの処理ステップは、図７に示される順序と異なる順序で実行されてもよく、図７に示されるすべてのステップを実行する必要がある訳ではない。
【０１３３】
７１０で、入力画像（たとえばＧＵＩ画面画像）をテキスト抽出モジュール（たとえばＯＣＲモジュール３５２）に与えることができる。７２０で、入力画像内のテキスト領域を、たとえば上記ＥＡＳＴ技術を用いて検出することができる。ＥＡＳＴ技術は、入力画像内においてテキストコンテンツアイテムが存在する領域の境界を示す座標の正確な推定値を提供することができる。７３０で、テキストコンテンツアイテムに対応する各領域のサブ画像を抽出することができる。いくつかの実施形態において、サブ画像は、テキストコンテンツアイテムに対応する領域に追加されたマージンを含み得る。各サブ画像を、７８０で実行されるＯＣＲプロセスの前に、７０５で前処理することにより、サブ画像内のテキストコンテンツを認識することができる。
【０１３４】
いくつかの実施形態において、７０５における前処理は、７４０で適応しきい値処理を用いてＲＧＢフォーマットのサブ画像を２値サブ画像に変換することを含み得る。たとえば、画素の強度値がしきい値よりも高い場合、画素の値を、白色画素を表す値（たとえば「１」）に設定してもよい。そうでなければ、画素の値を、黒色画素を表す値（たとえば「０」）に設定してもよい。７５０で、２値サブ画像についてヒストグラムを生成することができる。７６０で、テキスト抽出モジュールは、各画素の強度値を相補値に変更することによってサブ画像を反転させる必要があるか否かを判断することができる。一般的に、テキストに対応する画素の数は、各サブ画像内の背景に対応する画素の数よりも少ない可能性がある。よって、ヒストグラムが、２値サブ画像内の黒色画素の数が白色画素の数よりも多いことを示す場合、テキストは、背景よりも高い（すなわち明るい）強度値を有する可能性があるため、ＲＧＢサブ画像を反転させる必要があるであろう。そうでなければ、テキストは背景よりも低い（暗い）強度値を有する可能性があるため、ＲＧＢサブ画像を反転させる必要はないであろう。いくつかの実施形態において、ヒストグラムをＲＧＢサブ画像について生成し、テキストが背景よりも明るいか否かを判断するために使用してもよい。７７０で、ＲＧＢサブ画像を反転させることができる。たとえば、最大強度値が２５５で各画素の強度値がｘｉの場合、反転画像内の各画素の値は２５５−ｘｉになるであろう。
【０１３５】
７８０で、ＲＧＢサブ画像または反転されたＲＧＢサブ画像を処理することにより、サブ画像内のテキストコンテンツアイテムを認識することができる。ＲＧＢサブ画像または反転されたＲＧＢサブ画像内のテキストは背景よりも暗いので、テキストコンテンツアイテムをより正確に認識できる。先に述べたように、いくつかの実施形態において、機械学習ベースの技術を用いることにより、たとえば手書き文字を含み得るテキストコンテンツアイテムを認識することができる。７９０で、各テキストコンテンツアイテム内の認識したテキストと、各テキストコンテンツアイテムの位置（たとえばバウンディングボックスの座標）を、記憶装置に格納するか、または、モデル生成器（モデル生成器１２０または３５０）における次の処理モジュールに与えることができる。先に述べたように、いくつかの実施形態において、サブ画像をプレースホルダに置き換えることによりテキストコンテンツアイテムを取り除いてもよい。よって、その結果得られた画像を、テキストコンテンツを含まないようにすることができ、ＵＩコンポーネントの検出および分類のために次の処理モジュールに与えることができる。
【０１３６】
図８は、特定の実施形態に係る、ＵＩコンポーネントおよび／またはテキストコンテンツアイテムをクラスタリングすることにより、グラフィックユーザインターフェイス画面について生成することができるＵＩコンポーネント階層８００の一例を示す。ＵＩコンポーネント階層８００は、ＵＩコンポーネントおよび／またはテキストコンテンツアイテムのクラスタリングに基づいて生成することができ、ＧＵＩ画面の最適なレイアウトを決定するために使用することができる。いくつかの実施形態において、ＵＩコンポーネント階層８００は、先に述べたようにＧＵＩ画面においてＵＩコンポーネントが如何にして階層的に組織されているかを記述することができる。図８に示される例において、ＧＵＩ画面８１０はＫのクラスタ８２０を含み得る。各クラスタ８２０は１つ以上のＵＩコンポーネント８３０を含み得る。たとえば、クラスタ１はＭのＵＩコンポーネント８３０を含んでいてもよく、クラスタ２はＮのＵＩコンポーネント８３０を含んでいてもよく、…、クラスタＫはＬのＵＩコンポーネント８３０を含んでいてもよい。各ＵＩコンポーネント８３０は、先に述べたように判断することができる、対応付けられた属性を有し得る。たとえば、各ＵＩコンポーネント８３０は、先に述べたように、対応付けられたＩＤ、位置およびサイズ情報、機械学習ベースの分類器によって分類されたＵＩコンポーネントのタイプ、（もしあれば）対応付けられたテキスト、ならびにＵＩコンポーネントに関するその他の情報、たとえば画像または画像のソース、機能、対応するアクション、対応するコード、他のアプリケーションまたはＧＵＩ画面へのリンクなどを有し得る。各ＵＩコンポーネントごとの、これらの対応付けられた属性を、モデル生成器（たとえばモデル生成器１２０または３５０）が用いてＧＵＩモデルを生成することができる。
【０１３７】
以下の説明では特定の実施形態について述べる。これらの特定の実施形態は専ら例示を目的としているのであって、限定を意図したものではない。これらの実施形態のうちの一部において、本明細書に開示される自動ＧＵＩモデルおよびコード生成技術を、Oracle（登録商標） Visual Builder Cloud Service開発環境のような統合開発環境（ＩＤＥ）の一部として実現することができる。いくつかの実施形態において、本明細書に開示される自動ＧＵＩモデルおよびコード生成技術は、スタンドアロンツールとして実現してもよい。
【０１３８】
図９は、特定の実施形態に係る、ＧＵＩ画面のためのＧＵＩモデルおよびＧＵＩコードを自動的に生成するためのソフトウェアアプリケーションのＧＵＩ画面９００の一例を示す。図９に示されるように、ＩＤＥにおいて最小限の新規ウェブアプリケーションｗｅｂａｐｐｌ  ９１０をスタートすることができる。この最小限の新規ウェブアプリケーションｗｅｂａｐｐｌ  ９１０は、スタートページ９４０のみを含み得る。ｗｅｂａｐｐｌ  ９１０のファイル構造９２０が左側のパネルに示される。新規ＧＵＩを追加するには、ＵＩ開発者等のユーザが、「＋」ボタン９３０をクリックすればよい。
【０１３９】
図１０は、特定の実施形態に係る、ＧＵＩ画面のためのＧＵＩモデルおよびＧＵＩコードを自動的に生成するためのソフトウェアアプリケーションのＧＵＩ画面１０００の一例を示す。ＧＵＩ画面１０００は、ユーザが「＋」ボタン９３０をクリックした後にユーザに対して表示されるユーザインターフェイス１０１０を示す。ユーザインターフェイス１０１０は、ＧＵＩ設計ファイルを入力ボックス１０２０に入力またはアップロードするようユーザを促すことができる。ＧＵＩ設計ファイルは、ＧＵＩ設計者がコンピュータ上または紙の上で設計しデジタルフォーマットで保存した、画素またはベクトルを含む画像ファイルのような１つ以上の画像ファイルを含み得る。入力ボックス１０２０が選択される（たとえばクリックされる）と、ユーザがローカルまたは遠隔保存されているＧＵＩ設計ファイルの位置を指定できるように、ポップアップウィンドウ１０３０がユーザに対して表示されてもよい。
【０１４０】
図１１は、特定の実施形態に係る、ＧＵＩ画面のためのＧＵＩモデルおよびＧＵＩコードを自動的に生成するためのソフトウェアアプリケーションのＧＵＩ画面１１００の一例を示す。図１１に示されるように、ユーザは、ポップアップウィンドウ１１３０からＧＵＩ設計ファイル（たとえば画像ファイル）の位置を指定した後に、ＧＵＩ設計ファイルを選択する、または、入力ボックス１１２０へのアイコン１１１０によって示されるように選択したＧＵＩ設計ファイルをドラッグすることができる。
【０１４１】
図１２は、特定の実施形態に係る、ＧＵＩ画面のためのＧＵＩモデルおよびＧＵＩコードを自動的に生成するためのソフトウェアアプリケーションのＧＵＩ画面１２００の一例を示す。図１２に示されるように、ＧＵＩ設計ファイルがアプリケーションにアップロードされた後に、スタートページ１２４０に加えて新たなページ１２１０が生成されてもよい。ファイル構造１２２０に示されるように、新たなＧＵＩのための、ＪＳＯＮファイル１２１６、ＪａｖａＳｃｒｉｐｔファイル１２１４、およびＨＴＭＬファイル１２１２が生成されてもよい。ＪＳＯＮファイル１２１６はＧＵＩモデルを含んでいてもよく、ＨＴＭＬファイル１２１２はｈｔｍｌフォーマットのＧＵＩのインプリメンテーションを含んでいてもよい。
【０１４２】
図１３は、特定の実施形態に係る、ＧＵＩ画面のために生成されたＪＳＯＮフォーマットのＧＵＩモデル１３００の一例を示す。ＧＵＩモデル１３００は、図１２に示されるＪＳＯＮファイル１２１６に対応し得る。図１３に示されるように、ＧＵＩモデル１３００は、ＧＵＩ画面のレイアウト、ラベル、画像、およびテキスト入力ボックス等のＧＵＩ画面の各種コンポーネントを記述することができる。ＧＵＩモデル１３００は、いくつかのＵＩコンポーネント内にテキストを表示することもできる。ユーザは、必要であればテキストエディタを用いてＧＵＩモデルを修正することができる。
【０１４３】
図１４は、特定の実施形態に係る、本明細書に開示される技術に基づいて生成されるコードを用いて表示される、入力ＧＵＩ画面画像１４１０および対応するＧＵＩ画面画像１４２０の一例を示す。入力ＧＵＩ画面画像１４１０は、設計されたＧＵＩ画面を示すフォトビューアによって表示されるＪＰＧファイルである。ＧＵＩ画面画像１４２０は、ＨＴＭＬファイル１２１２のようなＨＴＭＬファイルに基づいてウェブブラウザによって表示される。
【０１４４】
図１５は、特定の実施形態に係る、本明細書に開示される技術に基づいて入力ＧＵＩ画面の一例に対して生成されるｈｔｍｌコードを示すスクリーンショット１５００の一例である。図１５に示されるように、ファイル構造１５１０内のツールによって生成されたＨＴＭＬファイル１５２０をユーザが選択すると、ソースＨＴＭＬコードがユーザに対して表示されてもよく、ユーザは必要に応じてＨＴＭＬコードを修正してもよい。
【０１４５】
図１６Ａおよび図１６Ｂは、特定の実施形態に係る、本明細書に開示される技術に基づいて生成されるコードを用いて表示される、入力ＧＵＩ画面画像１６００および対応するＧＵＩ画面画像１６５０の別の例を示す。入力ＧＵＩ画面画像１６００は、設計されたＧＵＩ画面を示すフォトビューアによって表示されるＰＮＧファイルである。ＧＵＩ画面画像１６５０は、本明細書に開示される技術を実現するツールによって自動的に生成されるＨＴＭＬファイルに基づいてウェブブラウザによって表示されるＧＵＩのスナップショットである。
【０１４６】
本明細書に記載のモデル生成システム１０２または３３０は、クラウド環境（たとえばプライベート、パブリック、およびハイブリッドクラウド環境を含む各種クラウド）、オンプレミス環境、ハイブリッド環境などを含む、さまざまな異なる環境で実現することができる。
【０１４７】
図１７は、ある実施形態を実現するための分散型システム１７００の簡略図を示す。示されている実施形態において、分散型システム１７００は、サーバ１７１２を介して１つ以上の通信ネットワーク１７１０に結合された１つ以上のクライアントコンピューティングデバイス１７０２、１７０４、１７０６、および１７０８を含む。クライアントコンピューティングデバイス１７０２、１７０４、１７０６、および１７０８は、１つ以上のアプリケーションを実行するように構成し得る。
【０１４８】
各種実施形態において、サーバ１７１２は、あるアプリケーションのユーザインターフェイスコンポーネントと、データオブジェクトとの間に、このアプリケーションに関する要求情報を用いて、関係またはマッピングを自動的に生成する１つ以上のサービスまたはソフトウェアアプリケーションを実行または提供するのに適するようにすることができる。たとえば、特定の実施形態において、サーバ１７１２は、あるアプリケーションについての要求情報を受けてもよく、この要求情報は、アプリケーションの所望の機能の記述を含み得るものであり、また、アプリケーションの所望のＧＵＩの画像を含み得る。そうすると、サーバ１７１２は、この要求情報を用いることにより、アプリケーションのユーザインターフェイスコンポーネントと１つ以上のデータオブジェクトとの間にマッピングを生成することができる。
【０１４９】
特定の実施形態において、サーバ１７１２はまた、非仮想または仮想環境に提供し得るその他のサービスまたはソフトウェアアプリケーションを提供することができる。いくつかの実施形態において、これらのサービスは、サービスとしてのソフトウェア（Software as a Service）（ＳａａＳ）モデルのようなウェブベースまたはクラウドサービスとして、クライアントコンピューティングデバイス１７０２、１７０４、１７０６、および／または１７０８のユーザに提供されてもよい。そうすると、クライアントコンピューティングデバイス１７０２、１７０４、１７０６、および／または１７０８を操作しているユーザは、１つ以上のクライアントアプリケーションを利用することにより、サーバ１７１２とやり取りして、これらのコンポーネントが提供するサービスを利用することができる。
【０１５０】
図１７に示される構成において、サーバ１７１２は、サーバ１７１２が実行する機能を実現する１つ以上のコンポーネント１７１８、１７２０および１７２２を含み得る。これらのコンポーネントは、１つ以上のプロセッサ、ハードウェアコンポーネント、またはその組み合わせによって実行可能なソフトウェアコンポーネントを含み得る。なお、分散型システム１７００とは異なり得る多種多様なシステム構成が可能であることが理解されるはずである。よって、図１７に示される実施形態は、実施形態のシステムを実現するための分散型システムの一例であり限定を意図したものではない。
【０１５１】
本開示の教示に従い、ユーザは、クライアントコンピューティングデバイス１７０２、１７０４、１７０６、および／または１７０８を用いることにより、要求情報をサーバ１７１２に提供し、サーバ１７１２から情報（たとえばマッピング情報）を受けることができる。クライアントデバイスは、クライアントデバイスのユーザがクライアントデバイスとやり取りすることを可能にするインターフェイスを提供し得る。クライアントデバイスはまた、このインターフェイスを介して情報をユーザに出力する。図１７は４つのクライアントコンピューティングデバイスしか示していないが、任意の数のクライアントコンピューティングデバイスをサポートすることができる。
【０１５２】
クライアントデバイスは、ポータブルハンドヘルドデバイス、パーソナルコンピュータおよびラップトップのような汎用コンピュータ、ワークステーションコンピュータ、ウェアラブルデバイス、ゲームシステム、シンクライアント、各種メッセージングデバイス、センサまたはその他のセンシングデバイスなどのような、さまざまな種類のコンピューティングシステムを含み得る。これらのコンピューティングデバイスは、さまざまな種類およびバージョンのソフトウェアアプリケーションおよびオペレーティングシステム（たとえばＭｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）、Ａｐｐｌｅ  Ｍａｃｉｎｔｏｓｈ（登録商標）、ＵＮＩＸ（登録商標）またはＵＮＩＸ系オペレーティングシステム、Ｌｉｎｕｘ（登録商標）またはＬｉｎｕｘ系オペレーティングシステム、たとえば、各種おモバイルオペレーティングシステム（たとえばＭｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ  Ｍｏｂｉｌｅ（登録商標）、ｉＯＳ（登録商標）、Ｗｉｎｄｏｗｓ  Ｐｈｏｎｅ（登録商標）、Ａｎｄｒｏｉｄ（登録商標）、ＢｌａｃｋＢｅｒｒｙ（登録商標）、Ｐａｌｍ  ＯＳ（登録商標））を含むＧｏｏｇｌｅ  Ｃｈｒｏｍｅ（登録商標）ＯＳ）を含み得る。ポータブルハンドヘルドデバイスは、セルラーフォン、スマートフォン（たとえばｉＰｈｏｎｅ（登録商標））、タブレット（たとえばｉＰａｄ（登録商標））、携帯情報端末（ＰＤＡ）などを含み得る。ウェアラブルデバイスは、Ｇｏｏｇｌｅ  Ｇｌａｓｓ（登録商標）ヘッドマウントディスプレイおよびその他のデバイスを含み得る。ゲームシステムは、各種ハンドヘルドゲームデバイス、インターネット接続可能なゲームデバイス（たとえばＫｉｎｅｃｔ（登録商標）ジェスチャ入力デバイスを備えたＭｉｃｒｏｓｏｆｔ  Ｘｂｏｘ（登録商標）ゲーム機、Ｓｏｎｙ  ＰｌａｙＳｔａｔｉｏｎ（登録商標）システム、Ｎｉｎｔｅｎｄｏ（登録商標）が提供する各種ゲームシステムなどを含み得る。クライアントデバイスは、各種インターネット関連アプリケーション、通信アプリケーション（たとえばＥメールアプリケーション、ショートメッセージサービス（ＳＭＳ）アプリケーション）のような多種多様なアプリケーションを実行可能であってもよく、各種通信プロトコルを使用することができる。
【０１５３】
通信ネットワーク１７１０は、利用可能な多様なプロトコルのうちのいずれかを用いてデータ通信をサポートできる、当該技術の当業者には周知のいずれかの種類のネットワークであればよく、上記プロトコルは、ＴＣＰ／ＩＰ（伝送制御プロトコル／インターネットプロトコル）、ＳＮＡ（システムネットワークアーキテクチャ）、ＩＰＸ（インターネットパケット交換）、ＡｐｐｌｅＴａｌｋ（登録商標）などを含むがこれらに限定されない。単に例として、通信ネットワーク１７１０は、ローカルエリアネットワーク（ＬＡＮ）、Ｅｔｈｅｒｎｅｔ（登録商標）に基づくネットワーク、トークンリング、ワイドエリアネットワーク（ＷＡＮ）、インターネット、仮想ネットワーク、仮想プライベートネットワーク（ＶＰＮ）、イントラネット、エクストラネット、公衆交換電話網（ＰＳＴＮ）、赤外線ネットワーク、無線ネットワーク（たとえば電気電子学会（ＩＥＥＥ）８０２．１１プロトコルスイートのいずれかの下で動作する無線ネットワーク、Ｂｌｕｅｔｏｏｔｈおよび／または任意の他の無線プロトコル）、および／またはこれらおよび／または他のネットワークの任意の組み合わせを含み得る。
【０１５４】
サーバ１７１２は、１つ以上の汎用コンピュータ、専用サーバコンピュータ（一例としてＰＣ（パーソナルコンピュータ）サーバ、ＵＮＩＸ（登録商標）サーバ、ミッドレンジサーバ、メインフレームコンピュータ、ラックマウント型サーバなどを含む）、サーバファーム、サーバクラスタ、またはその他の適切な構成および／または組み合わせで構成されてもよい。サーバ１７１２は、仮想オペレーティングシステムを実行する１つ以上の仮想マシン、または仮想化を伴う他のコンピューティングアーキテクチャを含み得る。これはたとえば、サーバに対して仮想記憶装置を維持するように仮想化できる論理記憶装置の１つ以上のフレキシブルツールなどである。各種実施形態において、サーバ１７１２を、上記開示に記載の機能を提供する１つ以上のサービスまたはソフトウェアアプリケーションを実行するのに適するようにしてもよい。
【０１５５】
サーバ１７１２内のコンピューティングシステムは、上記オペレーティングシステムのうちのいずれかを含む１つ以上のオペレーティングシステム、および、市場で入手可能なサーバオペレーティングシステムを実行し得る。また、サーバ１７１２は、ＨＴＴＰ（ハイパーテキスト転送プロトコル）サーバ、ＦＴＰ（ファイル転送プロトコル）サーバ、ＣＧＩ（コモンゲートウェイインターフェイス）サーバ、ＪＡＶＡ（登録商標）サーバ、データベースサーバなどを含むさまざまなさらに他のサーバアプリケーションおよび／または中間層アプリケーションのうちのいずれかを実行し得る。例示されるデータベースサーバは、Ｏｒａｃｌｅ（登録商標）、Ｍｉｃｒｏｓｏｆｔ（登録商標）、Ｓｙｂａｓｅ（登録商標）、ＩＢＭ（登録商標）（International Business Machines）などから市場で入手可能なものを含むが、それらに限定されるものではない。
【０１５６】
いくつかの実装例において、サーバ１７１２は、クライアントコンピューティングデバイス１７０２，１７０４，１７０６および１７０８のユーザから受信したデータフィードおよび／またはイベントアップデートを解析および整理統合するための１つ以上のアプリケーションを含み得る。一例として、データフィードおよび／またはイベントアップデートは、センサデータアプリケーション、金融株式相場表示板、ネットワーク性能測定ツール（たとえば、ネットワークモニタリングおよびトラフィック管理アプリケーション）、クリックストリーム解析ツール、自動車交通モニタリングなどに関連するリアルタイムのイベントを含んでもよい、１つ以上の第三者情報源および連続データストリームから受信される、Ｔｗｉｔｔｅｒ（登録商標）フィード、Ｆａｃｅｂｏｏｋ（登録商標）アップデートまたはリアルタイムのアップデートを含み得るが、それらに限定されるものではない。サーバ１７１２は、データフィードおよび／またはリアルタイムのイベントをクライアントコンピューティングデバイス１７０２，１７０４，１７０６および１７０８の１つ以上の表示デバイスを介して表示するための１つ以上のアプリケーションも含み得る。
【０１５７】
分散型システム１７００はまた、１つ以上のデータリポジトリ１７１４、１７１６を含み得る。特定の実施形態において、これらのデータリポジトリを用いてデータおよびその他の情報を格納することができる。たとえば、データリポジトリ１７１４、１７１６のうちの１つ以上を用いて、サーバ１７１２が使用するまたは生成した、１つ以上のアプリケーションについての要求情報、マッピング情報、およびその他の情報などの情報を格納することができる。データリポジトリ１７１４、１７１６は、さまざまな場所に存在し得る。たとえば、サーバ１７１２が使用するデータリポジトリは、サーバ１７１２のローカル位置にあってもよく、またはサーバ１７１２から遠隔の位置にあってもよく、ネットワークベースのまたは専用接続を介してサーバ１７１２と通信する。データリポジトリ１７１４、１７１６は、異なる種類であってもよい。特定の実施形態において、サーバ１７１２が使用するデータリポジトリは、データベース、たとえば、Ｏｒａｃｌｅ  Ｃｏｒｐｏｒａｔｉｏｎ（登録商標）が提供するデータベースのようなリレーショナルデータベースであってもよい。これらのデータベースのうちの１つ以上を、ＳＱＬフォーマットのコマンドに応じて、データの格納、アップデート、およびデータベースとの間での取り出しを可能にするのに適するようにしてもよい。アプリケーションが使用するデータリポジトリは、たとえば、キー値ストアリポジトリ、オブジェクトストアリポジトリ、またはファイルシステムがサポートする汎用ストレージリポジトリのようなさまざまな種類のものであってもよい。
【０１５８】
特定の実施形態において、本開示に記載の特徴は、クラウド環境を介してサービスとして提供することができる。図１８は、特定の実施形態に係る、各種サービスをクラウドサービスとして提供し得るクラウドベースのシステム環境の簡略化されたブロック図である。図１８に示される実施形態において、クラウドインフラストラクチャシステム１８０２は、ユーザが１つ以上のクライアントデバイス１８０４、１８０６、および１８０８を用いて要求し得る１つ以上のクラウドサービスを提供することができる。クラウドインフラストラクチャシステム１８０２は、サーバ１７１２に関して先に述べたものを含み得る１つ以上のコンピュータおよび／またはサーバを含み得る。クラウドインフラストラクチャシステム１８０２内のコンピュータを、汎用コンピュータ、専用サーバコンピュータ、サーバファーム、サーバクラスタ、またはその他任意の適切な配置および／または組み合わせとして、組織してもよい。
【０１５９】
ネットワーク１８１０は、クライアントデバイス１８０４、１８０６、および１８０８と、クラウドインフラストラクチャシステム１８０２との間におけるデータの通信および交換を容易にすることができる。ネットワーク１８１０は、１つ以上のネットワークを含み得る。ネットワークは同じ種類であっても異なる種類であってもよい。ネットワーク１８１０は、通信を容易にするために、有線および／または無線プロトコルを含む、１つ以上の通信プロトコルをサポートすることができる。
【０１６０】
図１８に示される実施形態は、クラウドインフラストラクチャシステムの一例にすぎず、限定を意図したものではない。なお、その他いくつかの実施形態において、クラウドインフラストラクチャシステム１８０２が、図１８に示されるものよりも多くのまたは少ないコンポーネントを有していてもよく、２つ以上のコンポーネントを組み合わせてもよく、または、コンポーネントの異なる構成または配置を有していてもよいことが、理解されるはずである。たとえば、図１８は３つのクライアントコンピューティングデバイスを示しているが、代替実施形態において任意の数のクライアントコンピューティングデバイスをサポートすることができる。
【０１６１】
クラウドサービスという用語は一般的に、サービスプロバイダのシステム（たとえばクラウドインフラストラクチャシステム１８０２）により、インターネット等の通信ネットワークを介してオンデマンドでユーザが利用できるようにされるサービスを意味するために使用される。典型的に、パブリッククラウド環境では、クラウドサービスプロバイダのシステムを構成するサーバおよびシステムは、顧客自身のオンプレミスサーバおよびシステムとは異なる。クラウドサービスプロバイダのシステムは、クラウドサービスプロバイダによって管理される。よって、顧客は、別途ライセンス、サポート、またはハードウェアおよびソフトウェアリソースをサービスのために購入しなくても、クラウドサービスプロバイダが提供するクラウドサービスを利用できる。たとえば、クラウドサービスプロバイダのシステムはアプリケーションをホストすることができ、ユーザは、アプリケーションを実行するためにインフラストラクチャリソースを購入しなくても、インターネットを介しオンデマンドでアプリケーションをオーダーし使用することができる。クラウドサービスは、アプリケーション、リソースおよびサービスに対する容易でスケーラブルなアクセスを提供するように設計される。いくつかのプロバイダがクラウドサービスを提供する。たとえば、ミドルウェアサービス、データベースサービス、Ｊａｖａクラウドサービスその他などのいくつかのクラウドサービスが、カリフォルニア州レッドウッド・ショアーズのＯｒａｃｌｅ  Ｃｏｒｐｏｒａｔｉｏｎ（登録商標）から提供される。
【０１６２】
特定の実施形態において、クラウドインフラストラクチャシステム１８０２は、ハイブリッドサービスモデルを含む、サービスとしてのソフトウェア（ＳａａＳ）モデル、サービスとしてのプラットフォーム（ＰａａＳ）モデル、サービスとしてのインフラストラクチャ（ＩａａＳ）モデルその他のような、異なるモデルを使用して、１つ以上のクラウドサービスを提供し得る。クラウドインフラストラクチャシステム１８０２は、各種クラウドサービスのプロビジョンを可能にする、アプリケーション、ミドルウェア、データベース、およびその他のリソースのスイートを含み得る。
【０１６３】
ＳａａＳモデルは、アプリケーションまたはソフトウェアを、インターネットのような通信ネットワークを通して、顧客が基本となるアプリケーションのためのハードウェアまたはソフトウェアを購入しなくても、サービスとして顧客に配信することを可能にする。たとえば、ＳａａＳモデルを用いることにより、クラウドインフラストラクチャシステム１８０２がホストするオンデマンドアプリケーションに顧客がアクセスできるようにすることができる。Ｏｒａｃｌｅ  Ｃｏｒｐｏｒａｔｉｏｎ（登録商標）が提供するＳａａＳサービスの例は、人的資源／資本管理のための各種サービス、カスタマー・リレーションシップ・マネジメント（ＣＲＭ）、エンタープライズ・リソース・プランニング（ＥＲＰ）、サプライチェーン・マネジメント（ＳＣＭ）、エンタープライズ・パフォーマンス・マネジメント（ＥＰＭ）、解析サービス、ソーシャルアプリケーションその他を含むがこれらに限定されるものではない。特定の実施形態において、アプリケーションに関する要求情報から機能アプリケーションを自動的に生成する機能を、ＳａａＳモデルに基づくサービスとして提供することができる。
【０１６４】
ＩａａＳモデルは一般的に、インフラストラクチャリソース（たとえばサーバ、ストレージ、ハードウェアおよびネットワーキングリソース）を、クラウドサービスとして顧客に提供することにより、柔軟な計算およびストレージ機能を提供するために使用される。各種ＩａａＳサービスがＯｒａｃｌｅ  Ｃｏｒｐｏｒａｔｉｏｎ（登録商標）から提供される。
【０１６５】
ＰａａＳモデルは一般的に、顧客が、アプリケーションおよびサービスを、環境リソースを調達、構築、または管理しなくても、開発、実行、および管理することを可能にするプラットフォームおよび環境リソースをサービスとして提供するために使用される。Ｏｒａｃｌｅ  Ｃｏｒｐｏｒａｔｉｏｎ（登録商標）が提供するＰａａＳサービスの例は、Oracle Java Cloud Service（ＪＣＳ）、Oracle Database Cloud Service（ＤＢＣＳ）、データ管理クラウドサービス、各種アプリケーション開発ソリューションサービスその他を含むがこれらに限定されるものではない。
【０１６６】
クラウドサービスは一般的に、オンデマンドのセルフサービスベースで、サブスクリプションベースで、柔軟にスケーラブルで、信頼性が高く、可用性が高い、安全なやり方で提供される。たとえば、顧客は、サブスクリプションオーダーを介し、クラウドインフラストラクチャシステム１８０２が提供する１つ以上のサービスをオーダーすることができる。クラウドインフラストラクチャシステム１８０２はそうすると、処理を実行することにより、顧客のサブスクリプションオーダーで要求されたサービスを提供する。たとえば、ユーザは、アプリケーションについての要求情報を、クラウドインフラストラクチャシステムに与え、クラウドインフラストラクチャシステムに、要求情報から機能アプリケーションを自動的に生成するよう要求する。これは、先に述べたように、アプリケーションのユーザインターフェイスコンポーネントとデータオブジェクトとの間にマッピングを自動的に生成することを含む。クラウドインフラストラクチャシステム１８０２を、１つまたは複数のクラウドサービスを提供するように構成してもよい。
【０１６７】
クラウドインフラストラクチャシステム１８０２は、異なるデプロイメントモデルを介してクラウドサービスを提供し得る。パブリッククラウドモデルにおいて、クラウドインフラストラクチャシステム１８０２は、第三者クラウドサービスプロバイダによって所有されていてもよく、クラウドサービスは一般のパブリックカスタマーに提供される。このカスタマーは個人でも企業でもよい。その他特定の実施形態において、プライベートクラウドモデルでは、クラウドインフラストラクチャシステム１８０２がある組織内で（たとえば企業組織内で）機能してもよく、サービスはこの組織内の顧客に提供される。たとえば、この顧客は、人事部、給与部その他のようなさまざまな部署であってもよく、企業内の個人であってもよい。その他の特定の実施形態において、コミュニティクラウドモデルでは、クラウドインフラストラクチャシステム１８０２および提供されるサービスは、関連コミュニティ内の数組織で共有されてもよい。上記モデルの混成モデルのようなその他各種モデルを使用することもできる。
【０１６８】
クライアントデバイス１８０４、１８０６、および１８０８は、異なるタイプであってもよく（たとえば図１８に示されるクライアントデバイス１８０４、１８０６、および１８０８）、１つ以上のクライアントアプリケーションを操作可能であってもよい。ユーザは、クライアントデバイスを用いることにより、クラウドインフラストラクチャシステム１８０２が提供するサービスを要求することなど、クラウドインフラストラクチャシステム１８０２とのやり取りを行うことができる。たとえば、ユーザは、クライアントデバイスを用いることにより、アプリケーションについての要求情報をクラウドインフラストラクチャシステム１８０２に提供し、クラウドインフラストラクチャシステムに、要求情報から機能アプリケーションを自動的に生成するよう要求することができる。これは、本開示で述べたように、アプリケーションのユーザインターフェイスコンポーネントとデータオブジェクトとの間にマッピングを自動的に生成することを含む。
【０１６９】
いくつかの実施形態において、クラウドインフラストラクチャシステム１８０２が、要求されたサービスを提供するために実行する処理は、ビッグデータ解析を含み得る。この解析は、大きなデータセットを使用し、解析し、操作することにより、このデータ内のさまざまな傾向、挙動、関係などを検出し可視化することを含み得る。この解析は、１つ以上のプロセッサが、場合によっては、データを並列に処理し、データを用いてシミュレーションを実行するなどして、実行してもよい。この解析に使用されるデータは、構造化データ（たとえばデータベースに格納されたまたは構造化モデルに従って構造化されたデータ）および／または非構造化データ（たとえばデータブロブ（blob）（binary large object：バイナリ・ラージ・オブジェクト））を含み得る。
【０１７０】
図１８の実施形態に示されるように、クラウドインフラストラクチャシステム１８０２は、クラウドインフラストラクチャシステム１８０２が提供する各種クラウドサービスのプロビジョンを容易にするために利用されるインフラストラクチャリソース１８３０を含み得る得。インフラストラクチャリソース１８３０は、たとえば、処理リソース、ストレージまたはメモリリソース、ネットワーキングリソースなどを含み得る。
【０１７１】
特定の実施形態において、異なる顧客に対しクラウドインフラストラクチャシステム１８０２が提供する各種クラウドサービスをサポートするためのこれらのリソースを効率的にプロビジョニングし易くするために、リソースを、リソースセットまたはリソースモジュール（「ポッド」とも呼ばれる）になるようにまとめてもよい。各リソースモジュールまたはポッドは、１種類以上のリソースを予め一体化し最適化した組み合わせを含み得る。特定の実施形態において、異なるポッドを異なる種類のクラウドサービスに対して予めプロビジョニングしてもよい。たとえば、第１のポッドセットをデータベースサービスのためにプロビジョニングしてもよく、第１のポッドセット内のポッドと異なるリソースの組み合わせを含み得る第２のポッドセットをＪａｖａサービスなどのためにプロビジョニングしてもよい。いくつかのサービスについて、これらのサービスをプロビジョニングするために割り当てられたリソースをサービス間で共有してもよい。
【０１７２】
クラウドインフラストラクチャシステム１８０２自身が、クラウドインフラストラクチャシステム１８０２の異なるコンポーネントによって共有されクラウドインフラストラクチャシステム１８０２によるサービスのプロビジョニングを容易にするサービス１８３２を、内部で使用してもよい。これらの内部共有サービスは、セキュリティ・アイデンティティサービス、統合サービス、エンタープライズリポジトリサービス、エンタープライズマネージャサービス、ウィルススキャン・ホワイトリストサービス、高可用性バックアップリカバリサービス、クラウドサポートを可能にするサービス、Ｅメールサービス、通知サービス、ファイル転送サービスなどを含み得るが、これらに限定されるものではない。
【０１７３】
クラウドインフラストラクチャシステム１８０２は複数のサブシステムを含み得る。これらのサブシステムは、ソフトウェア、またはハードウェア、またはその組み合わせで実現し得る。図１８に示されるように、サブシステムは、クラウドインフラストラクチャシステム１８０２のユーザまたは顧客がクラウドインフラストラクチャシステム１８０２とやり取りすることを可能にするユーザインターフェイスサブシステム１８１２を含み得る。ユーザインターフェイスサブシステム１８１２は、ウェブインターフェイス１８１４、クラウドインフラストラクチャシステム１８０２が提供するクラウドサービスが宣伝広告され消費者による購入が可能なオンラインストアインターフェイス１８１６、およびその他のインターフェイス１８１８のような、各種異なるインターフェイスを含み得る。たとえば、顧客は、クライアントデバイスを用い、クラウドインフラストラクチャシステム１８０２が提供する１つ以上のサービスを、インターフェイス１８１４、１８１６、および１８１８のうちの１つ以上を用いてサブスクリプションオーダーを行うことによって要求する（サービス要求１８３４）ことができる。これらのインターフェイスは、たとえば、顧客が、クラウドインフラストラクチャシステム１８０２が提供するクラウドサービスを特定するオンラインストアにアクセスしてこれをブラウズし、顧客が申し込むことを希望する、提供されたサービスのうちの１つ以上についてサブスクリプションオーダーを行うための、オンラインストアユーザインターフェイス１８１６を含み得る。その他のインターフェイスはウェブインターフェイス１８１４およびその他のインターフェイス１８１８を含み得る。
【０１７４】
特定の実施形態において、サービス要求またはサブスクリプション要求は、要求しているユーザまたは顧客を特定する情報と、顧客が申込みを希望する１つ以上のサービスとを含み得る。たとえば、顧客は、クラウドインフラストラクチャシステム１８０２が提供する自動アプリケーション生成サービスに対してサブスクリプションオーダーを行うことができる。
【０１７５】
図１８に示される実施形態のような特定の実施形態において、クラウドインフラストラクチャシステム１８０２は、新規サブスクリプションオーダーを処理するように構成されたオーダー管理サブシステム（ＯＭＳ）１８０２を含み得る。この処理の一部として、ＯＭＳ１８２０は、既に作成されていなければ顧客のアカウントを作成し、要求されたサービスを顧客に提供するために顧客に対して課金するのに使用する課金および／またはアカウント情報を顧客から受け、顧客情報を検証し、検証後、顧客のためにこのオーダーを予約し、各種ワークフローを調整することにより、プロビジョニングのためにオーダーを準備するように、構成されてもよい。
【０１７６】
適切に妥当性確認がなされると、ＯＭＳ１８２０は、処理、メモリ、およびネットワーキングリソースを含む、このオーダーのためのリソースをプロビジョニングするように構成されたオーダープロビジョニングサブシステム（ＯＰＳ）１８２４を呼び出すことができる。プロビジョニングは、オーダーのためのリソースを割り当てることと、顧客オーダーが要求するサービスを容易にするようにリソースを構成することとを含み得る。オーダーのためにリソースをプロビジョニングするやり方およびプロビジョニングされるリソースのタイプは、顧客がオーダーしたクラウドサービスのタイプに依存し得る。たとえば、あるワークフローに従うと、ＯＰＳ１８２４を、要求されている特定のクラウドサービスを判断し、この特定のクラウドサービスのために予め構成されたであろうポッドの数を特定するように構成されてもよい。あるオーダーのために割り当てられるポッドの数は、要求されたサービスのサイズ／量／レベル／範囲に依存し得る。たとえば、割り当てるポッドの数は、サービスがサポートすべきユーザの数、サービスが要求されている期間などに基づいて決定してもよい。次に、割り当てられたポッドを、要求されたサービスを提供するために、要求している特定の顧客に合わせてカスタマイズしてもよい。
【０１７７】
クラウドインフラストラクチャシステム１８０２は、要求されたサービスがいつ使用できるようになるかを示すために、レスポンスまたは通知１８４４を、要求している顧客に送ってもよい。いくつかの例において、顧客が、要求したサービスの利益の使用および利用を開始できるようにする情報（たとえばリンク）を顧客に送信してもよい。
【０１７８】
クラウドインフラストラクチャシステム１８０２はサービスを複数の顧客に提供し得る。各顧客ごとに、クラウドインフラストラクチャシステム１８０２は、顧客から受けた１つ以上のサブスクリプションオーダーに関連する情報を管理し、オーダーに関連する顧客データを維持し、要求されたサービスを顧客に提供する責任がある。また、クラウドインフラストラクチャシステム１８０２は、申し込まれたサービスの顧客による使用に関する使用統計を収集してもよい。たとえば、統計は、使用されたストレージの量、転送されたデータの量、ユーザの数、ならびにシステムアップタイムおよびシステムダウンタイムの量などについて、収集されてもよい。この使用情報を用いて顧客に課金してもよい。課金はたとえば月ごとに行ってもよい。
【０１７９】
クラウドインフラストラクチャシステム１８０２は、サービスを複数の顧客に並列に提供してもよい。クラウドインフラストラクチャシステム１８０２は、場合によっては著作権情報を含む、これらの顧客についての情報を保存してもよい。特定の実施形態において、クラウドインフラストラクチャシステム１８０２は、顧客の情報を管理し管理される情報の分離を提供することで、ある顧客に関する情報が別の顧客に関する情報からアクセスされたりこの情報と混ざり合ったりしないようにするように構成された、アイデンティティ管理サブシステム（ＩＭＳ）１８２８を含む。ＩＭＳ１８２８は、アイデンティティサービス、たとえば情報アクセス管理、認証および許可サービス、顧客のアイデンティティおよび役割ならびに関連する能力などを管理するためのサービスのような、各種セキュリティ関連サービスを提供するように構成されてもよい。
【０１８０】
図１９は、特定の実施形態を実現するために使用し得る例示的なコンピュータシステム１９００を示す。たとえば、いくつかの実施形態において、コンピュータシステム１９００を使用することにより、図１に示されるモデル生成システム１０２のような、上述のさまざまなサーバおよびコンピュータシステムのいずれかを実現することができる。図１９に示されるように、コンピュータシステム１９００は、バスサブシステム１９０２を介して複数の他のサブシステムと通信する処理サブシステム１９０４を含むさまざまなサブシステムを含む。これらの他のサブシステムは、処理加速ユニット１９０６、Ｉ／Ｏサブシステム１９０８、ストレージサブシステム１９１８および通信サブシステム１９２４を含み得る。ストレージサブシステム１９１８は、記憶媒体１９２２およびシステムメモリ１９１０を含む、非一時的なコンピュータ読取可能記憶媒体を含み得る。
【０１８１】
バスサブシステム１９０２は、コンピュータシステム１９００のさまざまなコンポーネントおよびサブシステムに意図されるように互いに通信させるための機構を提供する。バスサブシステム１９０２は単一のバスとして概略的に示されているが、バスサブシステムの代替実施形態は複数のバスを利用してもよい。バスサブシステム１９０２は、さまざまなバスアーキテクチャのうちのいずれかを用いる、メモリバスまたはメモリコントローラ、周辺バス、ローカルバスなどを含むいくつかのタイプのバス構造のうちのいずれかであってもよい。たとえば、そのようなアーキテクチャは、業界標準アーキテクチャ（Industry Standard Architecture）（ＩＳＡ）バス、マイクロチャネルアーキテクチャ（Micro Channel Architecture）（ＭＣＡ）バス、エンハンストＩＳＡ（Enhanced ISA）（ＥＩＳＡ）バス、ビデオ・エレクトロニクス・スタンダーズ・アソシエーション（Video Electronics Standards Association）（ＶＥＳＡ）ローカルバス、およびＩＥＥＥ  Ｐ１３８６．１規格に従って製造される中二階バスとして実現可能な周辺コンポーネントインターコネクト（Peripheral Component Interconnect）（ＰＣＩ）バスなどを含み得る。
【０１８２】
処理サブシステム１９０４は、コンピュータシステム１９００の動作を制御し、１つ以上のプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、またはフィールドプログラマブルゲートアレイ（ＦＰＧＡ）を含み得る。プロセッサは、シングルコアまたはマルチコアプロセッサを含み得る。コンピュータシステム１９００の処理リソースを、１つ以上の処理ユニット１９３２、１９３４などになるように組織することができる。処理ユニットは、１つ以上のプロセッサ、同一のまたは異なるプロセッサからの１つ以上のコア、コアとプロセッサとの組み合わせ、またはコアとプロセッサとのその他の組み合わせを含み得る。いくつかの実施形態において、処理サブシステム１９０４は、グラフィックスプロセッサ、デジタル信号プロセッサ（ＤＳＰ）などのような１つ以上の専用コプロセッサを含み得る。いくつかの実施形態では、処理サブシステム１９０４の処理ユニットの一部または全部は、特定用途向け集積回路（ＡＳＩＣ）またはフィールドプログラマブルゲートアレイ（ＦＰＧＡ）などのカスタマイズされた回路を使用して実現することができる。
【０１８３】
いくつかの実施形態において、処理サブシステム１９０４内の処理ユニットは、システムメモリ１９１０またはコンピュータ読取可能記憶媒体１９２２に格納された命令を実行することができる。さまざまな実施形態において、処理ユニットはさまざまなプログラムまたはコード命令を実行し、同時に実行する複数のプログラムまたはプロセスを維持することができる。任意の所定の時点で、実行されるべきプログラムコードの一部または全部は、システムメモリ１９１０および／または潜在的に１つ以上の記憶装置を含むコンピュータ読取可能記憶媒体１９１０に常駐していてもよい。適切なプログラミングを介して、処理サブシステム１９０４は、先に述べたさまざまな機能を提供することができる。コンピュータシステム１９００が１つ以上の仮想マシンを実行している例において、１つ以上の処理ユニットに各仮想マシンを割り当ててもよい。
【０１８４】
特定の実施形態において、コンピュータシステム１９００によって実行される全体的な処理を加速するよう、カスタマイズされた処理を実行するために、または処理サブシステム１９０４によって実行される処理の一部をオフロードするために、処理加速ユニット１９０６を任意に設けることができる。
【０１８５】
Ｉ／Ｏサブシステム１９０８は、コンピュータシステム１９００に情報を入力するための、および／またはコンピュータシステム１９００から、もしくはコンピュータシステム１９００を介して、情報を出力するための、デバイスおよび機構を含むことができる。一般に、「入力デバイス」という語の使用は、コンピュータシステム１９００に情報を入力するためのすべての考えられ得るタイプのデバイスおよび機構を含むよう意図される。ユーザインターフェイス入力デバイスは、たとえば、キーボード、マウスまたはトラックボールなどのポインティングデバイス、ディスプレイに組み込まれたタッチパッドまたはタッチスクリーン、スクロールホイール、クリックホイール、ダイアル、ボタン、スイッチ、キーパッド、音声コマンド認識システムを伴う音声入力デバイス、マイクロフォン、および他のタイプの入力デバイスを含んでもよい。ユーザインターフェイス入力デバイスは、ユーザが入力デバイスを制御しそれと対話することを可能にするＭｉｃｒｏｓｏｆｔ  Ｋｉｎｅｃｔ（登録商標）モーションセンサ、Ｍｉｃｒｏｓｏｆｔ  Ｘｂｏｘ（登録商標）３６０ゲームコントローラ、ジェスチャおよび音声コマンドを用いる入力を受信するためのインターフェイスを提供するデバイスなど、モーションセンシングおよび／またはジェスチャ認識デバイスも含んでもよい。ユーザインターフェイス入力デバイスは、ユーザから目の動き（たとえば、写真を撮っている間および／またはメニュー選択を行っている間の「まばたき」）を検出し、アイジェスチャを入力デバイス（たとえばＧｏｏｇｌｅ  Ｇｌａｓｓ（登録商標））への入力として変換するＧｏｏｇｌｅ  Ｇｌａｓｓ（登録商標）瞬き検出器などのアイジェスチャ認識デバイスも含んでもよい。また、ユーザインターフェイス入力デバイスは、ユーザが音声コマンドを介して音声認識システム（たとえばＳｉｒｉ（登録商標）ナビゲータ）と対話することを可能にする音声認識感知デバイスを含んでもよい。
【０１８６】
ユーザインターフェイス入力デバイスの他の例は、三次元（３Ｄ）マウス、ジョイスティックまたはポインティングスティック、ゲームパッドおよびグラフィックタブレット、ならびにスピーカ、デジタルカメラ、デジタルカムコーダ、ポータブルメディアプレーヤ、ウェブカム、画像スキャナ、指紋スキャナ、バーコードリーダ３Ｄスキャナ、３Ｄプリンタ、レーザレンジファインダ、および視線追跡デバイスなどの聴覚／視覚デバイスも含んでもよいが、それらに限定されるものではない。また、ユーザインターフェイス入力デバイスは、たとえば、コンピュータ断層撮影、磁気共鳴撮像、ポジションエミッショントモグラフィー、および医療用超音波検査デバイスなどの医療用画像化入力デバイスを含んでもよい。ユーザインターフェイス入力デバイスは、たとえば、ＭＩＤＩキーボード、デジタル楽器などの音声入力デバイスも含んでもよい。
【０１８７】
一般的に、出力デバイスという語の使用は、コンピュータシステム１９００からユーザまたは他のコンピュータに情報を出力するための考えられるすべてのタイプのデバイスおよび機構を含むことを意図している。ユーザインターフェイス出力デバイスは、ディスプレイサブシステム、インジケータライト、または音声出力デバイスなどのような非ビジュアルディスプレイなどを含んでもよい。ディスプレイサブシステムは、陰極線管（ＣＲＴ）、液晶ディスプレイ（ＬＣＤ）またはプラズマディスプレイを使うものなどのフラットパネルデバイス、投影デバイス、タッチスクリーンなどであってもよい。たとえば、ユーザインターフェイス出力デバイスは、モニタ、プリンタ、スピーカ、ヘッドフォン、自動車ナビゲーションシステム、プロッタ、音声出力デバイスおよびモデムなどの、テキスト、グラフィックスおよび音声／映像情報を視覚的に伝えるさまざまな表示デバイスを含んでもよいが、それらに限定されるものではない。
【０１８８】
ストレージサブシステム１９１８は、コンピュータシステム１９００によって使用される情報およびデータを格納するためのリポジトリまたはデータストアを提供する。ストレージサブシステム１９１８は、いくつかの実施形態の機能を提供する基本的なプログラミングおよびデータ構成を格納するための有形の非一時的なコンピュータ読取可能記憶媒体を提供する。処理サブシステム１９０４によって実行されると上述の機能を提供するソフトウェア（たとえばプログラム、コードモジュール、命令）が、ストレージサブシステム１９１８に格納されてもよい。ソフトウェアは、処理サブシステム１９０４の１つ以上の処理ユニットによって実行されてもよい。ストレージサブシステム１９１８はまた、本開示の教示に従って使用されるデータを格納するためのリポジトリを提供してもよい。
【０１８９】
ストレージサブシステム１９１８は、揮発性および不揮発性メモリデバイスを含む１つ以上の非一時的メモリデバイスを含み得る。図１９に示すように、ストレージサブシステム１９１８は、システムメモリ１９１０およびコンピュータ読取可能記憶媒体１９２２を含む。システムメモリ１９１０は、プログラム実行中に命令およびデータを格納するための揮発性主ランダムアクセスメモリ（ＲＡＭ）と、固定命令が格納される不揮発性読出専用メモリ（ＲＯＭ）またはフラッシュメモリとを含む、いくつかのメモリを含み得る。いくつかの実装例において、起動中などにコンピュータシステム１９００内の要素間における情報の転送を助ける基本的なルーチンを含むベーシックインプット／アウトプットシステム（basic input/output system）（ＢＩＯＳ）は、典型的には、ＲＯＭに格納されてもよい。典型的に、ＲＡＭは、処理サブシステム１９０４によって現在動作するようにされ実行されているデータおよび／またはプログラムモジュールを含む。いくつかの実装例において、システムメモリ１９１０は、スタティックランダムアクセスメモリ（ＳＲＡＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）などのような複数の異なるタイプのメモリを含み得る。
【０１９０】
一例として、限定を伴うことなく、図１９に示されるように、システムメモリ１９１０は、ウェブブラウザ、中間層アプリケーション、リレーショナルデータベース管理システム（ＲＤＢＭＳ）などのような各種アプリケーションを含み得る、実行中のアプリケーションプログラム１９１２、プログラムデータ１９１４、およびオペレーティングシステム１９１６を、ロードしてもよい。一例として、オペレーティングシステム１９１６は、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）、Ａｐｐｌｅ  Ｍａｃｉｎｔｏｓｈ（登録商標）および／またはＬｉｎｕｘオペレーティングシステム、さまざまな市場で入手可能なＵＮＩＸ（登録商標）またはＵＮＩＸ系オペレーティングシステム（さまざまなＧＮＵ／Ｌｉｎｕｘオペレーティングシステム、Ｇｏｏｇｌｅ  Ｃｈｒｏｍｅ（登録商標）ＯＳなどを含むがそれらに限定されない）、および／または、ｉＯＳ（登録商標）、Ｗｉｎｄｏｗｓ（登録商標）  Ｐｈｏｎｅ、Ａｎｄｒｏｉｄ（登録商標）  ＯＳ、ＢｌａｃｋＢｅｒｒｙ（登録商標）  ＯＳ、Ｐａｌｍ（登録商標）  ＯＳオペレーティングシステムのようなさまざまなバージョンのモバイルオペレーティングシステムなどを、含み得る。
【０１９１】
コンピュータ読取可能記憶媒体１９２２は、いくつかの実施形態の機能を提供するプログラミングおよびデータ構成を格納することができる。コンピュータ読取可能記憶媒体１９２２は、コンピュータシステム１９００のための、コンピュータ読取可能命令、データ構造、プログラムモジュール、および他のデータのストレージを提供することができる。処理サブシステム１９０４によって実行されると上記機能を提供するソフトウェア（プログラム、コードモジュール、命令）は、ストレージサブシステム１９１８に格納されてもよい。一例として、コンピュータ読取可能記憶媒体１９２２は、ハードディスクドライブ、磁気ディスクドライブ、ＣＤ  ＲＯＭ、ＤＶＤ、Ｂｌｕ−Ｒａｙ（登録商標）ディスクなどの光ディスクドライブ、またはその他の光学媒体のような不揮発性メモリを含み得る。コンピュータ読取可能記憶媒体１９２２は、Ｚｉｐ（登録商標）ドライブ、フラッシュメモリカード、ユニバーサルシリアルバス（ＵＳＢ）フラッシュドライブ、セキュアデジタル（ＳＤ）カード、ＤＶＤディスク、デジタルビデオテープなどを含んでもよいが、それらに限定されるものではない。コンピュータ読取可能記憶媒体１９２２は、フラッシュメモリベースのＳＳＤ、エンタープライズフラッシュドライブ、ソリッドステートＲＯＭなどのような不揮発性メモリに基づくソリッドステートドライブ（ＳＳＤ）、ソリッドステートＲＡＭ、ダイナミックＲＡＭ、スタティックＲＡＭのような揮発性メモリに基づくＳＳＤ、ＤＲＡＭベースのＳＳＤ、磁気抵抗ＲＡＭ（ＭＲＡＭ）ＳＳＤ、およびＤＲＡＭとフラッシュメモリベースのＳＳＤとの組み合わせを使用するハイブリッドＳＳＤも含み得る。
【０１９２】
特定の実施形態において、ストレージサブシステム１９１８は、コンピュータ読取可能記憶媒体１９２２にさらに接続可能なコンピュータ読取可能記憶媒体リーダー１９２０も含み得る。コンピュータ読取可能記憶媒体リーダー１９２０は、ディスク、フラッシュドライブなどのようなメモリデバイスからデータを受け、読取るように構成されてもよい。
【０１９３】
特定の実施形態において、コンピュータシステム１９００は、処理およびメモリリソースの仮想化を含むがこれに限定されない仮想化技術をサポートし得る。たとえば、コンピュータシステム１９００は、１つ以上の仮想マシンを実行するためのサポートを提供することができる。特定の実施形態において、コンピュータシステム１９００は、仮想マシンの構成および管理を容易にするためのハイパーバイザなどのプログラムを実行することができる。各仮想マシンは、メモリ、計算（たとえばプロセッサ、コア）、Ｉ／Ｏ、およびネットワーキングリソースを割り当てられてもよい。各仮想マシンは通常、他の仮想マシンから独立して実行される。仮想マシンは、典型的に、コンピュータシステム１９００によって実行される他の仮想マシンによって実行されるオペレーティングシステムと同じでも異なっていてもよい、それ自体のオペレーティングシステムを実行する。したがって、潜在的に複数のオペレーティングシステムがコンピュータシステム１９００によって同時に実行され得る。
【０１９４】
通信サブシステム１９２４は、他のコンピュータシステムおよびネットワークに対するインターフェイスを提供する。通信サブシステム１９２４は、他のシステムとコンピュータシステム１９００との間のデータの送受のためのインターフェイスとして働く。たとえば、通信サブシステム１９２４は、コンピュータシステム１９００が、１つ以上のクライアントデバイスとの間で情報を送受信するために、インターネットを介して１つ以上のクライアントデバイスへの通信チャネルを確立することを可能にすることができる。
【０１９５】
通信サブシステム１９２４は、有線および／または無線通信プロトコルの両方をサポートすることができる。たとえば、ある実施形態において、通信サブシステム１９２４は、（たとえば、セルラー電話技術、３Ｇ、４ＧもしくはＥＤＧＥ（グローバル進化のための高速データレート）などの先進データネットワーク技術、ＷｉＦｉ（ＩＥＥＥ８０２．ＸＸファミリー規格、もしくは他のモバイル通信技術、またはそれらのいずれかの組み合わせを用いて）無線音声および／またはデータネットワークにアクセスするための無線周波数（ＲＦ）送受信機コンポーネント、グローバルポジショニングシステム（ＧＰＳ）受信機コンポーネント、および／または他のコンポーネントを含み得る。いくつかの実施形態において、通信サブシステム１９２４は、無線インターフェイスに加えてまたはその代わりに、有線ネットワーク接続（たとえばＥｔｈｅｒｎｅｔ）を提供することができる。
【０１９６】
通信サブシステム１９２４は、さまざまな形式でデータを受信し、送信することができる。たとえば、いくつかの実施形態において、通信サブシステム１９２４は、構造化データフィードおよび／または非構造化データフィード１９２６、イベントストリーム１９２８、イベントアップデート１９３０などの形式で入力通信を受信することができる。たとえば、通信サブシステム１９２４は、ソーシャルメディアネットワークおよび／またはＴｗｉｔｔｅｒ（登録商標）フィード、Ｆａｃｅｂｏｏｋ（登録商標）アップデート、Ｒｉｃｈ  Ｓｉｔｅ  Ｓｕｍｍａｒｙ（ＲＳＳ）フィードなどのウェブフィード、および／または１つ以上の第三者情報源からのリアルタイムアップデートなどのような他の通信サービスのユーザから、リアルタイムでデータフィード１９２６を受信（または送信）するように構成されてもよい。
【０１９７】
特定の実施形態において、通信サブシステム１９２４は、連続データストリームの形式でデータを受信するように構成されてもよく、当該連続データストリームは、明確な終端を持たない、本来は連続的または無限であり得るリアルタイムイベントのイベントストリーム１９２８および／またはイベントアップデート１９３０を含んでもよい。連続データを生成するアプリケーションの例としては、たとえば、センサデータアプリケーション、金融株式相場表示板、ネットワーク性能測定ツール（たとえばネットワークモニタリングおよびトラフィック管理アプリケーション）、クリックストリーム解析ツール、自動車交通モニタリングなどを挙げることができる。
【０１９８】
通信サブシステム１９２４は、コンピュータシステム１９００からのデータをその他のコンピュータシステムまたはネットワークに伝えるように構成されてもよい。このデータは、構造化および／または非構造化データフィード１９２６、イベントストリーム１９２８、イベントアップデート１９３０などのような各種異なる形式で、コンピュータシステム１９００に結合された１つ以上のストリーミングデータソースコンピュータと通信し得る１つ以上のデータベースに、伝えることができる。
【０１９９】
コンピュータシステム１９００は、ハンドヘルドポータブルデバイス（たとえばｉＰｈｏｎｅ（登録商標）セルラーフォン、ｉＰａｄ（登録商標）コンピューティングタブレット、ＰＤＡ）、ウェアラブルデバイス（たとえばＧｏｏｇｌｅ  Ｇｌａｓｓ（登録商標）ヘッドマウントディスプレイ）、パーソナルコンピュータ、ワークステーション、メインフレーム、キオスク、サーバラック、またはその他のデータ処理システムを含む、さまざまなタイプのもののうちの１つであればよい。常に変化するコンピュータおよびネットワークの性質のため、図１９に示されるコンピュータシステム１９００の記載は、単に具体的な例を意図している。図３に示されるシステムよりも多くのコンポーネントまたは少ないコンポーネントを有するその他多くの構成が可能である。本明細書における開示および教示に基づいて、当業者は、さまざまな実施形態を実現するための他の態様および／または方法を理解するであろう。
【０２００】
特定の実施形態について説明したが、さまざまな修正、変更、代替構成、および均等物が可能である。実施形態は、特定のデータ処理環境内の動作に限定されず、複数のデータ処理環境内で自由に動作することができる。さらに、実施形態を特定の一連のトランザクションおよびステップを使用して説明したが、これが限定を意図しているのではないことは当業者には明らかであるはずである。いくつかのフローチャートは動作を逐次的プロセスとして説明しているが、これらの動作のうちの多くは並列または同時に実行できる。加えて、動作の順序を再指定してもよい。プロセスは図面に含まれない追加のステップを有し得る。上記実施形態の各種特徴および側面は、個別に使用されてもよく、またはともに使用されてもよい。
【０２０１】
さらに、特定の実施形態をハードウェアとソフトウェアとの特定の組み合わせを用いて説明したが、ハードウェアとソフトウェアとの他の組み合わせも可能であることが理解されるはずである。特定の実施形態は、ハードウェアでのみ、またはソフトウェアでのみ、またはそれらの組み合わせを用いて実現されてもよい。本明細書に記載されたさまざまなプロセスは、同じプロセッサまたは任意の組み合わせの異なるプロセッサ上で実現できる。
【０２０２】
デバイス、システム、コンポーネントまたはモジュールが特定の動作または機能を実行するように構成されると記載されている場合、そのような構成は、たとえば、動作を実行する電子回路を設計すること、プログラミング可能な電子回路（マイクロプロセッサなど）をプログラミングすることにより、たとえば非一時的なメモリ媒体に格納されたコードまたは命令またはその任意の組み合わせを実行するようにプログラミングされたコンピュータ命令もしくはコード、またはプロセッサもしくはコアを実行するなどして、動作を実行するように電子回路を設計することによって、動作を実行すること、またはそれらの任意の組み合わせによって達成され得る。プロセスは、プロセス間通信のための従来の技術を含むがこれに限定されないさまざまな技術を使用して通信することができ、異なる対のプロセスは異なる技術を使用してもよく、同じ対のプロセスは異なる時間に異なる技術を使用してもよい。
【０２０３】
本開示では特定の詳細事項を示すことにより実施形態が十分に理解されるようにしている。しかしながら、実施形態はこれらの特定の詳細事項がなくとも実施し得るものである。たとえば、周知の回路、プロセス、アルゴリズム、構成、および技術は、実施形態が曖昧にならないようにするために不必要な詳細事項なしで示している。本明細書は例示的な実施形態のみを提供し、他の実施形態の範囲、適用可能性、または構成を限定することを意図しているのではない。むしろ、実施形態の上記説明は、各種実施形態を実現することを可能にする説明を当業者に提供する。各種変更は要素の機能および構成の範囲内で行うことができる。
【０２０４】
したがって、明細書および図面は、限定的な意味ではなく例示的なものとみなされるべきである。しかしながら、請求項に記載されているより広範な精神および範囲から逸脱することなく、追加、削減、削除、ならびに他の修正および変更がこれらになされ得ることは明らかであろう。このように、特定の実施形態を説明してきたが、これらは限定を意図するものではない。さまざまな修正および均等物は以下の請求項の範囲に含まれる。さまざまな修正は、開示された特徴の関連の任意の組み合わせを含む。
【図１】
2021501382.tif 000003
【図２】
2021501382.tif 000004
【図３】
2021501382.tif 000005
【図４】
2021501382.tif 000006
【図５】
2021501382.tif 000007
【図６】
2021501382.tif 000008
【図７】
2021501382.tif 000009
【図８】
2021501382.tif 000010
【図９】
2021501382.tif 000011
【図１０】
2021501382.tif 000012
【図１１】
2021501382.tif 000013
【図１２】
2021501382.tif 000014
2021501382.tif 000015
【図１４】
2021501382.tif 000016
【図１５】
2021501382.tif 000017
【図１６Ａ】
2021501382.tif 000018
【図１６Ｂ】
2021501382.tif 000019
【図１７】
2021501382.tif 000020
【図１８】
2021501382.tif 000021
【図１９】
2021501382.tif 000022
【手続補正書】
【提出日】令和2年4月28日(2020.4.28)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
方法であって、
コンピュータシステムが、入力画像から、グラフィックユーザインターフェイス（ＧＵＩ）のＧＵＩ画面を示すＧＵＩ画面画像を検出するステップと、
前記コンピュータシステムが、第１のテキストコンテンツアイテムを含む前記ＧＵＩ画面画像の第１の領域を検出するステップと、
前記コンピュータシステムが、前記ＧＵＩ画面画像内の前記第１の領域の位置を判断するステップと、
前記コンピュータシステムが、前記第１の領域のコンテンツを、テキストコンテンツを含まないプレースホルダに置き換えるステップと、
前記コンピュータシステムが、前記ＧＵＩ画面画像の第２の領域内に位置する第１のユーザインターフェイス（ＵＩ）コンポーネントを検出するステップとを含み、前記第２の領域は前記プレースホルダを有する前記第１の領域を含み、
前記コンピュータシステムが、前記ＧＵＩ画面画像内の前記第１のＵＩコンポーネントの位置を判断するステップと、
前記コンピュータシステムが、機械学習ベースの分類器を用いて、前記第１のＵＩコンポーネントのＵＩコンポーネントタイプを判断するステップとを含み、前記機械学習ベースの分類器は、複数の訓練画像を含む訓練データを用いて訓練され、前記複数の訓練画像のうちの各訓練画像はＵＩコンポーネントを含み、前記訓練データはさらに、各訓練画像ごとに、前記訓練画像内の前記ＵＩコンポーネントのＵＩコンポーネントタイプを特定する情報を含み、
前記コンピュータシステムが、前記ＧＵＩを実現するためのコードを生成するために使用可能なＧＵＩモデルを生成するステップを含み、前記ＧＵＩモデルは、前記第１のＵＩコンポーネントの情報と、前記第１のテキストコンテンツアイテムの情報とを含み、前記第１のＵＩコンポーネントの情報は、前記第１のＵＩコンポーネントについて判断した前記ＵＩコンポーネントタイプと、前記ＧＵＩ画面画像内の前記第１のＵＩコンポーネントの位置とを示す情報を含む、方法。
【請求項２】
前記第１のＵＩコンポーネントを検出するステップは、前記機械学習ベースの分類器が前記ＧＵＩ画面画像内の前記第１のＵＩコンポーネントを検出するステップを含み、
前記訓練データはさらに、各訓練画像ごとに、前記訓練画像内のＵＩコンポーネントの位置を含む、請求項１に記載の方法。
【請求項３】
前記ＧＵＩ画面画像内の前記第１の領域の位置および前記ＧＵＩ画面画像内の前記第１のＵＩコンポーネントの位置に基づいて、前記第１のテキストコンテンツアイテムとともに前記第１のＵＩコンポーネントをグルーピングするステップをさらに含み、
前記ＧＵＩモデルを生成するステップはさらに、前記ＧＵＩモデルに、前記グルーピングを示す情報を含めるステップを含む、請求項１または２に記載の方法。
【請求項４】
前記コンピュータシステムが、第２のテキストコンテンツアイテムを含む前記ＧＵＩ画面画像の第３の領域を検出するステップと、
前記コンピュータシステムが、前記ＧＵＩ画面画像内の前記第３の領域の位置を判断するステップと、
前記コンピュータシステムが、前記ＧＵＩ画面画像内に位置する第２のＵＩコンポーネントを検出するステップと、
前記ＧＵＩ画面画像内の前記第２のＵＩコンポーネントの位置を判断するステップと、
前記機械学習ベースの分類器を用いて、前記第２のＵＩコンポーネントのＵＩコンポーネントタイプを判断するステップと、
前記第１の領域の前記位置、前記第３の領域の前記位置、前記第１のＵＩコンポーネントの前記ＵＩコンポーネントタイプおよび位置、ならびに前記第２のＵＩコンポーネントの前記ＵＩコンポーネントタイプおよび位置に基づいて、前記第１のテキストコンテンツアイテム、前記第２のテキストコンテンツアイテム、前記第１のＵＩコンポーネント、および前記第２のＵＩコンポーネントをグルーピングするステップと、
前記グルーピングに基づいて前記ＧＵＩ画面のレイアウトを決定するステップとを含み、
前記ＧＵＩモデルを生成するステップはさらに、前記ＧＵＩモデルに、前記グルーピングおよび前記ＧＵＩ画面の前記レイアウトを示す情報を含めるステップを含む、請求項１〜３のいずれか１項に記載の方法。
【請求項５】
前記ＧＵＩ画面画像内の前記第３の領域の前記位置に基づいて、前記第２のテキストコンテンツは前記ＧＵＩ画面画像内のいずれのＵＩコンポーネントにも対応付けられていないと判断するステップと、
前記第２のテキストコンテンツアイテムはアクションを示すと判断するステップとをさらに含み、
前記ＧＵＩモデルを生成するステップは、前記ＧＵＩモデルにおいて、前記ＧＵＩ画面画像の前記第３の領域内の前記第２のテキストコンテンツアイテムはクリッカブルテキストであることを示すステップを含み、前記第２のテキストコンテンツのクリックは前記アクションを開始させる、請求項４に記載の方法。
【請求項６】
前記第１の領域は背景上の前記第１のテキストコンテンツアイテムを含み、前記方法はさらに、
前記ＧＵＩ画面画像の前記第１の領域内の画素の強度値に基づいてヒストグラムを生成するステップと、
前記ＧＵＩ画面画像の前記第１の領域内の、前記第１のテキストコンテンツアイテムに対応する画素の数と前記背景に対応する画素の数とに基づいて、前記ヒストグラムから、前記第１のテキストコンテンツアイテムの画素の強度値は前記背景の画素の強度値よりも高いと判断するステップと、
前記第１の領域内の画素の強度値を反転させるステップとを含み、前記反転により、前記第１のテキストコンテンツアイテムの画素の強度値は、前記第１の領域内の前記背景の画素の強度値よりも低くなり、
前記反転の実施後に前記第１の領域内の前記第１のテキストコンテンツアイテムを認識するステップを含む、請求項１〜５のいずれか１項に記載の方法。
【請求項７】
前記ヒストグラムを生成する前に、前記第１の領域内の各画素の強度値に基づいて、前記ＧＵＩ画面画像の前記第１の領域を、ＲＧＢサブ画像から２値サブ画像に変換するステップをさらに含む、請求項６に記載の方法。
【請求項８】
前記プレースホルダは画素の予め定められたパターンを含み、
前記第１のＵＩコンポーネントのＵＩコンポーネントタイプを判断するステップは、前記第２の領域内の前記プレースホルダの存在と前記プレースホルダ内の前記画素の予め定められたパターンとに基づいて、前記ＧＵＩ画面画像の前記第２の領域を分類するステップを含む、請求項１〜７のいずれか１項に記載の方法。
【請求項９】
前記プレースホルダは、前記第１の領域内の前記第１のテキストコンテンツアイテムの位置の境界を前記ＧＵＩ画面画像から判断することを可能にする画素の予め定められたパターンである、請求項１〜８のいずれか１項に記載の方法。
【請求項１０】
前記画素の予め定められたパターンの画素値は、予め定められた値、または前記第１の領域の背景内の画素の画素値を含む、請求項９に記載の方法。
【請求項１１】
前記ＧＵＩモデルに基づいて前記ＧＵＩの１つ以上のインプリメンテーションを生成するステップをさらに含む、請求項１〜１０のいずれか１項に記載の方法。
【請求項１２】
前記ＧＵＩモデルに基づいて前記ＧＵＩの１つ以上のインプリメンテーションを生成するステップは、
前記ＧＵＩモデルを用いて、第１のプラットフォームのための前記ＧＵＩの第１のインプリメンテーションを生成するステップと、
前記ＧＵＩモデルを用いて、第２のプラットフォームのための前記ＧＵＩの第２のインプリメンテーションを生成するステップとを含み、前記第２のプラットフォームは前記第１のプラットフォームと異なる、請求項１１に記載の方法。
【請求項１３】
前記ＧＵＩモデルに基づいて前記ＧＵＩの１つ以上のインプリメンテーションを生成するステップは、
前記ＧＵＩモデルを用いて、第１のプログラミング言語で前記ＧＵＩの第１のインプリメンテーションを生成するステップと、
前記ＧＵＩモデルを用いて、第２のプログラミング言語で前記ＧＵＩの第２のインプリメンテーションを生成するステップとを含み、前記第２のプログラミング言語は前記第１のプログラミング言語と異なる、請求項１１または１２に記載の方法。
【請求項１４】
前記ＧＵＩモデルに基づいて前記ＧＵＩの１つ以上のインプリメンテーションを生成するステップは、
前記ＧＵＩモデルと１つ以上のコード生成テンプレートとを用いて前記ＧＵＩの１つ以上のインプリメンテーションを生成するステップを含み、各コード生成テンプレートはプラットフォームまたはプログラミング言語に対応付けられている、請求項１１に記載の方法。
【請求項１５】
前記ＧＵＩモデルを生成するステップは、前記ＧＵＩモデルの情報を、ＪａｖａＳｃｒｉｐｔオブジェクト表記（ＪＳＯＮ）フォーマットで格納するステップを含む、請求項１〜１４のいずれか１項に記載の方法。
【請求項１６】
前記機械学習ベースの分類器は、画像ヒストグラムベースの非線形サポートベクターマシン分類器、または、人工ニューラルネットワークベースの分類器を含む、請求項１〜１５のいずれか１項に記載の方法。
【請求項１７】
前記ＧＵＩモデルに関するユーザフィードバックを受けるステップをさらに含み、前記ユーザフィードバックは、
前記ＧＵＩモデルにおいて前記第１のＵＩコンポーネントについて指定された前記ＵＩコンポーネントタイプの代わりに前記第１のＵＩコンポーネントに対応付けられる新たなＵＩコンポーネントタイプを特定する情報、または、
ＧＵＩ画面内に存在するが前記ＧＵＩモデルに含まれない新たなＵＩコンポーネントを特定する情報、および前記新たなＵＩコンポーネントのＵＩコンポーネントタイプを示す情報を含み、
前記ユーザフィードバックに基づいて前記機械学習ベースの分類器を再訓練するステップをさらに含む、請求項１〜１６のいずれか１項に記載の方法。
【請求項１８】
前記ユーザフィードバックはさらに、前記第１のＵＩコンポーネントまたは前記新たなＵＩコンポーネントのサブ画像を含み、前記方法はさらに、
前記複数の訓練画像から特徴を抽出するステップと、
前記複数の訓練画像から抽出した前記特徴を、多次元空間内のデータポイントにマッピングするステップとを含み、前記データポイントは、前記多次元空間内の一組のクラスタを形成し、
前記第１のＵＩコンポーネントまたは前記新たなＵＩコンポーネントの前記サブ画像から特徴を抽出するステップと、
前記第１のＵＩコンポーネントまたは前記新たなＵＩコンポーネントの前記サブ画像から抽出した特徴を、前記多次元空間内のデータポイントにマッピングするステップと、
前記第１のＵＩコンポーネントまたは前記新たなＵＩコンポーネントの前記サブ画像に対応する前記データポイントと、前記一組のクラスタの各クラスタの中心との間の距離を判断するステップと、
前記距離がしきい値未満であるという判断に応じて、前記第１のＵＩコンポーネントまたは前記新たなＵＩコンポーネントの前記サブ画像を前記訓練データに含めるステップとを含む、請求項１７に記載の方法。
【請求項１９】
請求項１〜１８のいずれか１項に記載の方法を１つ以上のプロセッサに実行させるためのコンピュータ読取可能プログラム。
【請求項２０】
システムであって、
１つ以上のプロセッサと、
前記１つ以上のプロセッサに結合されたメモリとを備え、前記メモリは、前記１つ以上のプロセッサによって実行されると前記システムに、
入力画像から、グラフィックユーザインターフェイス（ＧＵＩ）のＧＵＩ画面を示すＧＵＩ画面画像を検出することと、
第１のテキストコンテンツアイテムを含む前記ＧＵＩ画面画像の第１の領域を検出することと、
前記ＧＵＩ画面画像内の前記第１の領域の位置を判断することと、
前記第１の領域のコンテンツを、テキストコンテンツを含まないプレースホルダに置き換えることと、
前記ＧＵＩ画面画像の第２の領域内に位置する第１のユーザインターフェイス（ＵＩ）コンポーネントを検出することとを実行させ、前記第２の領域は前記プレースホルダを有する前記第１の領域を含み、
前記ＧＵＩ画面画像内の前記第１のＵＩコンポーネントの位置を判断することと、
機械学習ベースの分類器を用いて、前記第１のＵＩコンポーネントのＵＩコンポーネントタイプを判断することとを実行させ、前記機械学習ベースの分類器は、複数の訓練画像を含む訓練データを用いて訓練され、前記複数の訓練画像のうちの各訓練画像はＵＩコンポーネントを含み、前記訓練データはさらに、各訓練画像ごとに、前記訓練画像内の前記ＵＩコンポーネントのＵＩコンポーネントタイプを特定する情報を含み、
前記ＧＵＩを実現するためのコードを生成するために使用可能なＧＵＩモデルを生成することを実行させ、前記ＧＵＩモデルは、前記第１のＵＩコンポーネントの情報と、前記第１のテキストコンテンツアイテムの情報とを含み、前記第１のＵＩコンポーネントの情報は、前記第１のＵＩコンポーネントについて判断した前記ＵＩコンポーネントタイプと、前記ＧＵＩ画面画像内の前記第１のＵＩコンポーネントの位置とを示す情報を含む、システム。
【国際調査報告】
2021501382.tif 000023
2021501382.tif 000024