(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-09-22
(45)【発行日】2023-10-02
(54)【発明の名称】ビデオ通話用の顔ベースのフレームパッキング
(51)【国際特許分類】
H04N 7/14 20060101AFI20230925BHJP
G06T 7/00 20170101ALI20230925BHJP
H04N 21/234 20110101ALI20230925BHJP
H04N 21/845 20110101ALI20230925BHJP
【FI】
H04N7/14 150
G06T7/00 660A
H04N21/234
H04N21/845
(21)【出願番号】P 2022509165
(86)(22)【出願日】2019-10-31
(86)【国際出願番号】 US2019059200
(87)【国際公開番号】W WO2021034338
(87)【国際公開日】2021-02-25
【審査請求日】2022-02-25
(32)【優先日】2019-08-16
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】100142907
【氏名又は名称】本田 淳
(72)【発明者】
【氏名】カウアー、ディロン
【審査官】大西 宏
(56)【参考文献】
【文献】特開2003-346145(JP,A)
【文献】特開2006-197505(JP,A)
【文献】特開2013-031038(JP,A)
【文献】国際公開第2019/094184(WO,A1)
【文献】Mingliang Chen; Weiyao Lin; Xiaozhen Zheng; Xu Chen,A New Algorithm for Compressing Massive Region-of-Interest Location Information in Videos,2013 IEEE International Conference on Multimedia and Expo Workshops (ICMEW),米国,IEEE,2013年07月15日,https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=6618444
(58)【調査した分野】(Int.Cl.,DB名)
H04N 7/14 - 7/173
H04N 21/00 -21/858
G06T 7/00 - 7/90
(57)【特許請求の範囲】
【請求項1】
ビデオを符号化する方法であって、
人の顔を含むビデオフレームをキャプチャするステップと、
前記ビデオフレーム内の顔を検出するステップと、
前記ビデオフレームを複数の矩形に分割するステップと、前記複数の矩形は、顔に対応する画素を有する顔矩形を含んでおり、
前記複数の矩形に基づいて前記ビデオフレームをパッキングするステップと、ここで、前記複数の矩形の他の矩形と比較して、パッキングされた前記ビデオフレーム内のより多数の画素が、前記顔矩形に割り当てられ、
前記ビデオフレームをパッキングする前記ステップは、パッキングを記述するメタデータを生成することを含み、前記メタデータは、パッキングする前記ステップの前の前記ビデオフレーム内の顔の中心の位置である顔変換の中心と、パッキングする前記ステップの前の前記顔矩形のサイズである顔変換のx/yスケールとを記述し、
複数の前記ビデオフレーム間の顔の動きが動きの量の閾値を下回っている限り、前記メタデータを再計算することなく、前記複数の矩形に基づいて1つまたは複数の後続フレームをパッキングすることによってパッキングを継続するステップと、
パッキングされた前記ビデオフレームを符号化するステップと、を含み、ここで、符号化された前記ビデオフレームは、パッキングを記述する
前記メタデータを含んでいる、方法。
【請求項2】
前記メタデータは、前記顔矩形の中心およびスケールの記述を含む、請求項1に記載の方法。
【請求項3】
前記ビデオフレームをパッキングした後、前記複数の矩形の各々の周囲にパディング画素を追加するステップをさらに含む、請求項1に記載の方法。
【請求項4】
前記ビデオフレームをパッキングするステップは、前記ビデオフレームをソーステクスチャとして使用することを含む、請求項1に記載の方法。
【請求項5】
前記複数の矩形が、顔の左方の矩形、顔の右方の矩形、顔の上方の矩形、または顔の下方の矩形のうちの少なくとも1つをさらに含む、請求項1に記載の方法。
【請求項6】
符号化された前記ビデオフレームを受信機に送信するステップをさらに含み、
ここで、前記メタデータは、逆パッキングを実行して、表示画面上の対応する位置に前記複数の矩形を表示するために前記受信機によって読み取り可能であり、
ここで、
前記対応する位置は、顔の左方の位置、顔の右方の位置、顔の上方の位置、または顔の下方の位置のうちの少なくとも1つを含む、請求項1に記載の方法。
【請求項7】
前記ビデオフレームが第1のビデオフレームであり、方法はさらに、
第2のビデオフレームを
含む前記1つまたは複数の後続のフレームをキャプチャするステップと、
前記第2のビデオフレーム
を含む前記1つまたは複数の後続のフレームの各ビデオフレーム内の動き量が動き量の閾値を満たしたことに応答して
、前記第2のビデオフレーム
を含む前記1つまたは複数の後続のフレームの各ビデオフレームに対して顔検出、パッキング、および符号化を実行するステップと、を含む、請求項1に記載の方法。
【請求項8】
顔を検出するステップは、ビデオフレーム上で赤緑青(RGB)顔追跡を実行することを含む、請求項1に記載の方法。
【請求項9】
前記複数の矩形に基づいて1つまたは複数の後続フレームをパッキングすることは、
人の顔を含む
前記1つまたは複数の後続のフレームを分割するステップと、
1つまたは複数の後続
の矩形を生成するステップと、
前記
1つまたは複数の後続
の矩形に基づいて前記
1つまたは複数の後続のフレームをパッキングするステップと、
パッキングを記述する前記メタデータを使用して、
1つまたは複数の後続のビデオフレームを符号化するステップと、を含む、請求項1に記載の方法。
【請求項10】
1つまたは複数のコンピュータによる実行時に、前記1つまたは複数のコンピュータに処理を実行させる命令が格納された非一時的なコンピュータ可読
記憶媒体であって、前記処理は、
人の顔を含むビデオフレームをキャプチャするステップと、
前記ビデオフレーム内の顔を検出するステップと、
前記ビデオフレームを複数の矩形に分割するステップと、前記複数の矩形は、顔に対応する画素を有する顔矩形を含んでおり、
前記複数の矩形に基づいて前記ビデオフレームをパッキングするステップと、ここで、前記複数の矩形の他の矩形と比較して、パッキングされた前記ビデオフレーム内のより多数の画素が、前記顔矩形に割り当てられ、
前記ビデオフレームをパッキングする前記ステップは、パッキングを記述するメタデータを生成することを含み、前記メタデータは、パッキングする前記ステップの前の前記ビデオフレーム内の顔の中心の位置である顔変換の中心と、パッキングする前記ステップの前の前記顔矩形のサイズである顔変換のx/yスケールとを記述し、
複数の前記ビデオフレーム間の顔の動きが動きの量の閾値を下回っている限り、前記メタデータを再計算することなく、前記複数の矩形に基づいて1つまたは複数の後続フレームをパッキングすることによってパッキングを継続するステップと、
パッキングされた前記ビデオフレームを符号化するステップと、を含み、ここで、符号化された前記ビデオフレームは、パッキングを記述する
前記メタデータを含んでいる、コンピュータ可読
記憶媒体。
【請求項11】
前記メタデータは、前記顔矩形の中心およびスケールの記述を含む、請求項
10に記載のコンピュータ可読
記憶媒体。
【請求項12】
前記処理がさらに、前記ビデオフレームをパッキングした後、前記複数の矩形の各々の周囲にパディング画素を追加するステップをさらに含む、請求項
10に記載のコンピュータ可読
記憶媒体。
【請求項13】
前記複数の矩形が、顔の左方の矩形、顔の右方の矩形、顔の上方の矩形、または顔の下方の矩形のうちの少なくとも1つをさらに含む、請求項
10に記載のコンピュータ可読
記憶媒体。
【請求項14】
システムであって、
1つまたは複数のプロセッサと、
前記1つまたは複数のプロセッサによる実行時に、前記1つまたは複数のプロセッサに処理を実行させる命令を格納するメモリと、を備え、前記処理は、
人の顔を含むビデオフレームをキャプチャするステップと、
前記ビデオフレーム内の顔を検出するステップと、
前記ビデオフレームを複数の矩形に分割するステップと、前記複数の矩形は、顔に対応する画素を有する顔矩形を含んでおり、
前記複数の矩形に基づいて前記ビデオフレームをパッキングするステップと、ここで、前記複数の矩形の他の矩形と比較して、パッキングされた前記ビデオフレーム内のより多数の画素が、前記顔矩形に割り当てられ、
前記ビデオフレームをパッキングする前記ステップは、パッキングを記述するメタデータを生成することを含み、前記メタデータは、パッキングする前記ステップの前の前記ビデオフレーム内の顔の中心の位置である顔変換の中心と、パッキングする前記ステップの前の前記顔矩形のサイズである顔変換のx/yスケールとを記述し、
複数の前記ビデオフレーム間の顔の動きが動きの量の閾値を下回っている限り、前記メタデータを再計算することなく、前記複数の矩形に基づいて1つまたは複数の後続フレームをパッキングすることによってパッキングを継続するステップと、
パッキングされた前記ビデオフレームを符号化するステップと、を含み、ここで、符号化された前記ビデオフレームは、パッキングを記述する
前記メタデータを含んでいる、システム。
【請求項15】
前記メタデータは、前記顔矩形の中心およびスケールの記述を含む、請求項
14に記載のシステム。
【請求項16】
前記処理がさらに、前記ビデオフレームをパッキングした後、前記複数の矩形の各々の周囲にパディング画素を追加するステップをさらに含む、請求項
14に記載のシステム。
【請求項17】
前記複数の矩形が、顔の左方の矩形、顔の右方の矩形、顔の上方の矩形、または顔の下方の矩形のうちの少なくとも1つをさらに含む、請求項
14に記載のシステム。
【発明の詳細な説明】
【背景技術】
【0001】
モバイルビデオ通話では、スマートフォン、タブレット、またはその他のデバイスの前面カメラをモバイルビデオ通話のビデオソースとして使用する割合が高い。多くの場合、モバイルデバイスでは、ビデオ通話に使用可能なネットワーク機能(例えば、帯域幅)が制限されることがあり得る。さらに、一部のモバイルデバイスには、処理能力の制限、バッテリ電力の制限など、他の制約があり得る。このような状況では、モバイルデバイスによってキャプチャされたビデオフレームを符号化し、ビデオ通話において符号化されたフレームを送信することは、そのような要因によって制約され、例えば、ブロック様のビデオ、低解像度のビデオ、ジッタを有するビデオなどとして示される低品質を有するビデオの送信をもたらすこととなり、ビデオ通話における他の当事者に対して低品質のビデオ視聴体験を提供することとなり得る。
【0002】
本明細書で提供される背景技術の説明は、本開示に関する状況を概略的に提示することを目的としている。この背景技術の欄に記載されている範囲において、本願の発明者の研究内容は、出願時に先行技術として適格ではあり得ない態様の記載と同様に、本開示に対して先行技術として明示的または暗示的に認められるものではない。
【発明の概要】
【0003】
実施形態は、概して、ビデオ通話アプリケーションにおいてビデオを符号化するための方法に関し、その方法は、人の顔を含むビデオフレームをキャプチャするステップを含む。方法は、ビデオフレーム内の顔を検出するステップをさらに含む。方法は、ビデオフレームを複数の矩形に分割するステップをさらに含み、複数の矩形は、ビデオフレーム内の顔に対応する画素を有する顔矩形を含む。方法は、複数の矩形に基づいてビデオフレームをパッキングするステップをさらに含み、ここで、複数の矩形内の他の矩形と比較して、パッキングされたビデオフレーム内のより多数の画素が、顔矩形に割り当てられる。方法は、パッキングされたビデオフレームを符号化するステップをさらに含み、ここで、符号化されたビデオフレームは、パッキングを記述するメタデータを含む。
【0004】
いくつかの実施形態では、メタデータは、顔矩形の中心およびスケールの記述を含む。いくつかの実施形態では、メタデータは、顔変換の中心および顔変換のx/yスケールを記述する。いくつかの実施形態では、方法は、ビデオフレームをパッキングした後、複数の矩形の各々の周囲にパディング画素を追加するステップをさらに含む。いくつかの実施形態では、ビデオフレームをパッキングするステップは、ビデオフレームをソーステクスチャとして使用することを含む。いくつかの実施形態では、複数の矩形が、顔の左方の矩形、顔の右方の矩形、顔の上方の矩形、または顔の下方の矩形のうちの少なくとも1つをさらに含む。いくつかの実施形態では、方法は、符号化されたビデオフレームを受信機に送信するステップをさらに含み、ここで、メタデータは、逆パッキングを実行して、表示画面上の対応する位置に複数の矩形を表示するために受信機によって読み取り可能であり、対応する位置は、顔の左方の位置、顔の右方の位置、顔の上方の位置、または顔の下方の位置のうちの少なくとも1つを含む。いくつかの実施形態では、方法は、n-1番目のビデオフレームを介した第2のビデオフレームをキャプチャし、n-1番目のビデオフレームを介した第2のビデオフレームの各ビデオフレーム内の動き量が動き量の閾値を満たしたことに応答して、n-1番目のビデオフレームを介した第2のビデオフレームの各ビデオフレームの顔検出、パッキング、および符号化を実行するステップをさらに含む。いくつかの実施形態では、顔を検出するステップは、ビデオフレーム上で赤緑青(RGB)顔追跡を実行することを含む。
【0005】
非一時的なコンピュータ可読媒体は、1つまたは複数のコンピュータによる実行時に、1つまたは複数のコンピュータに処理を実行させる命令を格納し得、処理は、人の顔を含むビデオフレームをキャプチャするステップと、ビデオフレーム内の顔を検出するステップと、ビデオフレームを複数の矩形に分割するステップと、複数の矩形は、ビデオフレーム内の顔に対応する画素を有する顔矩形を含んでおり、複数の矩形に基づいてビデオフレームをパッキングするステップと、ここで、複数の矩形内の他の矩形と比較して、パッキングされたビデオフレーム内のより多数の画素が顔矩形に割り当てられ、パッキングされたビデオフレームを符号化するステップと、を含み、符号化されたビデオフレームは、パッキングを記述するメタデータを含む。
【0006】
いくつかの実施形態では、メタデータは、顔矩形の中心およびスケールの記述を含む。いくつかの実施形態では、メタデータは、顔変換の中心および顔変換のx/yスケールを記述する。処理は、ビデオフレームをパッキングした後、複数の矩形の各々の周囲にパディング画素を追加するステップをさらに含み得る。いくつかの実施形態では、複数の矩形が、顔の左方の矩形、顔の右方の矩形、顔の上方の矩形、または顔の下方の矩形のうちの少なくとも1つをさらに含む。
【0007】
システムは、1つまたは複数のプロセッサと、1つまたは複数のプロセッサによる実行時に、1つまたは複数のプロセッサに、処理を実行させる命令を格納するメモリと、を備え、処理は、人の顔を含むビデオフレームをキャプチャするステップと、ビデオフレーム内の顔を検出するステップと、ビデオフレームを複数の矩形に分割するステップと、複数の矩形は、ビデオフレーム内の顔に対応する画素を有する顔矩形を含んでおり、複数の矩形に基づいてビデオフレームをパッキングするステップと、ここで、複数の矩形内の他の矩形と比較して、パッキングされたビデオフレーム内のより多数の画素が顔矩形に割り当てられ、パッキングされたビデオフレームを符号化するステップと、を含み、符号化されたビデオフレームには、パッキングを記述するメタデータを含む。
【0008】
いくつかの実施形態では、メタデータは、顔矩形の中心およびスケールの記述を含む。いくつかの実施形態では、メタデータは、顔変換の中心および顔変換のx/yスケールを記述する。処理は、ビデオフレームをパッキングした後、複数の矩形の各々の周囲にパディング画素を追加するステップをさらに含み得る。処理は、ビデオフレームをパッキングした後に、複数の矩形の各々の周囲にパディング画素を追加するステップをさらに含み得る。いくつかの実施形態では、複数の矩形が、顔の左方の矩形、顔の右方の矩形、顔の上方の矩形、または顔の下方の矩形のうちの少なくとも1つをさらに含む。
【0009】
以下に説明する様々な実施形態は、いくつかの利点を有する。第一に、処理は、ビデオを符号化するユーザデバイスによって実行される。その結果、ビデオアプリケーションは、受信機デバイスに送信されるビデオのサイズを縮小する。第二に、ビデオアプリケーションがビデオ内の人の顔の品質を維持しながら、ビデオの他の部分の解像度を下げることで、ビデオサイズが小さくなる。
【図面の簡単な説明】
【0010】
本開示は、同様の参照番号が同様の構成要素を参照するために使用されている添付の図面の図において、限定ではなく、例示として図示されている。
【
図1】いくつかの実施形態による、ビデオが符号化される例示的な環境を示すブロック図である。
【
図2】いくつかの実施形態による、ビデオを符号化する例示的なコンピューティングデバイスを示すブロック図である。
【
図3A】いくつかの実施形態による、例示的なビデオフレームを示す図である。
【
図3B】いくつかの実施形態による、複数の矩形の例を示す図である。
【
図4】いくつかの実施形態による、符号化されたビデオを生成するための例示的な方法のフローチャートを示す図である。
【発明を実施するための形態】
【0011】
ネットワークを介してストリーミングできるほど十分にサイズが小さい高品質なビデオを提供するという課題を解決するために、本明細書では、人の顔を含むビデオフレームをキャプチャし、ビデオフレーム内の顔を検出する技術について説明する。いくつかの実施形態では、ビデオフレーム内の顔に対応する画素を含む顔矩形が形成される。ビデオフレームは複数の矩形に分割され、ここで、複数の矩形は顔矩形を含む。ビデオフレームは、複数の矩形に基づいてパッキングされ、ここで、複数の矩形のうちの他の矩形と比較して、パッキングされたビデオフレーム内のより多数の画素が、顔矩形に割り当てられる。このようにより多くの画素を顔矩形に割り当てることにより、パッキングされたビデオフレーム内のデータの多くの部分が顔に対応して、受信機による顔矩形のレンダリングをより高品質にすることができるという利点がある。ビデオフレームは、パッキングを記述するメタデータを用いて符号化される。
【0012】
例えば、元のビデオフレームの顔矩形が複数の矩形のうちの別の矩形と同じサイズである場合、パッキングされたビデオフレームにおいて顔矩形に割り当てられる画素数は、他の矩形に割り当てられる画素数よりも多くなるように選択され得る。例えば、各行に100個の画素があり、かつ100行の画素がある10,000個の画素を有する正方形のビデオフレームについて考えてみる。この例では、顔矩形が50x40画素で合計2,000画素であり、他の矩形がそれぞれ2,000画素であることが検出される。ビデオがサイズ変更される場合、例えば、送信用に、各行に50個の画素、100行で5,000画素に圧縮される場合、本明細書に記載された手法により、顔矩形は元のサイズの2000画素でパッキングされ、他の矩形の各々が750画素にサイズ変更されて、5,000画素のサイズのパッキングされたビデオフレームを取得するようにしてもよい。顔矩形に対してより多数の画素を提供することにより、顔矩形に対するパッキングされたビデオフレームの画像の品質は、他の矩形の品質よりも高くなり得る(例えば、この例では、元のビデオフレームの画像と同じ)。
【0013】
顔矩形は他の矩形よりも画素数が多いため、顔矩形は他の矩形よりも高い解像度で符号化される。これは、受信ユーザが顔を高品質で見ることができることを保証するには顔領域がより重要であることから、ビデオ通話中に良好なユーザエクスペリエンスを提供するのに有利である。顔の領域を他の領域よりも高い解像度で符号化することにより、符号化後のパッキングされたビデオの全体サイズが小さくなるため、より低い帯域幅要求でより良好なユーザエクスペリエンスが得られる。
【0014】
このように顔矩形を個別に符号化することなく同様のビデオエクスペリエンスを実現するためには、より大きなサイズのビデオを送信する必要があり、これは、より多くの処理および帯域幅のリソースを消費する可能性がある。さらに、ビデオ内の顔の位置を具体的に認識し、それに応じて顔矩形を調整することにより、記載された技法は、被写体が動くときに自動的に調整して、一貫した品質の顔領域のビデオを提供する。本明細書に記載される方法でビデオフレームをパッキングすることにより、従来のビデオ符号化技術をビデオ通話に使用することが可能となり、基本的な符号化メカニズムを変更することなく高品質の顔領域を提供することが可能となる。
【0015】
例示的な環境
図1は、符号化されたビデオが生成される例示的な環境100のブロック図を示す。図示の環境100は、ビデオサーバ101、ユーザデバイス115a、115n、およびネットワーク105を含む。ユーザ125a、125nは、個々のユーザデバイス115a、115nに関連付けられ得る。いくつかの実施形態では、環境100は、
図1に示されていない他のサーバまたはデバイスを含み得る。
図1および残りの図では、参照番号の後の文字、例えば「115a」は、その特定の参照番号を有する構成要素への参照を表している。本文中の参照番号に続く文字のないもの、例えば「115」は、その参照番号を有する構成要素の実施形態への一般的な参照を表す。
【0016】
ビデオサーバ101は、プロセッサ、メモリ、およびネットワーク通信ハードウェアを含み得る。いくつかの実施形態では、ビデオサーバ101はハードウェアサーバである。ビデオサーバ101は、信号線102を介してネットワーク105に通信可能に接続されている。信号線102は、イーサネット(登録商標)、同軸ケーブル、光ファイバケーブルなどの有線接続、またはWi-Fi(登録商標)、ブルートゥース(Bluetooth(登録商標))、または他の無線技術などの無線接続であり得る。いくつかの実施形態では、ビデオサーバ101は、ネットワーク105を介して1つまたは複数のユーザデバイス115a、115nとの間でデータを送受信する。ビデオサーバ101は、ビデオアプリケーション103aおよびデータベース199を含み得る。
【0017】
ビデオアプリケーション103aは、1つのユーザデバイス115aにおいて符号化されるビデオを生成し、かつ/または符号化されたビデオを別のユーザデバイス115nに送信するように動作可能なコードおよびルーチンを含み得る。いくつかの実施形態では、ビデオアプリケーション103aは、中央処理装置(CPU)、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、任意の他のタイプのプロセッサ、またはそれらの組み合わせを含むハードウェアを使用して実施され得る。いくつかの実施形態では、ビデオアプリケーション103aは、ハードウェアとソフトウェアの組み合わせを使用して実施され得る。
【0018】
データベース199は、ユーザデバイス115から受信した符号化されたビデオを含むビデオを保存し得る。ビデオを生成するクライアントデバイスに関連付けられているユーザがビデオの保存を許可すると、ビデオが保存される。データベース199は、インデックス付けされ、かつモバイルデバイス115のユーザ125の識別に関連付けられたビデオを保存し得る。例えば、ビデオは、ソーシャルネットワークのメンバーのプロファイルへのリンクを含む、ソーシャルネットワークのメンバーとしてのユーザ125を記述するメタデータと関連付けてインデックス付けされ得る。また、データベース199はユーザ125、ユーザ125のユーザ嗜好などに関連するソーシャルネットワークデータを保存し得る。
【0019】
本明細書で説明されるシステムおよび方法が、ユーザに関する個人情報(例えば、ユーザデータ、ユーザのソーシャルネットワークに関する情報、ビデオアプリケーション103によるビデオの保存および分析など)を収集または使用する可能性がある状況において、ユーザには、個人情報を収集するかどうか、個人情報を保存するかどうか、個人情報を使用するかどうか、画像またはビデオを分析するかどうか、ユーザに関する情報を収集、保存、および使用する方法について制御する機会が提供される。即ち、本明細書で説明されるシステムおよび方法は、関連するユーザからそのようにするための明示的な承認を受け取った場合にのみ、ユーザの個人情報を収集、保存、および/または使用することができる。例えば、ユーザには、プログラムまたは機能が、その特定のユーザまたはプログラムまたは機能に関連する他のユーザに関するユーザ情報を収集するかどうかについての制御が提供される。個人情報が収集される各ユーザには、そのユーザに関連する情報収集についての制御を可能にし、情報が収集されるかどうか、および情報のどの部分が収集されるかについての許可または承認を提供するための1つまたは複数のオプションが提示される。例えば、通信ネットワークを介して1つまたは複数のそのような制御オプションをユーザに提供することができる。さらに、特定のデータは、保存または使用される前に個人を特定可能な情報が削除されるように、1つまたは複数の方法で処理され得る。
【0020】
ユーザデバイス115は、メモリおよびハードウェアプロセッサを含むコンピューティングデバイスであり得る。例えば、ユーザデバイス115は、デスクトップコンピュータ、モバイルデバイス、タブレットコンピュータ、携帯電話、ウェアラブルデバイス、ヘッドマウントディスプレイ、モバイル電子メールデバイス、ポータブルゲームプレーヤ、ポータブル音楽プレーヤ、リーダーデバイス、またはネットワーク105にアクセスすることが可能な別の電子デバイスを含み得る。
【0021】
図示の実施形態では、ユーザデバイス115aは、信号線108を介してネットワーク105に接続されており、ユーザデバイス115nは、信号線110を介してネットワーク105に接続されている。信号線108および110は、イーサネット(登録商標)、同軸ケーブル、光ファイバケーブルなどの有線接続、またはWi-Fi(登録商標)、ブルートゥース(Bluetooth(登録商標))、または他の無線技術などの無線接続であり得る。ユーザデバイス115a、115nは、ユーザ125a、125nによってそれぞれアクセスされる。
図1においてユーザデバイス115a、115nは、一例として使用されている。
図1は、2つのユーザデバイス115aおよび115nを示しているが、本開示は、1つまたは複数のユーザデバイス115を有するシステムアーキテクチャに適用される。
【0022】
いくつかの実施形態では、ユーザデバイス115は、ユーザ125によって装着されるウェアラブルデバイスであり得る。例えば、ユーザデバイス115nは、クリップ(例えば、リストバンド)の一部、宝石の一部、または眼鏡の一部として含まれる。別の例では、ユーザデバイス115nはスマートウォッチであり得る。ユーザ125nは、ビデオアプリケーション103cによって生成されたビデオを、ユーザ125nが装着するユーザデバイス115nのディスプレイ上で視聴することができる。
【0023】
いくつかの実施形態では、ユーザデバイス115aは、例えば、ビデオ通話のために、符号化されたビデオを生成するビデオアプリケーション103bを含み得る。ビデオアプリケーション103bは、人の顔を含むビデオフレームをキャプチャし、ビデオフレーム内の顔を検出し、ビデオフレーム内の顔に対応する画素を含む顔矩形を形成し、ビデオフレームを顔矩形を含む複数の矩形に分割し、複数の矩形に基づいて、複数の矩形内の他の矩形と比較して、より多数の画素が顔矩形に割り当てられる、ビデオフレームに対するパッキングを設定して、ビデオフレームを符号化し得る。ビデオアプリケーション103bは、例えば、ビデオ通話中にユーザデバイス115aによってキャプチャされた一連のビデオフレームからの追加のフレームに対してこのプロセスを繰り返し得る。
【0024】
ユーザデバイス115aは、例えば、複数の符号化されたビデオフレームを含むビデオストリームを、ネットワーク105を介したデオ通話中に、ユーザデバイス115nに直接、またはビデオサーバ101を介して送信し得る。ユーザデバイス115nは、符号化されたビデオを復号化し、復号化されたビデオを表示するビデオアプリケーション103cを含み得る。
【0025】
図示の実施形態では、環境100のエンティティは、ネットワーク105を介して通信可能に接続される。ネットワーク105は、従来型の、有線または無線であってもよく、スター構成、トークンリング構成または他の構成を含む多数の異なる構成を有してもよい。さらに、ネットワーク105は、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)(例えば、インターネット)、および/または複数のデバイスが通信し得る他の相互接続されたデータ経路を含み得る。いくつかの実施形態では、ネットワーク105は、ピアツーピアネットワークであり得る。ネットワーク105はまた、様々な異なる通信プロトコルでデータを送信するために、電気通信ネットワークの一部に接続され得るか、またはその一部を含み得る。いくつかの実施形態では、ネットワーク105は、ブルートゥース(Bluetooth(登録商標))通信ネットワーク、WiFi(登録商標)、IEEE902.11によって指定される無線ローカルエリアネットワーク(WLAN)コンピュータ通信、またはショートメッセージングサービス(SMS)、マルチメディアメッセージングサービス(MMS)、ハイパーテキスト転送プロトコル(HTTP)、直接データ接続、電子メールなどを介することを含んでデータを送受信するためのセルラー通信ネットワークを含む。
図1は、ユーザデバイス115およびビデオサーバ101に結合された1つのネットワーク105を示しているが、実際には、1つまたは複数のネットワーク105がこれらのエンティティに接続され得る。
【0026】
例示的なコンピューティングデバイス
図2は、符号化されたビデオを生成する例示的なコンピューティングデバイス200のブロック図を示す。コンピューティングデバイス200は、ユーザデバイス115またはビデオサーバ101であり得る。コンピューティングデバイス200は、プロセッサ235、メモリ237、通信ユニット239、カメラ241、ディスプレイ243、およびストレージデバイス247を含み得る。コンピューティングデバイス200の種類に応じて、追加の構成要素が存在してもよく、また、従前の構成要素の一部が省略されてもよい。ビデオアプリケーション103は、メモリ237に格納され得る。いくつかの実施形態では、コンピューティングデバイス200は、電池など、図面に記載されていない他の構成要素を含み得る。コンピューティングデバイス200の構成要素は、バス220によって通信可能に接続され得る。バス220は、コンピューティングデバイス200の様々な部分の間で信号を伝送する通信バスであり得る。
【0027】
プロセッサ235は、計算を実行して、ディスプレイデバイスに命令を提供するために、論理演算ユニット、マイクロプロセッサ、汎用コントローラ、または他のプロセッサアレイを含む。プロセッサ235は、データを処理するとともに、複合命令セットコンピュータ(CISC)アーキテクチャ、縮小命令セットコンピュータ(RISC)アーキテクチャ、または命令セットの組み合わせを実装するアーキテクチャを含む様々なコンピューティングアーキテクチャを含み得る。
図2は、単一のプロセッサ235を示しているが、複数のプロセッサ235が含まれ得る。異なる実施形態では、プロセッサ235は、シングルコアプロセッサまたはマルチコアプロセッサであり得る。他のプロセッサ(例えば、グラフィックス処理ユニット)、オペレーティングシステム、センサ、ディスプレイ、および/または物理構成は、コンピューティングデバイス200の一部であり得る。プロセッサ235は、信号線222を介して他の構成要素と通信するためにバス220に接続されている。
【0028】
メモリ237は、プロセッサ235によって実行され得る命令および/またはデータを格納する。命令は、本明細書に記載された技法を実行するためのコードおよび/またはルーチンを含み得る。メモリ237は、ダイナミックランダムアクセスメモリ(DRAM)デバイス、スタティックRAM、または他のメモリデバイスであり得る。いくつかの実施形態では、メモリ237はまた、スタティックランダムアクセスメモリ(SRAM)デバイスまたはフラッシュメモリなどの不揮発性メモリ、またはハードディスクドライブ、コンパクトディスク読み取り専用メモリ(CDROM)デバイス、DVDROMデバイス、DVDRAMデバイス、DVDRWデバイス、フラッシュメモリデバイス、またはより永続的に情報を保存するためのその他の大容量ストレージデバイスを含む同様の永続ストレージデバイスおよび媒体を含む。メモリ237は、ビデオアプリケーション103を実行するように動作可能なコードおよびルーチンを含み、これは、以下でより詳細に説明される。メモリ237は、信号線224を介して他の構成要素と通信するためにバス220に接続されている。
【0029】
通信ユニット239は、ビデオアプリケーション103が実行され得る場所に応じて、ユーザデバイス115およびビデオサーバ101のうちの少なくとも一方にデータを送信し、また、ユーザデバイス115およびビデオサーバ101のうちの少なくとも一方からデータを受信する。いくつかの実施形態では、通信ユニット239は、IEEE802.11、IEEE802.16、ブルートゥース(Bluetooth(登録商標))含む1つまたは複数の無線通信方法または別の適切な無線通信方法を使用して、ユーザデバイス115、ビデオサーバ101、または他の通信チャネルとデータを交換するための無線トランシーバを含む。通信ユニット239は、信号線226を介して他の構成要素と通信するためにバス220に接続されている。
【0030】
いくつかの実施形態では、通信ユニット239は、ショートメッセージングサービス(SMS)、マルチメディアメッセージングサービス(MMS)、ハイパーテキスト転送プロトコル(HTT)、直接データ接続、電子メールまたは別の適切なタイプの電子通信を介することを含んでセルラー通信ネットワーク上でデータを送信および受信するためのセルラー通信トランシーバを含む。いくつかの実施形態では、通信ユニット239は、有線ポートおよび/または無線トランシーバを含む。通信ユニット239はまた、ユーザデータグラムプロトコル(UDP)、TCP/IP、HTTP、HTTPセキュア(HTTPS)、シンプルメール転送プロトコル(SMTP)、SPDY、クイックUDPインターネット接続(QUIC)などを含むが、これらに限定されない標準ネットワークプロトコルを使用してファイルおよび/またはメディアオブジェクトを配信するためのネットワーク105への他の従来の接続を提供する。
【0031】
カメラ241は、ビデオおよび/または静止画像をキャプチャするように動作可能なハードウェアを含み得る。例えば、カメラ241は、ビデオ通話のためにビデオのキャプチャを開始するためにユーザインタフェースモジュール210から指示を受信し得る。カメラ241は、1つまたは複数の画像センサ、例えば、CMOSセンサ、深度センサ(例えば、赤外線センサ、タイムオブフライトセンサなど)、および/または他のタイプのセンサを含み得る。いくつかの実装形態では、カメラ241は、複数のレンズまたは他の画像キャプチャユニットを含み得る。深度センサは、キャプチャされた画像またはビデオの1つまたは複数の画素のカメラからの深度(距離)を示す深度データをキャプチャし得る。カメラ241は、信号線228を介して他の構成要素と通信するためにバス220に接続されている。
【0032】
ディスプレイ243は、ビデオアプリケーション103から受信したグラフィックデータを表示するように動作可能なハードウェアを含み得る。例えば、ディスプレイ243は、ビデオに対する複数のビデオフレームを表示するためにグラフィックスをレンダリングし得る。ディスプレイ243は、任意のタイプのディスプレイ、例えば、液晶ディスプレイ(LDC)、OLEDなどであり得る。いくつかの実施形態では、ディスプレイ243は、投影型スクリーンであり得る。いくつかの実施形態では、例えば、デバイス243が拡張現実デバイスである場合、ディスプレイ243は、立体視ディスプレイであり得る。ディスプレイ243は、信号線230を介して他の構成要素と通信するためにバス220に接続されている。
【0033】
ストレージデバイス247は、本明細書で説明される機能を提供するデータを格納する非一時的なコンピュータ可読記憶媒体であり得る。コンピューティングデバイス200がビデオサーバ101である実施形態では、ストレージデバイス247は、
図1におけるデータベース199を含み得る。ストレージデバイス247は、DRAMデバイス、SRAMデバイス、フラッシュメモリまたは他のメモリデバイスであり得る。いくつかの実施形態では、ストレージデバイス247はまた、不揮発性メモリまたは、同様の永続ストレージデバイス、およびハードディスクドライブ、CD-ROMデバイス、DVD-ROMデバイス、DVD-RAMデバイス、DVD-RWデバイス、フラッシュメモリデバイスを含む媒体、または、情報を永続的に保存するためのその他の大容量ストレージデバイスを含む。ストレージデバイス247は、信号線232を介して他の構成要素と通信するためにバス220に接続されている。
【0034】
ビデオアプリケーション103は、ビデオアナライザ202、パッキングモジュール204、パディングモジュール206、エンコーダ208、およびユーザインタフェースモジュール210を含み得る。
【0035】
ビデオアナライザ202は、顔検出を実行し、ビデオフレームから複数の形状を生成する。いくつかの実施形態では、ビデオアナライザ202は、顔検出を実行し、ビデオフレームから複数の形状(例えば、複数の矩形)を生成する、プロセッサ235によって実行可能な一組の命令を含む。いくつかの実施形態では、ビデオアナライザ202は、コンピューティングデバイス200のメモリ237に格納されるとともに、プロセッサ235によってアクセス可能かつ実行可能である。
【0036】
ビデオアナライザ202は、カメラ241からビデオを受信し、ビデオからビデオフレームを識別する。例えば、ユーザは、ユーザインタフェースモジュール210によって生成されたユーザインタフェースを介してビデオ通話を開始し、ビデオアナライザ202は、別のユーザに送信するために一連のビデオフレームでビデオを記録する。ビデオアナライザ202は、復号化されたビデオフレーム内の背景および顔を識別する。例えば、ビデオアナライザ202は、第1のビデオフレーム内の第1の背景および顔を識別する。カメラ241が深度センサを含む実施形態では、深度データは、背景および顔を識別するために利用され得る。背景および顔検出の他の例として、ビデオアナライザ202がビデオフレーム内の複数の顔を識別することなどが可能である。
【0037】
いくつかの実施形態では、ビデオアナライザ202は、後続のフレームに対して動き検出を実行する。ビデオアナライザ202は、ビデオ内の1つの顔(または複数の顔)の動き量の閾値に基づいて、ビデオ内の後続のビデオフレームに対して顔検出を実行し得る。例えば、カメラ241は、第1のビデオフレームと、n-1番目のビデオフレームを介した第2のビデオフレームとをキャプチャする。ビデオアナライザ202は、例えば、フレームを1つまたは複数の先行するフレームと比較することによって、n-1ビデオフレームを介した第2のビデオフレーム内の顔の動き量を決定し得る。顔の位置は、第1のフレームで実行された顔検出によって決定された位置に基づくものであり得る。動き量が動き量の閾値を超える場合、ビデオアナライザ202は顔検出を実行する。第1のビデオフレームと比較して顔が動いたため、複数の後続のビデオフレーム内の顔のより正確な位置を決定するために、後続の顔検出が使用されてもよい。パッキングおよび符号化はまた、動き量の閾値を超える動きに応答的である対応するモジュールによって実行され得る。
【0038】
いくつかの実施形態では、ビデオアナライザ202は、所定の間隔に基づいて、ビデオ内の後続のビデオフレームに対して顔検出を実行する。例えば、ビデオアナライザ202は、1秒に1回、後続のビデオフレームに対して顔検出を実行する。いくつかの実施形態では、ビデオアナライザ202は、所定の間隔に基づいて、かつ動き量の閾値に基づいて、ビデオ内の後続のビデオフレームに対して顔検出を実行する。例えば、ビデオアナライザ202は、ビデオ内で顔の動きがある場合、0.5秒毎に後続のビデオフレームに対して顔検出を実行する。
【0039】
ビデオアナライザ202は、顔追跡技術を適用することによって、フレーム内の顔と背景とを区別し得る。例えば、ビデオアナライザ202は、ビデオフレーム内の顔の位置およびビデオフレームに対するタイムスタンプを識別する赤緑青(RGB)顔追跡技術を適用し得る。いくつかの実施形態では、ビデオアナライザ202は、一組のランドマーク頂点を決定する。一組のランドマーク頂点は、顔空間内の一組のランドマーク頂点を記述する。ビデオアナライザ202は、顔の縁に近いランドマークを識別する。例えば、ランドマーク頂点は、顔のランドマーク(例えば、額の上部、顎の下部、左耳、右耳などの顔の特徴)に対応し得る。口、鼻、顎、目、耳、およびそれらの一部などの他のランドマーク頂点も可能である。
【0040】
いくつかの実施形態では、ビデオアナライザ202は、機械学習技術を使用して、1つまたは複数のビデオフレームのリアルタイム顔追跡を実行する。いくつかの実施形態では、1つまたは複数の機械学習モデルは、例えば、訓練のためにユーザデータを利用する許可がユーザから明示的に得られている訓練データに基づいて訓練され得る。訓練データは、合成データまたはコンピュータが生成したデータ、訓練用に使用許諾されたデータなど、訓練での使用が許可されているビデオおよび対応するメタデータなどのデータを含み得る。
【0041】
いくつかの実施形態では、訓練されたモデルは、教師あり学習に基づいて(例えば、画像およびビデオならびに対応するメタデータを含む訓練データに基づいて)取得され得る。例えば、訓練されたモデルは、モデル形態または構造(例えば、ニューラルネットワークの複数の層への複数のノードの数および編成、並びに関連する重みを記述する)を含み得る。いくつかの実施形態では、モデルは、ビデオ内の顔を検出および追跡するように訓練され得る。例えば、ビデオが提供されるとともに、ビデオの1つまたは複数のフレームにおける顔の位置(例えば、顔のランドマーク)を示すデータもまた、未訓練のモデルへの入力として提供され得る。モデルは、例えば、数百(例えば、486個)のランドマークを提供することによって、(教師あり学習を使用して)顔の位置を予測するように訓練されてもよく、顔矩形に対する中心は、サイズに対する最小位置および最大位置と、顔矩形に対する中心としての平均位置とを使用して識別される。モデルは、ビデオ内の顔のランドマークを検出するために利用され、予測されたランドマークの位置がグラウンドトゥルースデータと比較され得る。2つの差が計算されて、訓練フィードバックとして提供され得る。1つまたは複数のニューラルネットワークのノードの重み、またはモデルの他のパラメータは、フィードバックに基づいて調整され得る。訓練は、ランドマーク位置のモデル予測が精度の閾値に達したときに完了され得る。
【0042】
いくつかの実施形態では、ユーザは、ユーザ入力を提供することによって訓練データを作成するのを支援する。ユーザにビデオフレーム内の顔の位置を特定するように求めてもよい。ユーザ入力の結果として、訓練データは、ビデオフレーム内の顔の位置について正確な識別を有し得る。この例、および顔の位置を識別する他の例では、顔検出は、身元を決定することを含まず、例えば、顔認識は実行されない。さらに、訓練データは、使用状況を代表するものであってもよく、ここで、例えば、使用状況は、モバイルデバイスを使用して行われるビデオ通話において顔を検出することである。
【0043】
ビデオアナライザ202は、ビデオフレーム内の顔の位置を決定することができる訓練されたモデルを生成および/または利用し得る。いくつかの実施形態では、訓練されたモデルは、時系列行動検出モデルであり得る。様々な実施形態では、ビデオアナライザ202は、ベイズ分類器、サポートベクターマシン、ニューラルネットワーク、または他の機械学習技術を使用して、訓練されたモデルを生成し得る。
【0044】
いくつかの実施形態では、訓練されたモデルは、1つまたは複数のモデル形態または構造を含み得る。例えば、モデル形態または構造は、線形ネットワーク、複数の層(例えば、入力層と出力層の間の「複数の隠れ層」であり、各層は線形ネットワークである)を実装する深層ニューラルネットワーク、畳み込みニューラルネットワーク(例えば、入力データを複数の部分またはタイルに分割または区分けし、1つまたは複数のニューラルネットワーク層を使用して各タイルを個別に処理し、各タイルの処理結果を集約するネットワーク)、シーケンス対シーケンスニューラルネットワーク(例えば、文中の単語、ビデオ内のフレームなどの連続データを入力として受け取り、結果シーケンスを出力として生成するネットワーク)などの任意のタイプのニューラルネットワークを含むことができる。モデル形態または構造は、様々なノード間の接続およびノードの層への編成を指定し得る。例えば、最初の層(例えば、入力層)のノードは、データを入力データまたはアプリケーションデータとして受信し得る。例えば、訓練されたモデルが画像分析のために使用される場合、そのようなデータは、ノード当たり1つまたは複数の画素を含むことができる。後続の中間層は、モデル形態または構造で指定された接続に従って、前の層のノードの入力出力として受信し得る。これらの層は、隠れ層とも呼ばれ得る。最後の層(例えば、出力層)は、顔のリサンプリングキーフレームおよびその他のメタデータの出力を生成する。例えば、出力は、ビデオフレーム内の顔の位置を識別するランドマーク頂点であり得る。いくつかの実施形態では、モデル形態または構造は、各層のノードの数および/またはタイプを指定する。
【0045】
異なる実施形態では、訓練されたモデルは、モデル構造または形態に従って層に配置された複数のノードを含むことができる。いくつかの実施形態では、ノードは、例えば、1単位の入力を処理して1単位の出力を生成するように構成された、メモリのない計算ノードであり得る。ノードによって実行される計算は、例えば、複数のノード入力の各々に重みを乗算すること、重み付け合計を取得すること、重み付け合計をバイアス値またはインターセプト値で調整してノード出力を生成することを含み得る。いくつかの実施形態では、ノードによって実行される計算は、調整された重み付け合計にステップ/活性化関数を適用することを含み得る。いくつかの実施形態では、ステップ/活性化関数は、非線形関数であり得る。様々な実施形態において、そのような計算は、行列乗算などの演算を含み得る。いくつかの実施形態では、複数のノードによる計算は、例えば、マルチコアプロセッサの複数のプロセッサコアを使用して、汎用処理ユニットの個々の処理ユニットまたは特殊用途の神経回路を使用して、並行して実行され得る。いくつかの実施形態では、ノードはメモリを含んでもよく、例えば、後続の入力を処理する際に1つまたは複数の以前の入力を格納および使用することが可能であり得る。例えば、メモリを備えたノードは、長短期記憶(LSTM:long short-term memory)ノードを含み得る。LSTMノードは、メモリを使用して、ノードが有限状態マシン(FSM:finite state machine)のように動作するのを可能にする「状態」を維持し得る。このようなノードを有するモデルは、連続データ、例えば、ビデオにおけるフレームを処理する際に有用であり得る。
【0046】
いくつかの実施形態では、訓練されたモデルは、個々のノードに対する埋め込みまたは重みを含み得る。例えば、訓練されたモデルは、モデル形態または構造によって指定されるように層に編成された複数のノードとして初期設定され得る。初期設定時に、モデル形態に従って接続されている各対のノード(例えば、ニューラルネットワークの連続する層のノード)間の接続に個々の重みが適用され得る。例えば、個々の重みがランダムに割り当てられるか、または、デフォルト値に初期設定されてもよい。次に、訓練されたモデルは、結果を生成するために、例えば、データを使用して訓練され得る。
【0047】
ビデオアナライザ202は、ビデオフレームを複数の形状に分割する。例えば、ビデオアナライザ202は、顔矩形を含む複数の矩形を生成する。いくつかの実施形態では、複数の矩形は、顔矩形と、顔の左方の矩形、顔の右方の矩形、顔の上方の矩形、または顔の下方の矩形のうちの少なくとも1つとを含み得る。例えば、ビデオアナライザ202は、顔矩形、顔の左方の矩形、および顔の右方の矩形を生成する。ビデオアナライザ202は、顔を含むものとして検出されたフレームの部分に基づいて、異なるタイプの矩形を決定し得る。例えば、ビデオフレームがほぼ完全にユーザの顔である場合、ビデオアナライザ202は、顔矩形を生成し得、他の矩形を生成しない。
【0048】
ビデオアナライザ202は、顔検出に基づいて顔矩形の寸法を決定する。顔矩形は、ビデオフレーム内の顔に対応する画素を含む。
図3Aを参照すると、ビデオフレーム325の一例が示されている。
図3Bを参照すると、複数の矩形350の一例が示されている。この例では、ビデオアナライザ202は、顔矩形351、顔の右方の矩形352、顔の左方の矩形353、顔の下方の矩形354、および顔の上方の矩形355を生成した。例えば、頂点の数がより多いか、またはより少ない多角形(例えば、三角形、五角形、六角形などが)を含む他の形状も可能である。いくつかの実施形態では、矩形の高さは、ビデオアプリケーション103によって決定されるように、またはユーザによって設定されるように、設定可能である。例えば、顔矩形は、デフォルトでパッキングされたビデオフレームの75%を占めてもよく、高さは、パッキングモジュール204を参照して以下でより詳細に説明されるように、ユーザインタフェースを介してユーザによって変更され得る。
【0049】
パッキングモジュール204は、複数のビデオフレームをパッキングする。いくつかの実施形態では、パッキングモジュール204は、ビデオフレームをパッキングするためにプロセッサ235によって実行可能な一組の命令を含む。いくつかの実施形態では、パッキングモジュール204は、コンピューティングデバイス200のメモリ237に格納されるとともに、プロセッサ235によってアクセス可能かつ実行可能である。
【0050】
いくつかの実施形態では、パッキングモジュール204は、ビデオフレームの個別の領域への画素の割り当てに基づいて、ビデオフレームがどのように符号化されるかを記述するメタデータを生成することによって、ビデオフレームをパッキングする。パッキングモジュール204は、複数の矩形に基づいてビデオフレームをパッキングし、ここで、複数の矩形内の他の矩形と比較して、より多数の画素が顔矩形に割り当てられる。顔矩形は他の矩形よりも画素数が多いため、顔矩形は他の矩形よりも高い解像度で符号化される。このようにより多くの画素を顔矩形に割り当てることにより、パッキングされたビデオフレーム内のデータの多くの部分が顔に対応して、受信機による顔矩形のレンダリングをより高品質にすることができるという利点がある。
【0051】
パッキングモジュール204は、ビデオフレームを符号化する。符号化されたビデオフレームは、パッキングを記述するメタデータを含む。メタデータは、顔矩形の中心およびスケールの記述を含み得る。メタデータは、顔変換の中心および顔変換のx/yスケールを記述し得る。顔変換の中心は、パッキング前のビデオフレーム内の顔の中心の位置(平均位置)である。顔変換のx/yスケールは、パッキング前のビデオフレーム内の顔を含む矩形のサイズである。メタデータは、受信機デバイスがディスプレイ用にビデオフレームを復号化してレンダリングするために利用可能である。例えば、パッキングされたビデオフレームを示す
図3Bを参照すると、メタデータは、顔の右方の矩形352が、顔矩形351の直下にあり、かつ左側にある矩形であることを示している。さらに、メタデータは、顔の下方の矩形354がパッキングされたフレームの底部左側において180度回転された矩形であることも示している。フレームのパッキング解除中に、メタデータを使用して矩形を適切な位置に再配置して、ビデオフレームをレンダリングすることができる。
【0052】
いくつかの実施形態では、パッキングモジュール204は、第1のフレームをパッキングし、次に、複数の矩形に基づいて後続のフレームをパッキングし得る。後続のフレームは、パッキングを記述するメタデータを用いて符号化される。いくつかの実施形態では、パッキングモジュール204は、フレーム間の顔の動きが動き量の閾値を下回っている限り、同じ構成で(メタデータの再計算なしに)フレームをパッキンすることを継続し得る。顔の動きが動き量の閾値を超える場合、ビデオアナライザ202は顔検出を実行し、パッキングモジュール204は、後続のフレームをパッキングするための新たなパッキング構成を生成する。いくつかの実施形態では、パッキングを行うための動き量の閾値は、顔検出を行うための動き量の閾値とは異なり、顔検出が行われたフレームとは異なるフレームがパッキングされる。
【0053】
パディングモジュール206は、複数の形状の周囲にパディング画素を追加する。いくつかの実施形態では、パディングモジュール206は、複数の形状の周囲にパディング画素を追加するためにプロセッサ235によって実行可能な一組の命令を含む。いくつかの実施形態では、パディングモジュール206は、コンピューティングデバイス200のメモリ237に格納されるとともに、プロセッサ235によってアクセス可能かつ実行可能である。
【0054】
いくつかの実施形態では、パディングモジュール206は、ビデオフレームがパッキングされた後、矩形の周囲にパディングを追加する。パディングモジュール206は、矩形の各々の周囲に1個から5個のパディングの画素を追加し得る。例えば、パディングモジュール206は、矩形の個々の周囲に2個のパディングの画素を追加し得る。パディングモジュール206は、周囲の矩形からの空きスペースを、周囲の矩形からのエッジ画素で埋めることができる。パディングは、エンコーダがビデオコーデックを使用してパッキングされたビデオフレームを符号化するときに、矩形の境界をまたぐモーションブリーディング(motion bleeding)」および矩形間の補間を回避するために使用される。パディングは、符号化プロセスによってビデオにエラーが発生しないように、矩形間の境界を少なくとも閾値数の画素幅にすることで、これらの問題を回避する。換言すれば、従来のエンコーダは、隣接する画素がビデオに描かれているシーン内の隣接するポイントから発生するビデオフレームを符号化するように設計されている。本明細書で説明するパッキング技法は、
図3Bに示すように、隣接する画素がシーン内の隣接するポイントに対応していない入力ビデオをエンコーダに提供する。矩形の周囲にパディングを追加することで、ビデオフレームの複数の矩形の再配置を考慮してエンコーダを変更する必要がなくなり、代わりに、任意の利用可能な従来のエンコーダの使用が可能になる。パディングの量は、使用されるビデオコーデックに基づいて(例えば、ビデオコーデックが使用されるときの符号化の既知の特性に基づいて)選択され得る。
【0055】
エンコーダ208は、ビデオフレームを符号化する。いくつかの実施形態では、エンコーダ208は、ビデオフレームを符号化するためにプロセッサ235によって実行可能な一組の命令を含む。いくつかの実施形態では、エンコーダ208は、コンピューティングデバイス200のメモリ237に格納されるとともに、プロセッサ235によってアクセス可能かつ実行可能であり得る。
【0056】
エンコーダ208は、パッキングされたビデオフレームを符号化し、特定のビデオコーデック(例えば、ビデオ通話に使用される)に基づいて、例えば、ビデオフレームを表すデータを生成する。いくつかの実施形態では、ソーステクスチャは、ビデオフレーム内のものが時間に応じてどのように変化するかを記述するために動き履歴情報と組み合わされる初期ビデオフレームである。例えば、メタデータは、ビデオフレーム内の顔の位置が後続のビデオフレームにおいてどのように変化するかを記述し得る。より具体的には、メタデータは、ランドマークポイントが前のフレームを参照してどこにあるかを記述し得る。エンコーダ208は、ビデオフレームをソーステクスチャとして使用してパッキングをレンダリングし得る。エンコーダ208は、ビデオフレームを符号化するとともに、パッキングを記述するメタデータを含む。例えば、メタデータは顔の中心およびスケールを含む。いくつかの実施形態では、メタデータは、最適化なしで約16バイトであり、(1)入力画像内の顔変換の中心の画素位置を記述する顔変換の中心を2つの32ビットの浮動小数点として含み、(2)顔変換x/yスケールを2つの32ビットの浮動小数点として含む。
【0057】
エンコーダ208は、符号化されたビデオフレームを別のユーザデバイス115(受信機デバイス)に送信する。受信機デバイスは、符号化されたビデオフレームを復号化し、フレームを表示する前に、受信機デバイスは逆パッキングを実行して、矩形を画面上の適切な位置にレンダリングする。ビデオフレームの対応する部分は、顔の左方の位置、顔の右方の位置、顔の上方の位置、または顔の下方の位置のうちの少なくとも1つを含み得る。
【0058】
ユーザインタフェースモジュール210は、ユーザインタフェースを表示するためのグラフィックデータを生成する。いくつかの実施形態では、ユーザインタフェースモジュール210は、グラフィックデータを生成するためにプロセッサ235によって実行可能な一組の命令を含む。いくつかの実施形態では、ユーザインタフェースモジュール210は、コンピューティングデバイス200のメモリ237に格納されるとともに、プロセッサ235によってアクセス可能かつ実行可能であり得る。
【0059】
いくつかの実施形態では、ユーザインタフェースモジュール210は、ビデオ通話を表示するためのグラフィックデータを生成する。いくつかの実施形態では、ユーザインタフェースモジュール210は、ビデオアプリケーション103に関連するユーザインタフェースオプションをも生成する。例えば、ユーザインタフェースは、ビデオ通話を開始するためのオプション、ビデオ通話に他のユーザを追加するためのオプション、パッキングに使用される顔矩形の寸法(例えば、高さ)を変更するなど、ビデオ通話に関連する設定を変更するためのオプションを含む。
【0060】
例示的な方法
図4は、ビデオを符号化するための例示的な方法400のフローチャートを示す。方法400は、ユーザデバイス115、ビデオサーバ101、または部分的にユーザデバイス115および部分的にビデオサーバ101などのコンピューティングデバイス200に格納されたビデオアプリケーション103によって実行される。
【0061】
ブロック402において、人の顔を含むビデオフレームがキャプチャされる。ブロック404において、ユーザがユーザの顔の使用に同意したかどうかが決定される。ユーザがユーザの顔の使用に同意しなかった場合、方法400は、ブロック406に移行し、ここで、ユーザの顔に関する情報は使用されない。例えば、ビデオフレームは、パッキングを実行することなく、キャプチャされた状態で(符号化および/または圧縮を行う可能性がある)送信され得る。ユーザがユーザの顔の使用に同意した場合、方法400は、ビデオフレーム内で顔が検出されるブロック408に移行する。ブロック410において、ビデオフレームは複数の矩形に分割され、ここで、複数の矩形は、ビデオフレーム内の顔に対応する画素を有する顔矩形を含む。ブロック412において、ビデオフレームは、複数の矩形に基づいてパッキングされ、ここで、複数の矩形のうちの他の矩形と比較して、パッキングされたビデオフレーム内のより多数の画素が、顔矩形に割り当てられる。ブロック414において、ビデオフレームが符号化され、ここで、符号化されたビデオは、パッキングを記述するメタデータを含む。
【0062】
上記の説明では、説明の便宜上、本明細書を十分に理解するために、多くの具体的な詳細な内容が記載されている。しかしながら、当業者であれば、本開示をこれらの具体的な詳細な内容がなくても実施することができることは明らかであろう。いくつかの事例において、説明がわかりにくくなることを避けるために、構造およびデバイスがブロック図形式で示されている。例えば、実施形態は、主にユーザインタフェースおよび特定のハードウェアを参照して上記したように説明することができる。しかしながら、実施形態は、データおよびコマンドを受信することができる任意のタイプのコンピューティングデバイス、およびサービスを提供する任意の周辺デバイスに適用することができる。
【0063】
本明細書における「いくつかの実施形態」または「いくつかの事例」への言及は、実施形態または事例に関連して記載された特定の特徴、構造、または特性が、説明の少なくとも1つの実施に含まれ得ることを意味する。本明細書の様々な箇所における「いくつかの実施形態において」という語句の出現は、必ずしも全てが同じ実施形態を参照しているとは限らない。
【0064】
上記の詳細な説明の一部は、コンピュータメモリ内のデータビットに対する処理のアルゴリズムおよび記号表現の観点で示されている。これらのアルゴリズムの記述および表現は、データ処理技術の当業者が、その作業内容を当業者に最も効果的に伝えるために使用する手段である。ここでいうアルゴリズムは、一般に、望ましい結果を導く自己矛盾のない一連のステップであると考えられる。ステップとは、物理量の物理的操作を必要とするものである。通常、必ずしもそうとは限らないが、これらの量は、保存、転送、結合、比較、およびその他の操作が可能な電気的または磁気的データの形態を取る。これらのデータをビット、値、要素、記号、文字、用語、数値などとして参照することは、主に一般的な使用上の理由から、時に便利であることが証明されている。
【0065】
しかしながら、これらの用語および類似の用語は全て、適切な物理量に関連付けられるべきものであり、これらの物理量に適用される便利なラベルにすぎないことに留意されたい。以下の説明から明らかなように特に別段の記載がない限り、本明細書全体を通して、「処理」または「コンピューティング」または「計算」または「決定」または「表示」などを含む用語を利用する説明は、コンピュータシステムのレジスタおよびメモリ内の物理(電子)量として表されるデータを、コンピュータシステムのメモリまたはレジスタまたは他のその種の情報記憶、送信、または表示デバイス内で物理量として同様に表される他のデータに処理および変換するコンピュータシステムまたは同様の電子コンピューティングデバイスの動作および処理を指すことを理解されたい。
【0066】
また、本明細書の実施形態は上記の方法の1つまたは複数のステップを実行するためのプロセッサに関連することができる。プロセッサは、コンピュータに格納されたコンピュータプログラムによって選択的にアクティブ化または再構成される専用プロセッサであり得る。このようなコンピュータプログラムは、それぞれコンピュータシステムバスに接続された、光ディスク、ROM、CD-ROM、磁気ディスク、RAM、EPROM、EEPROM、磁気または光カード、不揮発性メモリを備えたUSBキーを含むフラッシュメモリ、または電子命令を保存するのに適した任意のタイプの媒体を含むが、これらに限定されないコンピュータ読み取り可能な記憶媒体に記憶されてもよい。
【0067】
本明細書は、いくつかの全体がハードウェアの実施形態、いくつかの全体がソフトウェアの実施形態、またはハードウェアとソフトウェアの両方の要素を含むいくつかの実施形態の形態をとることができる。いくつかの実施形態では、本明細書は、ファームウェア、常駐ソフトウェア、マイクロコードなどを含むがこれらに限定されないソフトウェアで実施される。
【0068】
さらに、本明細書は、コンピュータまたは任意の命令実行システムによって、またはそれらに関連して使用するためのプログラムコードを提供する、コンピュータ使用可能またはコンピュータ可読媒体からアクセス可能なコンピュータプログラム製品の形態をとることができる。この説明の目的のために、コンピュータ使用可能またはコンピュータ可読媒体は、命令実行システム、装置、またはデバイスによって、またはそれらに関連して使用するためにプログラムを含み、格納し、通信し、伝播し、または輸送することができる任意の装置とすることができる。
【0069】
プログラムコードを格納または実行するのに適したデータ処理システムは、システムバスを介してメモリ要素に直接または間接的に接続された少なくとも1つのプロセッサを含む。メモリ要素は、プログラムコードの実際の実行中に使用されるローカルメモリ、バルクストレージ、および実行中にコードをバルクストレージから取得する回数を減らすために少なくとも一部のプログラムコードの一時的な保存を提供するキャッシュメモリを含むことができる。