詳細な説明
デプス画像および拡張現実画像は、モバイル機器およびオペレーティングシステム間で益々普及しているカメラの適用例である。しかしながら、このような画像の撮影、保存、共有、および編集における標準化がされていない。カメラアプリケーションを使用して作成されたデプス画像は、その他のアプリケーションで編集できない場合がある。
本明細書において説明する手法は、1つの連結ファイルコンテナに画像メタデータおよび/または追加画像を格納するために様々なクライアントデバイスによって用いられるカメラフレームワーク内で均一かつ整合性のあるフレームワークを提供する。いずれのアプリケーションも、本明細書において説明する手法を用いて格納される画像にアクセスして当該画像を見るおよび/または編集することができる。そのため、本明細書において説明する手法は、デプス画像および/または拡張現実画像を撮影、保存、共有、または編集するときのアプリケーション間および/またはデバイス間のインターオペラビリティを改善することができる。
これらの手法は、実装が容易で、かつ、すばやく解析でき、また、モバイル機器カメラを含むカメラにおいて用いられている様々なオペレーティングシステム間、ならびにモバイルコンピューティングデバイスソフトウェアおよびパーソナルコンピューティングデバイスソフトウェアを含むソフトウェアにおいて用いられている様々なオペレーティングシステム間で既存の画像形式を拡張できる。これらの手法によって、たとえば、深度情報、デバイスカメラの撮像モデルなどのデバイス関連のメタデータを、任意の数の副画像とともに、撮影画像の画像メタデータに格納することが可能になる。格納されたメタデータおよび副画像は、任意の画像表示アプリケーションまたは画像編集アプリケーションによって利用することができる。
図1では、同様の参照番号を用いて同様の要素を示している。「156a」など、参照番号に続く文字は、その特定の参照番号を有する要素をこのテキストが具体的に指していることを示す。「156」など、文字が後に続かないテキストに含まれる参照番号は、図面においてこの参照番号を持ついずれかまたはすべて要素を指している(たとえば、テキストにある「156」は、図にある「156a」および/または「156b」という参照番号を指している)。
図1は、本明細書において説明するいくつかの実施態様において用いられ得る例示的なネットワーク環境100のブロック図である。いくつかの実施態様では、ネットワーク環境100は、1つ以上のサーバシステム、たとえば、図1の例のサーバシステム102を含む。サーバシステム102は、たとえば、ネットワーク130と通信を行うことができる。サーバシステム102は、サーバ装置104と、記憶装置(図示せず)とを備え得る。サーバシステム102は、1つ以上の画像ファイル106bを格納してもよい。いくつかの実施態様では、サーバ装置104は、画像管理アプリケーション156bを提供してもよい。画像管理アプリケーション156bは、それぞれの画像ファイル106bに、当該画像ファイル106bを提供したユーザの許可を得てアクセスしてもよい。
また、ネットワーク環境100は、1つ以上のクライアントデバイス、たとえば、クライアントデバイス120、122、124、および126を含み得る。クライアントデバイス120、122、124、および126は、互いに通信を行ってもよく、ならびに/またはネットワーク130を介してサーバシステム102と通信を行ってもよい。ネットワーク130は、インターネット、ローカルエリアネットワーク(LAN)、ワイヤレスネットワーク、スイッチまたはハブ接続などのうちの1つ以上を含む任意の種類の通信ネットワークであり得る。いくつかの実施態様では、ネットワーク130は、たとえば、ピアツーピア無線プロトコル(たとえば、Bluetooth(登録商標)、Wi-Fi Directなど)などを利用したデバイス間のピアツーピア通信を含み得る。2つのクライアントデバイス120および122間のピアツーピア通信の一例を、矢印132によって示している。
説明を容易にするために、図1には、サーバシステム102およびサーバ装置104からなる1つのブロックを示し、クライアントデバイス120、122、124、および126の4つのブロックを示している。サーバブロック102および104は、複数のシステム、複数のサーバ装置、および複数のネットワークデータベースを表してもよく、これらのブロックは、図示する構成とは異なる構成で提供され得る。たとえば、サーバシステム102は、その他のサーバシステムとネットワーク130を介して通信可能な複数のサーバシステムを表し得る。いくつかの実施態様では、サーバシステム102は、たとえば、クラウドホスティングサーバを含み得る。いくつかの例では、1つ以上の記憶装置は、サーバ装置104とは別個の、サーバ装置104およびその他のサーバシステムとネットワーク130を介して通信可能なサーバシステムブロック(複数可)で提供され得る。
任意の数のクライアントデバイスがあってもよい。各クライアントデバイスは、任意の種類の電子機器、たとえば、デスクトップコンピュータ、ラップトップコンピュータ、ポータブルまたはモバイル機器、携帯電話、スマートフォン、タブレットコンピュータ、テレビ、TVセットトップボックスまたは娯楽機器、ウェアラブルデバイス(たとえば、表示用眼鏡またはゴーグル、腕時計、ヘッドセット、アームバンド、装身具など)、PDA(Personal Digital Assistant)、メディアプレーヤ、ゲーム機などであり得る。また、いくつかのクライアントデバイスは、たとえば、クライアントデバイスのカメラを用いて撮影された、またはその他の方法、たとえば、サーバから画像ファイルをダウンロードすることによって取得されたローカルな画像ファイル106aを含んでもよい。いくつかの実施態様では、ネットワーク環境100は、図示した構成要素のすべてを有さなくてもよく、および/または、本明細書に記載の要素の代わりにまたはそれらに加えて、その他の種類の要素を含むその他の要素を有してもよい。
様々な実施態様では、エンドユーザU1、U2、U3、およびU4は、それぞれのクライアントデバイス120、122、124、および126を利用してサーバシステム102および/または互いに通信を行ってもよい。いくつかの例では、ユーザU1、U2、U3、およびU4は、サーバシステム102上に実装されたネットワークサービス、たとえば、ソーシャルネットワークサービス、画像ホスティングサービス、またはその他の種類のネットワークサービスを介してそれぞれのクライアントデバイスおよび/またはサーバシステム102上で動作するアプリケーションを介して、互いにやり取りを行ってもよい。たとえば、それぞれのクライアントデバイス120、122、124、および126は、1つ以上のサーバシステム、たとえば、システム102との間でデータを通信してもよい。
いくつかの実施態様では、通信されたコンテンツまたはサーバシステム102および/もしくはネットワークサービスにアップロードされた共有コンテンツを各クライアントデバイスが受信できるよう、サーバシステム102は、適切なデータをクライアントデバイスに提供してもよい。いくつかの例では、ユーザU1~U4は、音声会議もしくは映像会議、音声チャット、動画チャット、もしくはテキストチャット、またはその他の通信モードもしくはアプリケーションを介してやり取りすることができる。サーバシステム102によって実装されるネットワークサービスは、ユーザに様々な通信を行わせたり、リンクや関連付けを行わせたり、画像、テキスト、動画、音声、ならびにその他の種類のコンテンツなど、共有コンテンツをアップロードならびに投稿させたり、および/またはその他の機能を行わせたりするシステムを含み得る。たとえば、クライアントデバイスは、クライアントデバイスに送信またはストリーム配信され、ならびにサーバおよび/もしくはネットワークサービスを介して異なるクライアントデバイスから(もしくは、当該異なるクライアントデバイスから直接)発信された、もしくはサーバシステムおよび/もしくはネットワークサービスから発信されたコンテンツの投稿などの受信データを表示することができる。いくつかの実施態様では、クライアントデバイスは、たとえば上述したクライアントデバイス間のピアツーピア通信を利用して、互いに直接通信を行うことができる。いくつかの実施態様では、「ユーザ」とは、1つ以上のプログラム仮想エンティティ、およびシステムまたはネットワークと接続している人を含み得る。
いくつかの実施態様では、クライアントデバイス120、122、124、および/または126のうちのいずれも、1つ以上のアプリケーションを提供することができる。たとえば、図1に示すように、クライアントデバイス120は、カメラアプリケーション152および画像管理アプリケーション156aを提供してもよい。また、クライアントデバイス122~126が同様のアプリケーションを提供してもよい。たとえば、カメラアプリケーション152は、各クライアントデバイスのユーザ(たとえば、ユーザU1~U4)にクライアントデバイスの1つ以上のカメラを使って画像を撮影する機能を提供してもよい。たとえば、カメラアプリケーション152は、クライアントデバイス120上で動作するソフトウェアアプリケーションであってもよい。
いくつかの実施態様では、カメラアプリケーション152は、ユーザインターフェースを提供してもよい。たとえば、ユーザインターフェースによって、クライアントデバイス120のユーザが画像撮影モード、たとえば、静止画像(またはフォト)モード、バーストモード(たとえば、短時間で連続した複数の画像を撮影する)、動画像モード、動画モード、HDR(High Dynamic Range)モードなどを選択することが可能になる。いくつかの実施態様では、図4および図5を参照して本明細書において説明する方法を、カメラアプリケーション152が(たとえば、一部またはすべて)実装してもよい。いくつかの実施態様では、図4および図5を参照して本明細書において説明する方法を、画像管理アプリケーション156aおよび/または画像管理アプリケーション156bが(たとえば、一部またはすべて)実装してもよい。
クライアントデバイス120のハードウェアおよび/またはソフトウェアを用いてカメラアプリケーション152および画像管理アプリケーション156aを実装してもよい。それぞれ異なる実施態様では、画像管理アプリケーション156aは、たとえば、クライアントデバイス120~124のうちのいずれかのクライアントデバイス上で実行されるスタンドアロンアプリケーションであってもよく、または、サーバシステム102上に提供された画像管理アプリケーション156bと連動して動作してもよい。画像管理アプリケーション156によって、ユーザが画像、たとえば画像ファイル106を見るおよび/または編集することが可能になってもよい。
ユーザの許可がある場合、画像管理アプリケーション156は、画像をサーバ上に格納(たとえば、バックアップ)する自動機能、画像を編集する自動機能、画像を自動的に強調する自動機能、画像の手ぶれ補正を行う自動機能、画像にある1つ以上の特徴、たとえば、顔、体、オブジェクトの種類、動きの種類などを認識する自動機能など、1つ以上の自動機能を実行してもよい。
また、画像管理アプリケーション156は、ユーザインターフェースに(たとえば、1枚の画像を含むワンナップ表示、複数の画像を含むグリッド表示などで)画像を表示する画像管理機能、画像を編集(たとえば、画像設定を調整する、フィルタを適用する、画像の焦点を変更する、ポートレートエフェクトを適用する、ぼけエフェクトを適用する、その他のエフェクトを適用する、パン/傾き操作を用いて3次元画像を見る、画像セグメンテーション手法を用いて画像からオブジェクトを抽出するなど)画像管理機能、(たとえば、クライアントデバイス120~126の)他のユーザと画像を共有する画像管理機能、画像をアーカイブに入れる(たとえば、主要ユーザインターフェースに現れないように画像を格納する)画像管理機能、画像ベースの作品(たとえば、コラージュ、フォトブック、アニメーション、ストーリー、ビデオループなど、モーションベースのアーティファクト)を生成する画像管理機能などの画像管理機能を提供してもよい。いくつかの実施態様では、画像ベースの作品を生成するために、画像管理アプリケーション156は、画像または画像に格納された画像メタデータに対応付けられた1つ以上のラベルを利用してもよい。
クライアントデバイス120、122、124、ならびに/または126上のユーザインターフェースによって、画像、動画、データ、およびその他のコンテンツ、および通信、プライバシー設定、通知、およびその他のデータを含む、ユーザコンテンツならびにその他のコンテンツの表示を可能にすることができる。このようなユーザインターフェースを、クライアントデバイス上のソフトウェア、サーバ装置上のソフトウェア、ならびに/またはサーバ装置104上で実行されているクライアントソフトウェアとサーバソフトウェアとの組合せ、たとえば、サーバシステム102と通信中のアプリケーションソフトウェアもしくはクライアントソフトウェアを用いて表示することができる。このユーザインターフェースを、クライアントデバイスまたはサーバ装置の表示装置、たとえば、タッチスクリーンもしくはその他のディスプレイ画面、プロジェクタなどで表示することができる。いくつかの実施態様では、サーバシステム上で動作するアプリケーションプログラムは、クライアントデバイスと通信を行って当該クライアントデバイスにおけるユーザ入力を受信し、クライアントデバイスにおける画像データ、音声データなどのデータを出力することができる。
いくつかの実施態様では、サーバシステム102および/または1つ以上のクライアントデバイス120~126のうちのいずれも、通信アプリケーションプログラムを提供し得る。この通信プログラムによって、システム(たとえば、クライアントデバイスまたはサーバシステム)は、その他のデバイスとの通信についてのオプションを提供できるようになるであろう。通信プログラムは、サーバシステムまたはクライアントデバイスに対応付けられた表示装置上に表示される1つ以上の関連するユーザインターフェースを提供し得る。ユーザインターフェースは、通信モード、通信するユーザまたはデバイスなどを選択できる様々なオプションをユーザに提供してもよい。いくつかの例では、通信プログラムは、たとえば同報通信エリアにコンテンツの投稿を送信もしくは同報通信できるオプションを提供し、および/またはコンテンツの投稿がデバイスによって受信されたことを示す通知、たとえば、投稿用の規定の同報通信エリアにデバイスがあることを示す通知を出力できる。通信プログラムは、送信したコンテンツの投稿および受信したコンテンツの投稿を、たとえば様々な形式で表示または出力し得る。コンテンツの投稿は、たとえば、他のユーザと共有している画像を含み得る。
本明細書において説明する特徴のその他の実施態様は、任意の種類のシステムおよび/またはサービスを利用することができる。たとえば、ソーシャルネットワーキングサービスの代わりまたはソーシャルネットワーキングサービスに加えて、その他のネットワーク接続された(たとえば、インターネットに接続された)サービスを利用できる。いずれの種類の電子機器も、本明細書において説明する特徴を利用することができる。いくつかの実施態様は、本明細書において説明する1つ以上の特徴を、コンピュータネットワークから切断されたもしくはコンピュータネットワークに断続的に接続された1つ以上のクライアント装置またはサーバ装置上で提供し得る。いくつかの例では、表示装置を備えるまたは表示装置が接続されたクライアントデバイスは、クライアントデバイスにローカルな記憶装置上に格納された、たとえば、通信ネットワーク上で以前に受信したデータ(たとえば、コンテンツ)を表示し得る。
図2Aは、カメラを用いた画像撮影の例を示す図である。図2Aに示すように、レンズ202を有するカメラを用いて画像を撮影してもよい。図2Aではレンズ202を示しているが、カメラは、たとえば、イメージセンサ、焦点距離調整装置など、図2Aに示されていないその他の要素を含んでもよい。画像撮影時、カメラの焦点は、焦点面208上にある。撮影画像は、レンズ202からそれぞれ異なる距離(カメラから異なる距離)離れたところに複数のオブジェクトを含んでもよい。たとえば、撮影画像は、近景(near plane)206、焦点面208、遠景(far plane)210、および任意の中景(intermediate plane)に1つ以上のオブジェクトを含んでもよい。
画像撮影のために用いられる1つのデバイス(たとえば、クライアントデバイス120~126のうちのいずれか)は、1つ以上のカメラまたは1つ以上のイメージセンサを備えてもよい。たとえば、あるデバイスは、カラー画像を撮影するために使用できる1つ以上のカメラ(たとえば、RGBカメラ)、赤外線カメラなどを備えてもよい。たとえば、当該1つ以上のカメラは、望遠カメラ、広角カメラなど、それぞれ異なる構成を有するカメラを含んでもよい。カメラのその他の構成が使われてもよい。各カメラは、対応する画像を生成してもよい。いくつかの実施態様では、デバイスが備えるそれぞれ異なるカメラから取得した画像データを合成して主画像を取得してもよい。たとえば、デバイスの画面上に主画像を表示してもよい。さらには、本明細書に記載の手法によって、たとえば、JPEG、PNG、TIFF、HEIFなどの画像形式で主画像を格納してもよい。さらには、本明細書に記載の手法によって、図3を参照して後述するように、個々のカメラから取得した1つ以上の画像をコンテナに格納してもよい。
図2Bは、カメラを用いて撮影された例示的な画像220および対応するデプス画像230を示す図である。たとえば、当該デプス画像は、赤外線カメラまたはその他の深度センサを用いて撮影されてもよい。別の例では、当該デプス画像は、画像220を撮影したカメラを用いて撮影された画像データに基づいて生成されてもよい。
図2Bに見られるように、画像220には、背景に見られる葉よりもカメラの近くに花を含むシーンが写されている。これに応じて、デプス画像230では、カメラの近くにある花びらの濃淡は、カメラから離れたところにあるその他の花びら、およびカメラよりもさらに離れたところにある葉の濃淡よりも濃く見える。デプス画像230では、濃い濃淡は、カメラにより近いところにあるシーンのオブジェクトに対応し、薄い濃淡は、カメラからさらに離れたところにあるオブジェクトに対応する。
デプス画像230は、対応する画像(たとえば、画像220)に見られるオブジェクトまでのカメラ視点からの距離を表すスカラー値(たとえば、整数値、実数または浮遊小数点の値など)の画像であってもよい。深度値の定義は、深度センサの種類に基づいて異なり得る。例として、2つの共通の定義は、画像を撮影したカメラからの光軸(通常、Z軸)に沿った深度と、画像の撮影中に各画素を通過する光線に沿った深度である。
図3は、ダイナミックデプス情報を格納するためのメタデータ構造を含む例示的な画像ファイル300を示す図である。構造化メタデータを、深度情報を含む画像に利用することができる。いくつかの実施態様では、画像ファイル300を、連結ファイルコンテナとして格納してもよい。連結ファイルコンテナは、主画像に副メディアファイルが添付されていない、主画像に1つもしくは複数の副メディアファイルが添付されている複合または連結ファイルから構成される。図3に示す例では、主画像340および関連するメタデータ310、ならびにXMP(eXtensible Metadata Platform)メタデータ320が示されている。いくつかの実施態様では、副メディアファイルは、主画像の別の表現、または、深度データなどの関連メディアを含んでもよい。
画像ファイル300は、たとえば、JPEG、PNG、TIFF、HEIFなど、任意の種類の画像であり得る。画像ファイル300は、主画像340を含む。画像ファイル300は、メタデータ310、たとえば、EXIF(Exchangeable Image File Format)データをさらに含んでもよい。EXIFデータは、ISO速度、シャッター速度、絞り、ホワイトバランス、レンズの種類、焦点距離、日時など、1つ以上の設定を含み得る。
いくつかの実施態様では、画像ファイル300を、ISO/IEC14496-12に基づいてISO Box Media File Format Containerとして格納してもよい。これらの実施態様では、コンテナにあるXMPメタデータは、ディレクトリにある各項目がURI(Uniform Resource Identifier)を用いてISO/IEC14496-12コンテナ内のボックスを参照するContainerXMPメタデータディレクトリ要素を含む。
いくつかの実施態様では、画像ファイルのXMPメタデータにエンコードされたコンテナ要素がコンテナにおけるメディア項目のディレクトリを規定してもよい。いくつかの実施態様では、連結されたメディア項目は、ディレクトリにあるメディア項目要素と同じ順序でコンテナファイル内に位置する。いくつかの実施態様では、連結されたメディア項目は、しっかり密集しており、たとえば、ファイルコンテナには、それぞれ異なるメディア項目に対応するデータが隙間なく連続して配置されている。たとえば、画像ファイルは、主画像(たとえば、主画像340)の後に連結される、連結されたメディア項目に対応するバイトを含んでもよい。
主画像340は、JPEG画像または別の形式の画像など、表示対応画像であってもよい。画像ファイル300は、深度データ、中間画像、もしくは主画像の別の表現など、副画像含んでもよく、またはその他のメディア項目(たとえば、1つ以上の動画、テキストなど)を含んでもよい。上述したように、副画像および/またはメディア項目を連結ファイルコンテナに格納してもよい。画像ファイル300がISO/IEC14496-12ISO Boxメディアファイルフォーマットコンテナであるいくつかの実施態様では、その他のボックスとして副画像をコンテナに格納してもよい。
画像ファイル300は、XMP(eXtensible Metadata Platform)メタデータ320をさらに含んでもよい。XMPメタデータ320は、1つ以上のデバイス、たとえば、Device要素324を指定するデータを含んでもよい。たとえば、ISO16684-1:2011(E)XMP Specification Part 1に従うことによってメタデータに連番を振り、たとえばAdobe XMP Specification Part 3 Storage in Filesにおいて記述されているように当該メタデータを画像ファイル300に埋め込んでもよい。いくつかの実施態様では、画像ファイル300は、RDF/XML(Resource Description Framework/eXtensible Markup Language)としてフォーマットされた下記の項目を含んでもよい。
いくつかの実施態様では、XMPメタデータ320(コンテナXMPメタデータディレクトリとも称する)は、連結ファイルコンテナにある後続のメディアファイルの順序およびプロパティを規定してもよい。各要素は、Container:Itemという構造の要素であり、コンテナのレイアウトおよびコンテンツを規定してもよい。コンテナタイプは、たとえば、「Device」要素、「Camera」要素などであってもよい。連結コンテナにある各ファイル(たとえば、その他の画像、映像、テキストなど)は、対応するメディア項目をディレクトリ内に有してもよい。メディア項目は、ファイルコンテナにおける位置、および連結ファイルコンテナに含まれる各連結ファイルの基本的なプロパティを記述してもよい。いくつかの実施態様では、コンテナディレクトリにあるメディア項目は、メタデータに含まれるImage要素またはDepth Map要素のItemURI(Uniform Resource Identifier))属性によって参照されてもよい。URIは、たとえば、デフォルト名前空間プレフィックスにContainerを用いた名前空間に基づいてもよい。ディレクトリは、ディレクトリに含まれる最初の項目である1つの主画像のみを含む。Item要素は、アプリケーションで使用できる各項目の説明を含む。
いくつかの実施態様では、XMPデータ320にあるルートメタデータオブジェクトは、Device要素(324)を含んでもよい。Device要素(324)は、デバイス324とも称する。いくつかの実施態様では、Device要素324は必須であり、たとえば、少なくとも1つのデバイス324がXMPデータ320に必ず含まれている。いくつかの実施態様では、2つ以上のデバイス要素を含めることができる。
Device要素324は、1つ以上のプロファイルまたは用途に従って指定されてもよい。各プロファイルは、対応する必要な要素およびデータのセットを有してもよい。プロファイルは、アプリケーション、たとえば、画像ファイル300を生成したカメラアプリケーション、または画像ファイル300にアクセスするその他のアプリケーション、たとえば、画像バックアップアプリケーション、画像表示アプリケーション、もしくは画像編集アプリケーションで使用できてもよい。たとえば、プロファイルは、特定の画像ファイルがサポートできる用途を識別するために使用できてもよい。画像ファイル300は、1つ以上のプロファイルを含んでもよい。いくつかの実施態様では、各プロファイルは、特定の用途に対応してもよく、対応する必要な要素およびデータのセットを有してもよい。たとえば、ユーザが画像を見るまたは編集することを可能にするために画像ファイル300にアクセスするアプリケーションは、プロファイル(複数可)を利用して、所与の画像ファイルがサポートできる用途を特定できてもよい。
図3に示す例では、画像ファイル300のXMPメタデータ320は、プロファイルタイプ「DepthPhoto」のProfile要素326(Profile326とも称する)を含む1つのデバイス要素324を含む。さらには、Profile326は、たとえば画像撮影(または作成)時に画像ファイル300の画像データを取得したカメラの数(「cameraindices=i」。ここで、iは、インデックス値である)を示す。たとえば、カメラインデックスが0であるいくつかの実施態様では、主画像は、カメラ要素において参照される画像と同じであってもよい。いくつかの実施態様では、プロファイルタイプ「DepthPhoto」のプロファイルは、少なくとも1つのProfile要素326と、少なくとも1つのカメラ要素(たとえば、「Cameras328」)とを含んでいることが必須であろう。図3に示す例では、Cameras328(Camera要素328とも称す)は、カメラ要素330(Camera i)を含むとして示されている。いくつかの実施態様では、Cameras328は、1つ以上のカメラ要素のシーケンスである。
いくつかの実施態様では、各カメラ要素(たとえば、Camera要素330)は、カメラが提供した画像の画像要素332を、深度マップ要素334(Depth Map334とも称す)とを含む。画像要素332は、画像要素が連結ファイルコンテナにある主画像340に対応するかどうかを示す、「Primary」という属性を含んでもよい。いくつかの実施態様では、画像要素332は、画像要素332が指すメディア項目がオリジナルバージョンの画像、たとえば、深度エフェクトを描画するのに使用できるフィルタ処理されていないカラー画像であるかどうかを示す、「Original」という属性を含んでもよい。いくつかの実施態様では、画像要素332は、メディア項目、たとえば、画像要素332が参照する画像が表示対応でないRawバージョンの画像であって、表示対応画像を得るために処理され得ること示す、「Raw」という属性を含んでもよい。いくつかの実施態様では、画像要素332は、メディア項目、たとえば、画像要素332が指す画像がデプス画像を含んでいることを示す、「Depth」という属性を含んでもよい。
Depth Map334は、対応するカメラが提供する画像の深度関連情報および/または深度マップを含んでもよい。いくつかの実施態様では、画像要素332および/または深度マップ要素334は、画像ファイル300、たとえば連結ファイルコンテナに格納された対応する画像データおよび/または深度データの位置を指すURI(Uniform Resource Identifier)含んでもよい。第1カメラの深度データには、欠損部分(hole)があってはならない。画像ファイルを生成するアプリケーションは、深度値が利用または算出できない画像の領域にある予測値をエンコードする。
いくつかの実施態様では、デプス画像は、複数の値を含む。各値は、デプス画像の特定の画素に対応する。たとえば浮動小数点形式または32ビットの整数形式の深度情報を整数形式に変換し、ファイルコンテナタイプがサポートする画像コーデック(たとえば、JPEG)を用いて圧縮する。整数形式への変換は、線形レンジ変換および逆レンジ変換を含む異なる方法で行うことができる。たとえば、逆変換は、エンコードしたときに深度マップの精度が低下した場合に利用されてもよく、たとえば、浮遊小数点の深度値を16ビットの整数に変換する。
線形変換(RangeLinear):dは、画素の深度距離値であり、近点および遠点の最小深度値および最大深度値が可能である。まず、以下の式を用いて、深度値を[0,1]範囲に正規化する。
次に、以下の式を用いて、深度値を16ビットに量子化する。
以下の式を用いて、量子化された深度値dnから深度を復元する。
逆変換(RangeInverse):RangeInverseでは、より多くのビットを近点の深度値に割り当てて、より少ないビットを遠点値に割り当てる。まず、以下の式を用いて、深度値を[0,1]範囲に正規化する。
次に、以下の式を用いて、深度値を16ビットに量子化する。
以下の式を用いて、量子化された深度値dnから深度を復元する。
いくつかの実施態様では、Depth Map334は、深度データのレンズ焦点モデルを含んでもよい。いくつかの実施態様では、レンズモデルは、たとえばFocalTable属性に格納されたメタデータを含んでもよい。メタデータは、たとえば被写界深度エフェクトを描画するためにアプリケーションによって用いられてもよい。レンズモデルは、ビューア、たとえば、画像を撮影したカメラからそれぞれ異なる距離離れたところにある錯乱円の半径を規定する。FocalTableは、深度距離値に応じて錯乱円を規定したルックアップテーブルを構築するために使用できる距離と半径とのペアを含んでもよい。
いくつかの実施態様では、FocalTable属性は、Base64エンコードされたリトルエンディアンの浮遊小数点ペアから構成される文字列の値であってもよい。当該浮遊小数点ペアは、実際の距離値である。これらの<distance>、<radius>ペアは、たとえば、深度マップの近点値と遠点値との間の距離値における錯乱円の半径を計算するために画像表示アプリケーションまたは画像編集アプリケーションによって使用できるルックアップテーブルを規定する。
いくつかの実施態様では、距離と半径とのペアは、距離値によってソートされた昇順で格納される。いくつかの実施態様では、距離座標は、深度マップの距離値単位で規定されてもよい。いくつかの実施態様では、半径の値は、画素座標で規定されてもよい。各半径の値は、0以上の値である。半径の値が0であることは、画像の焦点面上で焦点が合っている深度距離を意味してもよい。ルックアップテーブルは、少なくとも2つのペアを含み、たとえば、第1ペアが深度マップの近点距離(near distance)に対応し、第2ペアが深度マップの遠点距離(fat distance)に対応する。いくつかの実施態様では、FocalTableで規定される点間の半径の値を補間(たとえば、線形補間)して、画像を撮影したカメラからの任意の焦点距離にある錯乱円の半径を取得してもよい。
いくつかの実施態様では、FocalTableは、3つの半径値、近景の近点値、焦点面の焦点面値、および遠景の遠点値を含んでもよい。画像表示アプリケーションは、FocalTableにアクセスして、焦点が合っている焦点面深度値にあるオブジェクトを描画してもよい。いくつかの実施態様では、FocalTableは、焦点が合っている、たとえば焦点面に対応する2つ以上の距離値を含んでもよい。
いくつかの実施態様では、Camera要素328において、主画像340は、第1カメラに対応付けられている。いくつかの実施態様では、Cameras328に記載されている第1カメラ要素は、メインカメラ、たとえば、スマートフォンまたはタブレット端末など、デバイスのメインカメラであってもよい。いくつかの実施態様では、付加カメラ要素は、デバイスのその他のカメラ、たとえば、スマートフォンまたはタブレットデバイスの赤外線カメラに対応してもよい。その他のカメラの順序は任意であってもよい。いくつかの実施態様では、各追加のCamera要素は、対応するPose要素を含んでもよい。Pose要素は、デバイスに対するカメラの姿勢を示す。いくつかの実施態様では、1つのCamera要素に含まれるすべての画像および深度マップは、その同じカメラによって訂正されてもよい。たとえば、要素は、同じ姿勢、同じ縦横比率、および同じ視野を有する。
たとえば、画像編集アプリケーションによって、切り抜き、サイズ変更など、画像ファイル300が修正された場合、1つ以上のCamera要素を更新して画像に対する修正を反映して、たとえば深度マップおよびCamera要素の画像要素を更新してもよい。
いくつかの実施態様では、画像ファイル300は、シーンに対する画像を撮影したイメージセンサ(複数可)またはカメラ(複数可)の位置および向きを含む姿勢など、画像撮影についての情報を含んでもよい。この情報を含めることによって、アプリケーションが複数のカメラからの画像(たとえば、カラーカメラからの画像と、深度センサからのデプス画像)を合わせて使用することが可能になる。たとえば、姿勢情報によって、アプリケーションが画像上に深度データ(解像度は異なる場合がある)をマッピングすることが可能になる。
いくつかの実施態様では、Device324は、1つ以上のその他の要素を備えてもよい。たとえば、このような要素は、ファイルコンテナにある連結されたファイルの順序付けられたディレクトリであるContainer要素、デバイスのベンダー関連情報を含むVendorInfo、デバイスのアプリケーションに固有の情報または描画情報を含むAppInfo要素などを含んでもよい。
いくつかの実施態様では、カメラ要素330は、たとえば、カメラのベンダー関連情報を含むVendorInfo要素、カメラのアプリケーションに固有の情報または描画情報を含むAppInfo要素、カメラが提供した画像を含む画像要素(たとえば、デプス画像)、カメラレンズの撮像モデルを記載したImagingModel要素など、1つ以上の追加要素を含んでもよい。たとえば、ImagingModel要素を用いて、魚眼の歪みモデル、または5-DoFの半径方向の歪みを有する標準ピンホールカメラモデルを記述してもよい。いくつかの実施態様では、ImagingModel要素は、イメージセンサの寸法によって正規化された、実数として表されるX軸およびY軸に沿った焦点距離;センサの高さによって正規化された、カメラの光軸がX軸およびY軸に沿ってカメラの像面中心に交差するそれぞれの主点(X位置およびY位置);画素で表される画像の幅および高さ;度で表されるカメラの傾斜、たとえば、画像のY軸が垂直方向から傾く負の角度;画素の幅の画素の高さに対する画素アスペクト比;および1つ以上の歪みパラメータとして表されてもよい。たとえば、サイズ変更または切り抜きなど、画像が編集された場合、これに応じてImagingModel要素が更新されてもよい。
Item構造は、項目が含まれるコンテナのレイアウトおよびコンテンツを、たとえば、Container:Itemという形式で規定してもよい。たとえば、「Profile」というコンテナ要素は、図3に示すように、「type」という項目と、「cameraindices」という項目を含んでもよい。別の例では、「Camera」という要素は、ファイルコンテナにある対応する画像へのURIを含む「image」という項目、画像の深度マップを含む「深度マップ」という項目などを含んでもよい。各項目エレメントは、画像バックアップアプリケーション、画像表示アプリケーション、または画像編集アプリケーションが、たとえばユーザが画像を見るまたは編集することができるようにすることを可能にする情報を含む。
いくつかの実施態様では、ディレクトリの最初のメディア項目は、主画像340である。主画像要素は、MIMEタイプを示すための関連するフィールドを有する。このフィールドは、コンテナにあるメディア項目のMIMEタイプを示す単純な文字列であってもよい。たとえば、主画像のMIMEタイプの値は、次の通りであってもよい。
さらには、主画像要素にある長さフィールド(含まれている場合)の値を、0に設定してもよい。主画像がファイルコンテナの最初のファイルである実施態様では、アプリケーションは、示されているMIMEタイプに基づいて主画像をファイルコンテナの最初から解析することによって主画像の長さを特定してもよい。
XMPメタデータの最初のメディア項目は、エンコードされた主画像の終わりと最初の副画像の始まりとの間の追加パディングを指定するPadding属性をオプションで含んでもよい。
いくつかの実施態様では、メディア項目がしっかり密集している場合、副画像の後続のメディア項目は、Padding属性を含まない。各メディア項目(たとえば、主画像340以外の画像)は、対応するMIMEタイプ属性とLength属性とを有する。長さ属性は、整数の値であってもよく、副メディア項目に必要であってもよい。いくつかの実施態様では、長さ属性は、連結ファイルコンテナにある対応するファイルに含まれる項目のバイトの数を示す正の整数で示される長さを含んだ単純な文字列であってもよい。一般に、Item要素は、表1に記載された画像MIMEタイプの1つであるMime属性を含む。いくつかの実施態様では、連続したメディア項目は、ファイルコンテナ内のリソースデータを共有してもよい。最初のメディア項目は、ファイルコンテナにおけるリソースの位置を示してもよく、後続の共有メディア項目は、0に設定された長さ属性を有してもよい。リソースデータ自体がコンテナであった場合、DataURIを用いて、リソース内のメディア項目データの位置を特定してもよい。アプリケーションが主画像の長さと、(指定されている場合)主画像のパティング値とを足した値に、先行する副項目リソースの長さを加えることによって連結ファイルコンテナにおけるメディア項目リソースの位置を特定してもよい。
以下の表には、Item要素に含まれ得る様々な属性の例が記述されている。
いくつかの実施態様では、XMPメタデータは、拡張現実(AR)画像のパラメータを指定してもよい。AR画像のプロファイルタイプは、「ARPhoto」であってもよい。このようなパラメータは、たとえば、AR画像を撮影したクライアントデバイスの姿勢、照明推定情報、シーンに含まれる水平表面の面および/または垂直表面の面(たとえば、床、壁など)、カメラの内部パラメータなどを含んでもよい。さらには、ARパラメータは、たとえば画像撮影アプリケーションまたは拡張現実アプリケーションによって提供されるアプリケーション固有のメタデータを含んでもよい。このようなアプリケーション固有のメタデータ3次元(3D)アセットの識別子(複数可)、たとえば、AR画像に写る実世界シーン、および対応する姿勢を拡張するために利用される1つ以上の仮想オブジェクトを含み得る。
さらには、いくつかの実施態様では、拡張現実画像に用いられる画像ファイル内に1つ以上の画像を埋め込むことができる。このような埋め込みの例示的な適用例は、埋め込み画像が3Dアセットを有さない埋め込み画像であって、かつ、コンテナ、たとえば、主画像が3Dアセット含む場合である。これにより、ユーザが拡張現実画像にある仮想オブジェクトとやり取りするおよび移動させることを可能にするユーザインターフェースを表示アプリケーションまたは編集アプリケーションが提供することを可能にしつつ、ユーザが3Dアセットを有するサムネイルをたとえば画像ギャラリーでプレビューすることが可能になる。この例では、ユーザが拡張現実画像を編集後に保存した場合、主画像が更新されてもよい。この例では、XMPメタデータは、0よりも大きなインデックスとともに、カメラに埋め込み画像を格納する。埋め込み画像がない場合、カメラ0は、ARメタデータを含む。
また、XMPメタデータにおいて、たとえば「depthphoto」および「ARphoto」とは異なるその他の種類のプロファイルを指定して、その他の機能および用途をサポートしてもよい。
いくつかの実施態様では、たとえば、クライアントデバイス(たとえば、クライアントデバイス120~126のうちのいずれか)のカメラハードウェアを用いて、モバイル機器上のカメラアプリケーションなどのアプリケーションが画像ファイル300を生成してもよい。これらの実施態様では、カメラアプリケーションは、上述したフォーマットの画像ファイル300を生成してもよい。画像ファイル300を生成するために、イメージセンサ、たとえば、ハードウェアセンサ(たとえば、CCD、CMOS、赤外線など)から画像データを取得してもよい。
画像ファイル300に含まれる主画像および1つ以上のその他の画像(たとえば、各々は、camera iに対応する)の姿勢およびアスペクト比が同じになるように、イメージセンサから取得した画像データが、たとえばカメラアプリケーションによって、修正されてもよい。たとえば、主画像および1つ以上のその他の画像を同じアスペクト比になるように切り抜いてもよい。いくつかの実施態様では、たとえば、1つ以上のカメラから深度情報が入手可能な場合、画像ファイル300は、深度マップを含んでもよい。いくつかの実施態様では、深度マップの解像度は、主画像および1つ以上のその他の画像の解像度と同じであってもよい。いくつかの実施態様では、深度マップの解像度は、主画像および1つ以上のその他の画像の解像度とは異なってもよい。いくつかの実施態様では、当該1つ以上のその他の画像が画像ファイル300に格納され、付加カメラ要素において参照されてもよい。
本明細書において説明したようなXMPメタデータを有する連結ファイルコンテナである画像ファイルによって、画像バックアップアプリケーション、画像表示アプリケーション、または画像編集アプリケーションは、画像の生成、たとえば、クライアントデバイスの1つ以上のイメージセンサを用いた撮影と整合性がとれるように、メディア、たとえば、深度写真、拡張現実写真などを提示できるようになる。さらには、主画像をファイルコンテナに含めることにより、XMPメタデータを解析できないアプリケーションまたはサービスが表示対応バージョンの画像を取得することが可能になる。
図4は、いくつかの実施態様に係る、例示的な方法400を示すフロー図である。いくつかの実施態様では、たとえば、図1に示すサーバシステム102上で方法400を実装することができる。いくつかの実施態様では、図1に示す1つ以上のクライアントデバイス120、122、124、または126、1つ以上のサーバ装置、ならびに/またはサーバ装置(複数可)およびクライアントデバイス(複数可)の両方の上で方法400の一部またはすべてを実装することができる。記載の例では、実装システムは、1つ以上のデジタルプロセッサまたは処理回路(「プロセッサ」)と、1つ以上の記憶装置とを備える。いくつかの実施態様では、1つ以上のサーバおよび/または1つ以上のクライアントの異なる構成要素が、方法400の異なるブロックまたはその他の部分を実行することができる。いくつかの例では、第1デバイスが方法400のブロックを実行すると記載されている。いくつかの実施態様は、結果またはデータを第1デバイスに送信することができる1つ以上のその他のデバイス(たとえば、その他のクライアントデバイスまたはサーバ装置)によって実行される方法400の1つ以上のブロックを有し得る。
様々な実施態様では、クライアントデバイス120は、スタンドアロンカメラ、カメラを備える別のデバイス(たとえば、スマートフォン、タブレット端末、コンピュータ、スマートウォッチなどのウェアラブルデバイス、ヘッドセットなど)、または別のデバイスが撮影した画像もしくは動画を受信できるその他のクライアントデバイスであり得る。いくつかの実施態様では、クライアントデバイス120は、撮影専用のデバイス、たとえば、画面を備えないカメラであってもよい。いくつかの実施態様では、クライアントデバイス120は、表示専用デバイス、たとえば、画像もしくは動画を表示できる画面を備えるが、カメラ機能、または画像もしくは動画を撮影するためのその他の機能を持たないデバイスであってもよい。いくつかの実施態様では、クライアントデバイス120は、撮影機能と表示機能との両方を備えてもよい。
いくつかの実施態様では、クライアントデバイス120は、画像または動画を撮影するための1つのカメラを備えてもよい。いくつかの実施態様では、クライアントデバイス120は、複数のカメラ(または、レンズ)を備えてもよい。たとえば、スマートフォンまたはその他のデバイスは、1つ以上の正面カメラ(デバイスの画面と同じ側にある)および/または1つ以上の背面カメラを備えてもよい。いくつかの実施態様では、当該1つ以上の正面カメラまたは背面カメラは、撮影中、連動して動作してもよい、たとえば、第1カメラが深度情報を撮影し、第2カメラが画像または動画の画像画素を撮影してもよい。いくつかの実施態様では、たとえば、異なるズームレベルを用いた異なる種類の画像撮影または動画撮影に、異なるカメラ(たとえば、望遠レンズ、広角レンズなど)を用いてもよい。いくつかの実施態様では、クライアントデバイス120は、360度画像または360度動画を撮影するように構成されてもよい。いくつかの実施態様では、カメラまたはレンズは、1つのイメージセンサ(たとえば、CCDまたはCMOSセンサ)、または複数のセンサを用いて画像を撮影してもよい。いくつかの実施態様では、画像撮影時、たとえば深度センサなど、その他のセンサを1つ以上のカメラと合わせて使用してもよい。
いくつかの実施態様では、クライアントデバイス120は、カメラ(または、レンズ)のうちの1つ以上のカメラのイメージセンサにおいて撮影されたRAW画像データと、その他のセンサ(たとえば、加速度計、ジャイロスコープ、位置センサ、深度センサなど)から取得したその他のデータとを合成して1枚の画像を形成し、当該画像をファイルコンテナに格納してもよい。
クライアントデバイス120によって、ユーザは、たとえば、1つのフレームを撮影するための静止画像(またはフォト)モード、複数のフレームを撮影するためのバーストモードまたは動画像モード、複数のフレームを含んだ動画を撮影するための動画モードなど、異なるモードで画像を撮影することが可能になる。いくつかの実施態様では、カメラが画像を撮影するときである画像撮影時に方法400を実行してもよい。
クライアントデバイス120によって、ユーザは、たとえば、クライアントデバイス120によって撮影されたまたはユーザに関連する画像もしくは動画を、異なるユーザインターフェースで見ることが可能になる。たとえば、ユーザが一度に1枚の画像もしくは1本の動画を見るおよび/もしくは編集することが可能になるワンナップモードまたはスライドショーモードが提供されてもよい。別の例では、ユーザが、たとえば、画像グリッドとして同時に複数の画像を見るおよび/または編集することが可能になるギャラリーモードが提供されてもよい。いくつかの実施態様では、クライアントデバイス120が方法400を実行してもよい。別の例では、クライアントデバイスまたはサーバ装置が方法400を実行し得る。いくつかの実施態様では、方法400は、サーバ装置によって実装されてもよい。
ブロック402では、方法400の実装においてユーザデータを利用するためのユーザの同意(たとえば、ユーザの許可)が得られているかどうかを確認する。たとえば、ユーザデータは、クライアントデバイスを用いてユーザが撮影した画像または動画、たとえばクライアントデバイスを用いてユーザが格納またはアクセスした画像または動画、画像メタデータ/動画メタデータ、メッセージングアプリケーションの利用に関するユーザデータ、ユーザの好み、ユーザの生体情報、ユーザ特性(たとえば、身元、名前、年齢、性別、職業など)、ユーザのソーシャルネットワークおよび連絡先についての情報、社会的またはその他の種類の行動および活動、ユーザが作成または書き込んだコンテンツ、評価、および意見、ユーザの現在地、過去のユーザデータ、ユーザが生成、受信、および/またはアクセスした画像、ユーザが見たまたは共有した画像などを含み得る。本明細書において説明する方法の1つ以上のブロックは、このようなユーザデータをいくつかの実施態様において使用してもよい。
方法400においてユーザデータが使用される可能性のある関連ユーザからユーザ同意が得られている場合、ブロック404において、本明細書における方法のブロックにおいて上記のようなユーザデータが利用できる状態でこれらのブロックを実施できると判断し、方法は、ブロック410に続く。ユーザの同意が得られていない場合、ブロック406において、ユーザデータを利用せずにブロックを実施すると判断し、方法は、ブロック410に続く。いくつかの実施態様では、ユーザの同意が得られていない場合、ユーザデータを利用せず、合成データならびに/または一般的もしくは一般に受け入れられているデータおよび一般に使用できるデータを利用してブロックを実施する。いくつかの実施態様では、ユーザの同意が得られていない場合、方法400を実行しない。
ブロック410では、たとえばクライアントデバイスの1つ以上のカメラを用いて画像データを撮影する。いくつかの実施態様では、撮影画像データは、主画像および関連する深度値を含んでもよい。いくつかの実施態様では、撮影画像データは、1つ以上の副画像を含む。いくつかの実施態様では、主画像は、カラー画像であってもよい。いくつかの実施態様では、当該1つ以上の副画像は、(たとえば、主画像とは異なる視点または異なる時間に取得した)カラー画像、グレースケール画像、モノクロ画像、デプス画像(たとえば、深度情報を含むが、人が視認できるシーン描写は含まない画像)などを含んでもよい。いくつかの実施態様では、当該1つ以上の副画像は、主画像を撮影したカメラとは異なるカメラによって撮影されてもよい。いくつかの実施態様では、1つ以上の副画像の各々は、1つ以上のカメラのうち、対応するカメラによって撮影されてもよい。ブロック410の後にブロック412が続いてもよい。
ブロック412では、たとえば、JPEG画像、TIFF画像、HEIF画像、PNG画像などとして、画像データを画像形式にエンコードしてもよい。いくつかの実施態様では、エンコードされた画像データは、画像形式にエンコードされた主画像を含んでもよい。エンコードされた画像データは、画像メタデータをさらに含んでもよい。いくつかの実施態様では、画像メタデータは、XMPメタデータとしてエンコードされてもよい。いくつかの実施態様では、画像メタデータは、画像形式、たとえば、Depth Photo、拡張現実(AR)写真などを示すプロファイル要素を含むデバイス要素を含んでもよい。いくつかの実施態様では、画像メタデータは、画像要素と、深度値に基づいて取得される深度マップとを含むカメラ要素をさらに含んでもよい。
いくつかの実施態様では、深度マップは、画像データを撮影するために使われた1つ以上のカメラのうち、特定のカメラからの距離を各々が示す複数の画素値を含んでもよい。いくつかの実施態様では、深度は、レンズ焦点モデルをさらに含んでもよい。いくつかの実施態様では、レンズ焦点モデルは、当該特定のカメラからの複数の距離に対応する錯乱円のそれぞれの半径の値を規定してもよい。いくつかの実施態様では、当該複数の距離は、(近景に対応する)近点距離と、(遠景に対応する)遠点距離とを含んでもよい。ここで、近点距離は、遠点距離よりも小さい(近景は、遠景よりもカメラに近い)。いくつかの実施態様では、複数の距離は、近点距離よりも大きく、かつ、遠点距離よりも小さい焦点距離をさらに含んでもよい。いくつかの実施態様では、当該複数の画素値は、深度値を整数形式(たとえば、16ビットの整数)に変換し、変換された深度値を画像形式(たとえば、JPEG)に基づいて圧縮することによって取得されてもよい。
1つ以上の副画像を含む実施態様では、画像メタデータは、1つ以上の付加カメラ要素をさらに含んでもよい。各付加カメラ要素は、1つ以上の副画像のうち、少なくとも1つの副画像に対応し、ファイルコンテナにある少なくとも1つの画像を指すポインタ(たとえば、Uniform Resource Identifier)を含む画像要素を含んでもよい。いくつかの実施態様では、当該1つ以上の付加カメラ要素は、画像メタデータにおいて、最初のカメラ要素の後に順次編成されてもよい。ブロック412の後にブロック414が続いてもよい。
ブロック414では、エンコードされた画像データを画像形式に基づいてファイルコンテナに格納してもよい。いくつかの実施態様では、ファイルコンテナに画像データを格納するステップは、画像形式にエンコードされた主画像と1つ以上の副画像とを連結するステップを含んでもよい。ファイルコンテナにおける主画像および1つ以上の副画像の順序は、画像メタデータにある1つ以上の付加カメラ要素の順序と同じであってもよい。ブロック414の後にブロック416が続いてもよい。
ブロック416では、主画像を表示してもよい。
図5は、いくつかの実施態様に係る、別の例示的な方法500を示すフロー図である。いくつかの実施態様では、たとえば、図1に示すサーバシステム102上で方法500を実装することができる。いくつかの実施態様では、図1に示す1つ以上のクライアントデバイス120、122、124、もしくは126、1つ以上のサーバ装置、ならびに/またはサーバ装置(複数可)およびクライアントデバイス(複数可)の両方の上で方法500の一部またはすべてを実装することができる。記載の例では、実装システムは、1つ以上のデジタルプロセッサまたは処理回路(「プロセッサ」)と、1つ以上の記憶装置とを備える。いくつかの実施態様では、1つ以上のサーバおよび/または1つ以上のクライアントの異なる構成要素が、方法500の異なるブロックまたはその他の部分を実行することができる。いくつかの例では、第1デバイスが方法500のブロックを実行すると記載されている。いくつかの実施態様は、結果またはデータを第1デバイスに送信することができる1つ以上のその他のデバイス(たとえば、その他のクライアントデバイスまたはサーバ装置)によって実行される方法500の1つ以上のブロックを有し得る。
様々な実施態様では、クライアントデバイス120は、スタンドアロンカメラ、カメラを備える別のデバイス(たとえば、スマートフォン、タブレット端末、コンピュータ、スマートウォッチなどのウェアラブルデバイス、ヘッドセットなど)、または別のデバイスが撮影した画像もしくは動画を受信できるその他のクライアントデバイスであり得る。いくつかの実施態様では、クライアントデバイス120は、撮影専用のデバイス、たとえば、画面を備えないカメラであってもよい。いくつかの実施態様では、クライアントデバイス120は、表示専用デバイス、たとえば、画像もしくは動画を表示できる画面を備えるが、カメラ機能、または画像もしくは動画を撮影するためのその他の機能を持たないデバイスであってもよい。いくつかの実施態様では、クライアントデバイス120は、撮影機能と表示機能との両方を備えてもよい。
いくつかの実施態様では、クライアントデバイス120は、画像または動画を撮影するための1つのカメラを備えてもよい。いくつかの実施態様では、クライアントデバイス120は、複数のカメラ(または、レンズ)を備えてもよい。たとえば、スマートフォンまたはその他のデバイスは、1つ以上の正面カメラ(デバイスの画面と同じ側にある)および/または1つ以上の背面カメラを備えてもよい。いくつかの実施態様では、当該1つ以上の正面カメラまたは背面カメラは、撮影中、連動して動作してもよい、たとえば、第1カメラが深度情報を撮影し、第2カメラが画像または動画の画像画素を撮影してもよい。いくつかの実施態様では、たとえば、異なるズームレベルを用いた異なる種類の画像撮影または動画撮影に、異なるカメラ(たとえば、望遠レンズ、広角レンズなど)を用いてもよい。いくつかの実施態様では、クライアントデバイス120は、360度画像または360度動画を撮影するように構成されてもよい。いくつかの実施態様では、カメラまたはレンズは、1つのイメージセンサ(たとえば、CCDまたはCMOSセンサ)、または複数のセンサを用いて画像を撮影してもよい。いくつかの実施態様では、画像撮影時、たとえば深度センサなど、その他のセンサを1つ以上のカメラと合わせて使用してもよい。
いくつかの実施態様では、クライアントデバイス120は、カメラ(または、レンズ)のうちの1つ以上のカメラのイメージセンサにおいて撮影されたRAW画像データと、その他のセンサ(たとえば、加速度計、ジャイロスコープ、位置センサ、深度センサなど)から取得したその他のデータとを合成して画像を形成し、当該画像をファイルコンテナに格納してもよい。
クライアントデバイス120によって、ユーザは、たとえば、1つのフレームを撮影するための静止画像(またはフォト)モード、複数のフレームを撮影するためのバーストモードまたは動画像モード、複数のフレームを含んだ動画を撮影するための動画モードなど、異なるモードで画像を撮影することが可能になる。いくつかの実施態様では、カメラが画像を撮影するときである画像撮影時、撮影が完了した後、またはそれ以降の時間(たとえば、画像を見るおよび/もしくは編集するためにクライアントデバイス120がユーザによって使用されるとき)に方法500を実行してもよい。
クライアントデバイス120によって、ユーザは、たとえば、クライアントデバイス120によって撮影されたまたはユーザに関連する画像もしくは動画を、異なるユーザインターフェースで見ることが可能になる。たとえば、ユーザが一度に1枚の画像もしくは1本の動画を見る/編集することが可能になるワンナップモードまたはスライドショーモードが提供されてもよい。別の例では、ユーザが、たとえば、画像グリッドとして同時に複数の画像を見る/編集することが可能になるギャラリーモードが提供されてもよい。
いくつかの実施態様では、クライアントデバイス120が方法500を実行してもよい。別の例では、クライアントデバイスまたはサーバ装置が方法500を実行し得る。いくつかの実施態様では、サーバ装置によって方法500が実装されてもよい。
ブロック502では、方法500の実装においてユーザデータを利用するためのユーザの同意(たとえば、ユーザの許可)が得られているかどうかを確認する。たとえば、ユーザデータは、クライアントデバイスを用いてユーザが撮影した画像または動画、たとえばクライアントデバイスを用いてユーザが格納またはアクセスした画像または動画、画像メタデータ/動画メタデータ、メッセージングアプリケーションの利用に関するユーザデータ、ユーザの好み、ユーザの生体情報、ユーザ特性(たとえば、身元、名前、年齢、性別、職業など)、ユーザのソーシャルネットワークおよび連絡先についての情報、社会的またはその他の種類の行動および活動、ユーザが作成または書き込んだコンテンツ、評価、および意見、ユーザの現在地、過去のユーザデータ、ユーザが生成、受信、および/またはアクセスした画像、ユーザが見たまたは共有した画像などを含み得る。本明細書において説明する方法の1つ以上のブロックは、このようなユーザデータをいくつかの実施態様において使用してもよい。
方法500においてユーザデータが使用される可能性のある関連ユーザからユーザ同意が得られている場合、ブロック504において、本明細書における方法のブロックにおいて上記のようなユーザデータが利用できる状態でこれらのブロックを実施できると判断し、方法は、ブロック510に続く。ユーザの同意が得られていない場合、ブロック506において、ユーザデータを利用せずにブロックを実施すると判断し、方法は、ブロック510に続く。いくつかの実施態様では、ユーザの同意が得られていない場合、ユーザデータを利用せず、合成データならびに/または一般的もしくは一般に受け入れられているデータおよび一般に使用できるデータを利用してブロックを実施する。いくつかの実施態様では、ユーザの同意が得られていない場合、方法500を実行しない。たとえば、1つ以上の画像へのアクセス許可をユーザが拒否した場合、方法500は実行されない。または、ブロック506を実行した後に停止される。
ブロック510では、図3を参照して説明したように、ファイルコンテナ、たとえば、特定の画像形式で画像を格納するファイルコンテナから画像データを取得する。異なる実施態様では、ブロック510の後にブロック512、ブロック522、ブロック542、またはブロック562が続いてもよい。
いくつかの実施態様では、ブロック510の後にブロック512が続いてもよい。ブロック512では、たとえば、クライアントデバイスのディスプレイ画面上に画像データからの主画像を表示させる。いくつかの実施態様では、ユーザがユーザ入力を行うことが可能になるユーザインターフェースに主画像が表示されてもよい。ブロック512の後にブロック514が続いてもよい。
ブロック514では、目標焦点距離を示すユーザ入力を受信してもよい。たとえば、ユーザインターフェースは、ユーザインターフェース要素(たとえば、スライダ)を含んでもよい。このスライダは、ユーザに撮影画像における近点距離値および遠点距離値に対応する距離値間でスライダを動かすことによって目標焦点距離を選択させる。いくつかの実施態様では、たとえば、タッチ入力、ジェスチャ入力、音声入力など、主画像の特定の部分を識別するユーザ入力を直接受信してもよく、当該特定の部分に基づいて焦点距離を判断してもよい。ブロック514の後にブロック516が続いてもよい。
ブロック516では、たとえば画像メタデータの一部としてファイルコンテナに格納されたレンズ焦点モデルに基づいて、主画像を修正してもよい。たとえば、主画像を修正して、たとえば画像において目標焦点距離よりも距離が遠い場所にあるオブジェクトをぼやけさせるポートレートエフェクト;たとえば主画像を撮影したカメラから目標焦点距離とは異なる距離にある画像のオブジェクトをぼやけさせるぼけエフェクト;その他の選択的ブラーエフェクトなどを適用してもよい。また、目標距離に基づくその他の種類のエフェクト、たとえば、カラーエフェクト、フィルタなどを適用してもよい。
いくつかの実施態様では、エフェクトは、画像メタデータにある深度マップに格納されたFocalTableに基づいてもよい。目標焦点距離が、FocalTableに含まれる距離に対応する場合、FocalTableを簡易検索することによって錯乱円の半径を取得してもよい。目標焦点距離がFocal Tableに含まれていない場合、利用可能な距離、たとえば、目標焦点距離に最も近い距離に対応する半径の値を取得してもよい。たとえば、FocalTableが、近景および遠景について、距離と半径とのペアを含む場合、これらの値を取得する。次に、取得した値間の補間に基づいて、目標焦点距離についての半径の値を求める。たとえば、線形補間を実行して、目標焦点距離についての半径の値を取得してもよい。このように求められた半径の値を用いて、エフェクトを適用し、たとえば主画像をぼやけさせる。ブロック516の後にブロック518が続いてもよい。
ブロック518では、修正画像を表示させる。いくつかの実施態様では、ブロック518の後にブロック514が続いて、たとえば、異なる目標焦点距離を示すさらなる入力をユーザに提供させてもよい。
いくつかの実施態様では、ブロック510の後にブロック522が続いてもよい。ブロック522では、たとえば、クライアントデバイスのディスプレイ画面上に画像データからの主画像を表示させる。いくつかの実施態様では、ユーザがユーザ入力を行うことが可能になるユーザインターフェースに主画像が表示されてもよい。ブロック522の後にブロック524が続いてもよい。
ブロック524では、切り抜き操作またはサイズ変更操作を示すユーザ入力を受信してもよい。たとえば、ユーザインターフェースは、ユーザが切り抜き操作またはサイズ変更操作を示すことが可能になる1つ以上のユーザインターフェース要素を含んでもよい。たとえば、ユーザは、主画像の画素のサブセットを選択するための形(たとえば、切り抜き用の四角形)を描くことによって切り抜き(主画像の1つ以上の部分を除去する)操作を示してもよい。別の例では、ユーザは、主画像の1つ以上の隅またはエッジをドラッグすることによって、サイズ変更(主画像のサイズを大きくする)操作を示してもよい。ユーザが切り抜き操作またはサイズ変更操作の入力を行うことが可能になるその他の種類のユーザインターフェースが提供されてもよい。ブロック524の後にブロック526が続いてもよい。
ブロック526では、ブロック524で受信したユーザ入力に基づいて、主画像を修正(切り抜きおよび/またはサイズ変更)する。ブロック526の後にブロック528が続いてもよい。
ブロック528では、修正された主画像に基づいて深度マップを更新する。たとえば、主画像の切り抜かれた(除去された)部分に対応する深度マップの部分を削除してもよい。サイズ変更操作の場合、修正された主画像に適用されたサイズ変更に基づいて深度マップが更新されてもよい。ブロック528の後にブロック530が続いてもよい。
ブロック530では、ファイルコンテナを更新して、修正された主画像および更新された深度マップを格納してもよい。
いくつかの実施態様では、ブロック510の後にブロック542が続いてもよい。ブロック542では、たとえばコンピュータビジョン技術を用いて3次元画像を生成する。ファイルコンテナから取得した画像データ(主画像、1つ以上の副画像、および深度情報を含み得る)を利用してこの3次元画像を生成する。たとえば、深度情報に複数の深度マップが含まれてもよい。各深度マップは、画像を撮影するときに1つのカメラを用いて動きから生成され、画像メタデータに埋め込まれてもよい。別の例では、1つ以上の深度カメラを用いて複数の深度マップが生成されてもよい。複数の深度マップを利用して3Dシーンを再構築することができる。ブロック542の後にブロック544が続いてもよい。
ブロック544では、3次元画像を表示する。ブロック544の後にブロック546が続いてもよい。
ブロック546では、傾き操作またはパン操作を示すユーザ入力を受信してもよい。たとえば、クライアントデバイスの1つ以上のセンサ、たとえば、ジャイロスコープ、加速度計、ジェスチャセンサ、タッチスクリーン、またはその他のセンサを介してユーザ入力を受信してもよい。ブロック546の後にブロック548が続いてもよい。
ブロック548では、ユーザ入力に基づいて更新された3次元画像を生成してもよい。画像が3次元であるという性質により、オブジェクトにしっかり深度を持たせることが可能になり、かつ、オブジェクトが動き回ったときに画像に含まれるその他のオブジェクトを遮るように画像を表示することが可能になる。いくつかの実施態様では、このエフェクトは、3Dジオラマをのぞくことに似ている。ブロック548の後にブロック550が続いてもよい。
ブロック550では、更新された3次元画像を表示してもよい。いくつかの実施態様では、ブロック550の後にブロック546が続いて、さらなるユーザ入力を受信してもよい。
いくつかの実施態様では、ブロック510の後にブロック562が続いてもよい。ブロック562では、たとえば、クライアントデバイスのディスプレイ画面上に画像データからの主画像を表示させる。いくつかの実施態様では、ユーザがユーザ入力を行うことが可能になるユーザインターフェースに主画像が表示されてもよい。ブロック522の後にブロック524が続いてもよい。
ブロック564では、画像に含まれる1つ以上のオブジェクトの選択を示すユーザ入力を受信してもよい。たとえば、ユーザは、ポインティングデバイス、タッチスクリーン、ジェスチャインターフェース、音声などを用いてオブジェクトを選択してもよい。ブロック564の後にブロック566が続いてもよい。
ブロック566では、ユーザが選択したオブジェクト(複数可)に対応するセグメンテーションマスクを生成する。セグメンテーションマスクは、オブジェクトに対応する主画像の画素のサブセットを識別してもよい。セグメンテーションマスクは、複数の深度値を含む深度マップを用いて生成されてもよい。いくつかの実施態様では、各深度値は、主画像の特定の画素に対応してもよい。これらの実施態様では、セグメンテーションマスクを生成するステップは、深度値の閾値範囲内の深度値をそれぞれ有する主画像の画素を選択するステップを含んでもよい。たとえば、深度値の閾値範囲は、たとえば、深度情報と、画像の撮影中に用いられたカメラアプリケーションが適用した被写界深度エフェクトに関する情報とを利用した画像セグメンテーション手法を用いて識別されたオブジェクトに対応する最小深度値と最大深度値との間の範囲であってもよい。セグメンテーションマスクに基づいてオブジェクト画像が取得される。たとえば、このオブジェクトは、セグメンテーションマスクによって識別された主画像の画素のサブセットのみを含んでもよい。たとえば、図2Bを参照して、デプス画像230にある濃い花を利用して、画像220にある花をセグメント化してもよい。ブロック566の後にブロック568が続いてもよい。
ブロック568では、ユーザがオブジェクト画像を選択して1つ以上の操作、たとえば、表示画像からオブジェクトを除去するための切り取り操作、オブジェクトをコピーするためのコピー操作、またはオブジェクトを異なる画像または表示画像の異なる位置に挿入するための貼り付け操作を行うことを可能にするユーザインターフェースを提供する。
図6は、例示的なデバイス600のブロック図である。デバイス600は、本明細書において説明する1つ以上の特徴を実現するために使用され得る。一例において、デバイス600を用いて、クライアントデバイス、たとえば、図1に示すクライアントデバイス(120、122、124、126)のうちのいずれかを実装してもよい。あるいは、デバイス600は、サーバ装置、たとえば、サーバ104を実装し得る。いくつかの実施態様では、デバイス600を用いて、クライアントデバイス、サーバ装置、またはクライアントおよびサーバ装置の両方を実装してもよい。デバイス600は、上述した任意の適切なコンピュータシステム、サーバ、またはその他の電子機器もしくはハードウェア装置であり得る。
本明細書において説明する1つ以上の方法は、任意の種類のコンピューティングデバイス上で実行できるスタンドアロンプログラム、ウェブブラウザ上で動作するプログラム、モバイルコンピューティングデバイス(たとえば、携帯電話、スマートフォン、タブレットコンピュータ、ウェアラブルデバイス(腕時計、アームバンド、装身具、帽子、仮想現実ゴーグルまたは眼鏡、拡張現実ゴーグルまたは眼鏡、ヘッドマウントディスプレイなど)、ラップトップコンピュータなど)上で動作する携帯アプリケーション(「アプリ」)であり得る。一例において、クライアント/サーバアーキテクチャを用いることができ、たとえば、(クライアントデバイスとしての)モバイルコンピューティングデバイスが、ユーザ入力データをサーバ装置に送信し、出力用(たとえば、表示用)の最終出力データを当該サーバから受信する。別の例では、モバイルコンピューティングデバイス上のモバイルアプリ(および/またはその他のアプリ)内ですべての計算が行われ得る。別の例では、計算を、モバイルコンピューティングデバイスと1つ以上のサーバ装置とに分担させ得る。
いくつかの実施態様では、デバイス600は、プロセッサ602と、メモリ604と、入出力(I/O)インターフェース606と、カメラ616とを備える。いくつかの実施態様では、カメラ616は、複数のカメラまたは複数のイメージセンサを含んでもよい。たとえばデバイス600が携帯電話、タブレット端末、またはコンピュータデバイスであった場合、たとえば、カメラ616は、フロントカメラとリアカメラとを含んでもよい。別の例では、カメラ616は、たとえばRGB画像を撮影するカメラ、たとえば赤外線またはその他の手法を用いて深度情報を撮影する深度カメラ、グレースケールカメラ、モノクロカメラなどを含んでもよい。
プロセッサ602は、プログラムコードを実行し、デバイス600の基本動作を制御するための1つ以上のプロセッサおよび/または1つ以上の処理回路であり得る。「プロセッサ」は、データ、信号、またはその他の情報を処理する任意の適切なハードウェアシステム、機構、または構成要素を含む。プロセッサは、(たとえば、シングルコア構成、デュアルコア構成、またはマルチコア構成の)1つ以上のコアを有する汎用CPU(Central Processing Unit)を備えたシステム、(たとえば、マルチプロセッサ構成の)複数の処理部、GPU(Graphics Processing Unit)、FPGA(Field-Programmable Gate Array)、ASIC(Application-Specific Integrated Circuit)、CPLD(Complex Programmable Logic Device)、機能を実現するための専用回路、ニューラルネットワークモデルベースの処理を実施するための専門プロセッサ、神経回路、行列計算(たとえば、行列乗算)に最適化されたプロセッサ、またはその他のシステムを含んでもよい。いくつかの実施態様では、プロセッサ602は、ニューラルネットワーク処理を実装する1つ以上のコプロセッサを含んでもよい。いくつかの実施態様では、プロセッサ602は、データを処理して確率に基づく出力を生成するプロセッサであってもよく、たとえば、プロセッサ602が生成する出力は、不正確であってもよく、予想出力から特定の範囲内で正確であってもよい。処理は、特定の地理的位置に限定される必要はなく、または、時間的制限がある必要はない。たとえば、プロセッサは、その機能を「リアルタイム」、「オフライン」、「バッチモード」などで実行してもよい。処理の一部は、異なる(または同じ)処理システムによって、異なるタイミングで異なる場所において実行されてもよい。コンピュータは、メモリと通信する任意のプロセッサであってもよい。
メモリ604は、通常、プロセッサ602がアクセスできるよう、デバイス600内に提供される。メモリ604は、RAM(Random Access Memory)、ROM(Read-Only Memory)、EEPROM(Electrical Erasable Read-only Memory)、フラッシュメモリなど、プロセッサによって実行される命令を格納するのに適した任意の適切なプロセッサ読み取り可能な記憶媒体であってもよく、プロセッサ602とは別個に位置していてもよく、および/またはプロセッサ602と一体化されていてもよい。メモリ604は、オペレーティングシステム608、機械学習アプリケーション630、その他のアプリケーション612、およびアプリケーションデータ614を含む、プロセッサ602によってサーバ装置600上で操作されるソフトウェアを格納し得る。
その他のアプリケーション612は、カメラアプリケーション、画像ギャラリー、画像管理、または画像ライブラリアプリケーション、メディア共有アプリケーション、データ表示エンジン、ウェブホスティングエンジン、画像表示エンジン、通知エンジン、ソーシャルネットワーキングエンジンなどのアプリケーションを含んでもよい。いくつかの実施態様では、機械学習アプリケーション630およびその他のアプリケーション612は、各々、プロセッサ602が本明細書に記載の機能、たとえば、図4および図5の方法の一部またはすべてを実行することを可能にする命令を含み得る。たとえば、任意の種類のコンピューティングデバイス上で動作できるスタンドアロンコンピュータプログラムとして、ウェブページを有するウェブアプリケーションとして、モバイルコンピューティングデバイス上で動作する携帯アプリケーション(「アプリ」)としてなど、本明細書において開示する1つ以上の方法は、いくつかの環境およびプラットフォームにおいて動作できる。
様々な実施態様では、機械学習アプリケーション630は、ベイズ分類器、サポートベクターマシン、ニューラルネットワーク、またはその他の学習手法を利用してもよい。いくつかの実施態様では、機械学習アプリケーション630は、訓練済みモデル634と、推論エンジン636と、データ632とを含んでもよい。
いくつかの実施態様では、データ632は、訓練データ、たとえば、訓練済みモデル634を生成するために用いられるデータを含んでもよい。たとえば、訓練データは、文字、画像、音声、動画など、任意の種類のデータを含んでもよい。訓練データは、任意のソース、たとえば、訓練用に明確に記されたデータリポジトリ、機械学習用の訓練データとして用いるための許可が与えられたデータなどから取得されてもよい。1人以上のユーザが機械学習モデル、たとえば、訓練済みモデル634を訓練するためにそれぞれのユーザデータの利用を許可している実施態様では、訓練データは、ユーザデータを含んでもよい。ユーザがそれぞれのユーザデータの利用を許可している実施態様では、データ632は、画像/動画または画像メタデータ/動画メタデータ(たとえば、動画、他のユーザとの動画共有に関するデータ、動画に対応付けられたラベル、動画コラージュ、ストーリーなど、動画ベースの作品が動画から生成されたかどうかなど)、コミュニケーション(たとえば、電子メール;テキストメッセージ、音声、動画などのチャットデータなど)、文書(たとえば、表計算、テキスト文書、プレゼンテーションなど)など、許可データを含んでもよい。
いくつかの実施態様では、訓練データは、訓練されているという状況下におけるユーザの入力または活動に基づいていないデータ、たとえば、シミュレーション動画またはコンピュータによって生成された動画から生成されたデータなど、訓練目的で生成された合成データを含んでもよい。いくつかの実施態様では、機械学習アプリケーション630は、データ632を除外する。たとえば、これらの実施態様では、訓練済みモデル634は、たとえば、異なるデバイス上で生成されて、機械学習アプリケーション630の一部として提供されてもよい。様々な実施態様では、訓練済みモデル634は、(たとえば、ニューラルネットワークノードの数および種類、ノード間の接続性、ならびに複数の層にノードを編成することを規定する)モデル構造またはモデル形態と、関連する重みとを含むデータファイルとして提供されてもよい。推論エンジン636は、訓練済みモデル634用のデータファイルを読み出して、訓練済みモデル634において指定されたモデル構造またはモデル形態に基づいたノード接続性、層、および重みを有するニューラルネットワークを実装してもよい。
また、機械学習アプリケーション630は、訓練済みモデル634を含んでもよい。いくつかの実施態様では、訓練済みモデルは、1つ以上のモデル形態または1つ以上のモデル構造を含んでもよい。たとえば、モデル形態またはモデル構造は、線形ネットワーク、複数の層(たとえば、入力層と出力層との間の「隠れ層」。各層が線形ネットワークである)を実装するディープニューラルネットワーク、畳み込みニューラルネットワーク(たとえば、入力データを複数の部分またはタイルに分割または仕切り、1つ以上のニューラルネットワーク層を用いて各タイルを別々に処理し、各タイルの処理から得られた結果を集約するネットワーク)、sequence-to-sequenceニューラルネットワーク(たとえば、1文に含まれる単語、1本の動画に含まれるフレームなど、順次データを入力として受信し、結果シーケンスを出力として生成するネットワーク)など、任意の種類のニューラルネットワークを含み得る。
モデル形態またはモデル構造は、様々なノード間の接続性、およびノードの層への編成を指定してもよい。たとえば、最初の層(たとえば、入力層)にあるノードは、データを入力データ632またはアプリケーションデータ614として受信してもよい。このようなデータは、たとえば複数のフレームを含む動画の解析に訓練済みモデルが用いられる場合、たとえばノード当たり1つ以上の画素を含み得る。後続の中間層は、モデル形態またはモデル構造で指定された接続性に従って、前の層のノードの出力を入力として受信してもよい。また、これらの層は、隠れ層とも呼ばれる。最後の層(たとえば、出力層)は、機械学習アプリケーションの出力を生成する。また、いくつかの実施態様では、モデル形態またはモデル構造は、各層におけるノードの数および/または種類を指定する。
それぞれ異なる実施態様では、訓練済みモデル634は、1つ以上のモデルを含み得る。モデルのうち、1つ以上のモデルは、モデル構造またはモデル形態に従って複数の層に配置された複数のノードを含んでもよい。いくつかの実施態様では、ノードは、たとえば、1単位の入力を処理して1単位の出力を生成するように構成された、メモリを有さない計算ノードであってもよい。ノードが行う計算は、たとえば、複数のノード入力の各々を重みで乗算するステップと、重み付き和を取得するステップと、バイアス値または切片値を用いて重み付き和を調整してノード出力を生成するステップとを含んでもよい。また、いくつかの実施態様では、ノードが行う計算は、調整された重み付き和にステップ/活性化関数を適用するステップを含んでもよい。いくつかの実施態様では、ステップ/活性化関数は、非線形関数であってもよい。様々な実施態様では、このような計算は、行列乗算などの演算を含んでもよい。いくつかの実施態様では、たとえば、マルチコアプロセッサに含まれる複数のプロセッサコアを使用したり、GPUまたは専門神経回路 の個々の処理部を使用したりして、複数のノードによる計算を並列して行ってもよい。いくつかの実施態様では、ノードは、メモリを含んでもよく、たとえば、1つ以上前の入力を格納して、後続の入力を処理する際に利用できてもよい。たとえば、メモリを有するノードは、LSTM(Long Short-Term Memory)ノードを含んでもよい。LSTMノードは、メモリを用いて、ノードがFSM(Finite State Machine)のように動作することを可能にする「状態」を維持してもよい。このようなノードを有するモデルは、たとえば、1文または1段落に含まれる複数の単語、1本の動画に含まれる複数のフレーム、会話またはその他の音声など、順次データを処理する際に役立つであろう。
いくつかの実施態様では、訓練済みモデル634は、個々のノードついて埋め込みまたは重みを含んでもよい。たとえば、モデルは、モデル形態またはモデル構造によって指定されるように複数の層に編成された複数のノードとして初期化されてもよい。初期化時、モデル形態に従って接続されたノードのペア、たとえば、ニューラルネットワークの連続した層に含まれる対のノード間の接続に、重みを適用してもよい。たとえば、それぞれの重みは、ランダムに割り当てられたり、デフォルト値に初期化されたりしてもよい。次に、モデルは、たとえばデータ632を用いて訓練されて、結果を生成してもよい。
たとえば、訓練するステップは、教師あり学習手法を適用するステップを含んでもよい。教師あり学習では、訓練データは、複数の入力(たとえば、動画のセット)と、入力ごとに対応する予想出力(たとえば、動画ごとに1つ以上のラベル)とを含み得る。たとえば、同様の入力が与えられた場合にモデルが予想出力を生成する確率を上げるよう、モデルの出力を予想出力と比較することに基づいて重みの値が自動的に調整される。
いくつかの実施態様では、訓練するステップは、教師なし学習手法を適用するステップを含んでもよい。教師なし学習では、入力データのみが与えられ、モデルは、データを区別する、たとえば、入力データを複数の群にクラスタリングするように訓練されてもよい。各群は、なんらかの形で類似する入力データを含んでいる。
様々な実施態様では、訓練済みモデルは、モデル構造に対応する重みのセットまたは埋め込みのセットを含む。データ632が除外されている実施態様では、機械学習アプリケーション630は、たとえば、機械学習アプリケーション630の開発者、サードパーティなどによる事前の訓練に基づいた訓練済みモデル634を含んでもよい。いくつかの実施態様では、訓練済みモデル634は、たとえば重みを提供するサーバからダウンロードされた、固定の重みセットを含んでもよい。
また、機械学習アプリケーション630は、推論エンジン636を含む。推論エンジン636は、アプリケーションデータ614(たとえば、動画)など、データに訓練済みモデル634を適用して、推論を提供するように構成される。いくつかの実施態様では、推論エンジン636は、プロセッサ602によって実行されるソフトウェアコードを含んでもよい。いくつかの実施態様では、推論エンジン636は、プロセッサ602が訓練済みモデルを適用することを可能にする(たとえば、プログラマブルプロセッサ、FPGA(Field Programmable Gate Array)などの)回路構成を指定してもよい。いくつかの実施態様では、推論エンジン636は、ソフトウェア命令、ハードウェア命令、または組合せを含んでもよい。いくつかの実施態様では、推論エンジン636は、オペレーティングシステム608および/またはその他のアプリケーション612が推論エンジン636を呼び出して、たとえば、訓練済みモデル634をアプリケーションデータ614に適用して推論を生成するために用いることができるAPI(Application Programming Interface)を提供してもよい。
いくつかの実施態様では、機械学習アプリケーション630をオフラインで実装してもよい。これらの実施態様では、訓練済みモデル634を第1段階で生成し、機械学習アプリケーション630の一部として提供してもよい。いくつかの実施態様では、機械学習アプリケーション630をオンラインで実装してもよい。たとえば、このような実施態様では、機械学習アプリケーション630(たとえば、オペレーティングシステム608、その他のアプリケーション612のうちの1つ以上のアプリケーションなど)を呼び出すアプリケーションが、機械学習アプリケーション630が生成した推論を利用、たとえば、推論をユーザに提供してもよく、システムログ(たとえば、ユーザによって許可されている場合、推論に基づいてユーザがとる行動;または、さらに処理を行うための入力として利用される場合、当該さらに行う処理の結果)を生成してもよい。システムログは、たとえば、1時間ごと、1ヶ月ごと、四半期ごとなど、定期的に生成されてもよく、ユーザの許可がある場合、訓練済みモデル634を更新する、たとえば、訓練済みモデル634用の埋め込みを更新するために用いられてもよい。
いくつかの実施態様では、機械学習アプリケーション630が実行されるデバイス600の特定の構成に適応できるように機械学習アプリケーション630を実装してもよい。たとえば、機械学習アプリケーション630は、使用可能な計算リソース、たとえば、プロセッサ602を利用する計算グラフを求めてもよい。たとえば、機械学習アプリケーション630が複数のデバイス上の分散アプリケーションとして実装された場合、機械学習アプリケーション630は、個々のデバイス上で計算を最適化する方法で行われる計算を求めてもよい。別の例では、機械学習アプリケーション630は、プロセッサ602が特定の数のGPUコア(たとえば、1000個)を有するGPUを含んでおり、(たとえば、1000個の個々のプロセスまたはスレッドとして)それに応じて推論エンジンを実装していると判断してもよい。
いくつかの実施態様では、機械学習アプリケーション630は、訓練済みモデルの一式を実装してもよい。たとえば、訓練済みモデル634は、同じ入力データに各々が適用可能な複数の訓練済みモデルを含んでもよい。これらの実施態様では、機械学習アプリケーション630は、たとえば、使用可能な計算リソース、前の推論を用いた場合の成功率などに基づいて特定の訓練済みモデルを選んでもよい。いくつかの実施態様では、機械学習アプリケーション630は、複数の訓練済みモデルが適用されるよう、推論エンジン636を実行してもよい。これらの実施態様では、機械学習アプリケーション630は、たとえば、各訓練済みモデルを適用することによって得られる出力に得点を付ける多数決を用いて、または1つ以上の特定の出力を選ぶことによって、個々のモデルを適用することから得られる出力を組み合わせてもよい。さらには、これらの実施態様では、機械学習アプリケーションは、個々の訓練済みモデルを適用する時間閾値(たとえば、0.5ms)を適用して、時間閾値内で使用可能な個々の出力のみを利用してもよい。時間閾値内に受信しなかった出力は、使用しなくてもよく、たとえば破棄してもよい。たとえば、このような手法は、たとえばオペレーティングシステム608または1つ以上のアプリケーション612によって機械学習アプリケーションを呼び出している間に指定された時間制限が存在する場合に適しているであろう。いくつかの実施態様では、機械学習アプリケーション630は、呼び出し中のアプリケーション、たとえば、オペレーティングシステム608または1つ以上のアプリケーション612によって指定されたフォーマットに基づいて出力を生成してもよい。いくつかの実施態様では、呼び出し中のアプリケーションは、別の機械学習アプリケーションであってもよい。たとえば、このような構成は、呼び出し中の機械学習アプリケーションが機械学習アプリケーション630からの出力を用いて訓練される、または、機械学習アプリケーション630が呼び出し中の機械学習アプリケーションからの出力を用いて訓練される敵対的生成ネットワークにおいて用いられてもよい。
メモリ604にあるソフトウェアを、代わりにその他の適した記憶位置またはコンピュータ読み取り可能な媒体上に格納することができる。これに加えて、メモリ604(および/もしくはその他の接続された記憶装置(複数可))は、本明細書において説明した特徴において用いられる1つ以上のメッセージ、1つ以上の分類法、電子百科事典、辞書、類語辞典、ナレッジベース、メッセージデータ、文法、ユーザの好み、ならびに/またはその他の命令およびデータを格納することができる。メモリ604およびその他の種類のストレージ(磁気ディスク、光ディスク、磁気テープ、もしくはその他の有形の媒体)は、「ストレージ」もしくは「記憶装置」とみなされ得る。
I/Oインターフェース606は、サーバ装置600をその他のシステムおよびデバイスとインターフェース接続することを可能にする機能を提供できる。インターフェース接続されたデバイスを、デバイス600の一部として含めることができる。または、インターフェース接続されたデバイスは、別個であり得、デバイス600と通信を行うことができる。たとえば、ネットワーク通信装置、記憶装置(たとえば、メモリ)、ならびに入出力装置は、I/Oインターフェース606を介して通信を行うことができる。いくつかの実施態様では、I/Oインターフェースは、入力装置(キーボード、ポインティングデバイス、タッチスクリーン、マイクロフォン、カメラ、スキャナ、センサなど)および/または出力装置(表示装置、スピーカ装置、プリンタ、モーターなど)など、インターフェース装置に接続することができる。
I/Oインターフェース606に接続できるインターフェース接続されたデバイスのいくつかの例として、画像、動画など、コンテンツを表示するために用いることができる1つ以上の表示装置620、および/または本明細書において説明した出力アプリケーションのユーザインターフェースなどを挙げることができる。表示装置620は、ローカル接続(たとえば、表示バス)を介して、および/またはネットワーク接続された接続を介してデバイス600に接続することができ、任意の適切な表示装置であり得る。表示装置620は、LCD画面、LED画面、もしくはプラズマディスプレイ画面、CRT、テレビ、モニタ、タッチスクリーン、3Dディスプレイ画面、またはその他の表示装置デバイスなど、任意の適切な表示装置を含み得る。たとえば、表示装置620は、モバイル機器上に提供されるフラットディスプレイ画面、ゴーグルまたはヘッドセット装置において備えられる複数のディスプレイ画面、または、コンピュータデバイスのモニタ画面であり得る。
I/Oインターフェース606は、その他の入力装置および出力装置にインターフェース接続することができる。いくつかの例として、画像を撮影できる1つ以上のカメラなどが挙げられる。いくつかの実施態様は、(たとえば、撮影画像の一部 、音声コマンドなどとして)音を記録するためのマイクロフォン、音を出力するためのオーディオスピーカ装置、またはその他の入力装置および出力装置を提供することができる。
カメラ616は、複数のフレームを含む動画を撮影できる任意の種類のカメラであってもよい。本明細書において使用するとき、カメラは、任意の撮像装置を含み得る。いくつかの実施態様では、カメラ616は、たとえば、正面レンズ対背面レンズ、異なるズームレベル、撮影画像の画像解像度など、異なる能力を有する複数のレンズまたは複数のイメージセンサを含んでもよい。いくつかの実施態様では、デバイス600は、深度センサ、加速度計、位置センサ(たとえば、GPS)、ジャイロスコープなど、1つ以上のセンサを含んでもよい。いくつかの実施態様では、これらの1つ以上のセンサをカメラとともに操作して、カメラを用いて撮影した動画の異なるフレームに対応するセンサ測定値を取得してもよい。
説明を容易にするために、図6は、プロセッサ602、メモリ604、I/Oインターフェース606、カメラ616、ならびにソフトウェアブロック608、612、および630の各々について1つのブロックを示す図である。これらのブロックは、1つ以上のプロセッサもしくは処理回路、1つ以上のオペレーティングシステム、1つ以上のメモリ、1つ以上のI/Oインターフェース、1つ以上のアプリケーション、および/または1つ以上のソフトウェアモジュールを表してもよい。その他の実施態様では、デバイス600は、図示した構成要素のすべてを有さなくてもよく、および/または、本明細書において示した要素の代わりまたはそれらに加えて、その他の種類の要素を含むその他の要素を有してもよい。いくつかの構成要素について、本明細書のいくつかの実施態様に記載したブロックおよび動作を行うと説明したが、ネットワーク環境100、デバイス600、同様のシステムの任意の適切な構成要素もしくは構成要素の組合せ、またはこのようなシステムに対応付けられた任意の適切な1つのプロセッサまたは複数プロセッサが、記載のブロックおよび動作を実行してもよい。
本明細書において説明する方法を、コンピュータ上で実行できるコンピュータプログラム命令またはコードによって実装することができる。たとえば、コードは、1つ以上のデジタルプロセッサ(たとえば、マイクロプロセッサまたはその他の処理回路)によって実装することができ、半導体メモリもしくは固体メモリ、磁気テープ、リムーバブルコンピュータディスク、RAM(Random Access Memory)、ROM(Read-Only Memory)、フラッシュメモリ、剛性磁気ディスク、光ディスク、固体メモリドライブなどを含む、磁気記憶媒体、光記憶媒体、電磁記憶媒体、もしくは半導体記憶媒体など、非一時的なコンピュータ読み取り可能な媒体(たとえば、記憶媒体)を含むコンピュータプログラムプロダクト上に格納することができる。また、プログラム命令は、たとえば、サーバ(たとえば、分散システムおよび/またはクラウドコンピューティングシステム)から配信されるSaaS(Software as a Service)形式の電気信号として含めることができ、電気信号として提供することができる。あるいは、1つ以上の方法をハードウェア(論理ゲートなど)で実現したり、ハードウェアとソフトウェアとの組合せで実現したりすることができる。例示的なハードウェアとして、プログラマブルプロセッサ(たとえば、FPGA(Field-Programmable Gate Array)、CPLD(Complex Programmable Logic Device))、汎用プロセッサ、グラフィックスプロセッサ、ASIC(Application Specific Integrated Circuit)などがあり得る。1つ以上の方法を、システム上で動作するアプリケーションのコンポーネントとしてまたはその一部として実行することができたり、その他のアプリケーションおよびオペレーティングシステムと連動して動作するアプリケーションまたはソフトウェアとして実行したりすることができる。
特定の実施態様の説明について記載したが、これらの特定の実施態様は、例示に過ぎず、限定ではない。例示した概念をその他の例および実施態様に適用してもよい。
本明細書に記載の特定の実施態様がユーザについての個人情報(たとえば、ユーザデータ、ユーザのソーシャルネットワークについての情報、ユーザの位置およびユーザが当該位置にいるときの時刻、ユーザの生体情報、ユーザの活動およびデモグラフィック情報)を収集または使用し得る状況では、ユーザには、情報を収集してもよいかどうか、個人情報を保存してもよいかどうか、個人情報を利用してもよいかどうか、ならびにユーザについての情報がどのように収集、格納、および利用されるかについて規制できる1つ以上の機会が与えられる。つまり、本明細書に記載のシステムならびに方法は、具体的には、関連のあるユーザからユーザ個人情報を収集、格納、および/または利用してもよいという明確な許可を受け取った際にそのようにする。
たとえば、プログラムもしくは特徴がユーザについてのユーザ情報または当該プログラムもしくは当該特徴に関連性のあるその他のユーザについてのユーザ情報を収集するかどうかについて、その特定のユーザが規制することができる。個人情報が収集される各ユーザには、そのユーザに関連性のある情報収集を規制できるオプション、情報を収集してもよいかどうか、および情報のどの部分を収集するかについての許可または承認が与えられるオプションなど、1つ以上のオプションが提示される。たとえば、ユーザには、1つ以上のこのような規制オプション通信ネットワーク上で与えることができる。これに加えて、個人を特定できる情報が取り除かれるよう、特定のデータを、格納または利用される前に1つ以上の方法で扱ってもよい。一例として、個人を特定できる情報が特定できないようにユーザの身元を扱ってもよい。別の例として、ユーザの特定の位置が特定できないよう、ユーザデバイスの地理的位置をより大きな地域に一般化してもよい。
なお、当業者に分かるように、本開示に記載の機能ブロック、動作、特徴、方法、デバイス、およびシステムを、システム、デバイス、および機能ブロックの異なる組合せに統合したり、分割したりしてもよい。任意の適切なプログラミング言語およびプログラミング技法を用いて特定の実施態様のルーチンを実装してもよい。手続き型またはオブジェクト指向など、異なるプログラミング技法を用いてもよい。このルーチンを1つの処理装置または複数のプロセッサ上で実行してもよい。ステップ、動作、または計算は、特定の順序で提示されているが、この順序は、異なる特定の実施態様において変更されてもよい。いくつかの実施態様では、本明細書において一続きで示した複数のステップまたは複数の動作が、同時に実行されもよい。