(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-06-12
(45)【発行日】2024-06-20
(54)【発明の名称】顔追跡方法、顔追跡装置、電子デバイスおよび記憶媒体
(51)【国際特許分類】
G06T 7/20 20170101AFI20240613BHJP
G06T 7/246 20170101ALI20240613BHJP
【FI】
G06T7/20 300B
G06T7/246
(21)【出願番号】P 2023541109
(86)(22)【出願日】2022-01-04
(86)【国際出願番号】 CN2022070133
(87)【国際公開番号】W WO2022148349
(87)【国際公開日】2022-07-14
【審査請求日】2023-09-20
(31)【優先権主張番号】202110007729.1
(32)【優先日】2021-01-05
(33)【優先権主張国・地域又は機関】CN
【早期審査対象出願】
(73)【特許権者】
【識別番号】320010240
【氏名又は名称】ビゴ テクノロジー ピーティーイー. リミテッド
【住所又は居所原語表記】30 PASIR PANJANG ROAD,#15-31A,MAPLETREE BUSINESS CITY,SINGAPORE 117440
(74)【代理人】
【識別番号】100108453
【氏名又は名称】村山 靖彦
(74)【代理人】
【識別番号】100110364
【氏名又は名称】実広 信哉
(74)【代理人】
【識別番号】100133400
【氏名又は名称】阿部 達彦
(72)【発明者】
【氏名】▲陳▼ 文▲喩▼
(72)【発明者】
【氏名】▲劉▼ 更代
【審査官】藤原 敬利
(56)【参考文献】
【文献】中国特許出願公開第103646391(CN,A)
【文献】特開2018-055167(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06T 1/00- 1/40
G06T 3/00- 7/90
G06V 10/00-20/90
H04N 7/18
(57)【特許請求の範囲】
【請求項1】
第1のキーフレームデータセットと第2のキーフレームデータセットをメンテナンス
する追跡スレッドに適用される顔追跡方法であって、
動画フレームに対して顔追跡を行う過程では、最適化スレッドが動作しているかどうかを判断することと、
前記最適化スレッドが動作していることに対応して、前記動画フレームがキーフレームである場合、前記動画フレームに基づいて前記第2のキーフレームデータセットを更新することと、
前記最適化スレッドから送信された前記第2のキーフレームデータセットにおける動画フレームをクリアするクリア命令を受信した場合、前記第2のキーフレームデータセットにおける動画フレームをクリアし、前記第2のキーフレームデータセットを前記第1のキーフレームデータセットに更新することと、
前記最適化スレッドが動作していないことに対応して、前記動画フレームがキーフレームである場合、前記動画フレーム及び前記第2のキーフレームデータセットに基づいて前記第1のキーフレームデータセットを更新することと、
前記第1のキーフレームデータセットが更新された後、前記最適化スレッドを呼び出すことにより、前記最適化スレッドが前記第1のキーフレームデータセットに基づいて顔アイデンティティを最適化することと、
を含む、
顔追跡方法。
【請求項2】
前記最適化スレッドが動作しているかどうかを判断する前に、
前記最適化スレッドから顔アイデンティティベクトルを受信した場合、受信した顔アイデンティティベクトルを現在の顔アイデンティティベクトルとして確定することと、
前記現在の顔アイデンティティベクトルに基づいて前記動画フレームを追跡することにより、顔追跡データとして前記動画フレームにおける顔の顔キーポイント、姿勢データと表情データを取得することと、
をさらに含む、
請求項1に記載の顔追跡方法。
【請求項3】
前記第1のキーフレームデータセットと前記第2のキーフレームデータセットは、いずれもキーフレーム集合、顔追跡データ及びキーフレームのフレームベクトルを含み、前記追跡スレッドは、また第1
のPCAサブ空間と第2のPCAサブ空間をメンテナンスし、
前記動画フレームがキーフレームである場合、前記動画フレームに基づいて前記第2のキーフレームデータセットを更新する前に、
前記最適化スレッドを呼び出す前に、前記第1のPCAサブ空間を前記第2のPCAサブ空間にセットして、前記第1のPCAサブ空間は、前記第1のキーフレームデータセットの第1のキーフレーム集合における全てのキーフレームのフレームベクトル、平均フレームベクトル及び特徴ベクトルマトリクスからなる空間であることと、
前記第2のPCAサブ空間、前記動画フレームの姿勢データ及び表情データに基づいて前記動画フレームがキーフレームであるかどうかを判断することと、
前記動画フレームがキーフレームであることに対応して、前記動画フレームに基づいて前記第2のキーフレームデータセットを更新するステップを実行することと、
前記動画フレームがキーフレームでないことに対応して、前記最適化スレッドから顔アイデンティティベクトルを受信したかどうかを判断することと、
前記最適化スレッドから顔アイデンティティベクトルを受信したことに対応して、前記最適化スレッドから顔アイデンティティベクトルを受信した場合、受信した顔アイデンティティベクトルを現在の顔アイデンティティベクトルとして確定するステップに戻ることと、
前記最適化スレッドから顔アイデンティティベクトルを受信していないことに対応して、次の動画フレームを受信し、前記現在の顔アイデンティティベクトルに基づいて前記動画フレームを追跡することにより、顔追跡データとして前記動画フレームにおける顔の顔キーポイント、姿勢データと表情データを取得するステップに戻ることと、
をさらに含む、
請求項2に記載の顔追跡方法。
【請求項4】
前記第2のPCAサブ空間、前記動画フレームの姿勢データ及び表情データに基づいて前記動画フレームがキーフレームであるかどうかを判断することは、
前記姿勢データと前記表情データに基づいて前記動画フレームのフレームベクトルを確定することと、
前記動画フレームのフレームベクトルと前記第2のPCAサブ空間の前記平均フレームベクトル及び前記特徴ベクトルマトリクスを用いて、前記動画フレームのフレームベクトルと前記第2のPCAサブ空間との距離を計算することと、
前記距離が予め設定された閾値未満である場合、前記動画フレームがキーフレームであると確定することと、
前記距離が予め設定された閾値より大きい場合、前記動画フレームがキーフレームでないと確定することと、
を含む、
請求項3に記載の顔追跡方法。
【請求項5】
前記第2のPCAサブ空間、前記動画フレームの姿勢データ及び表情データに基づいて前記動画フレームがキーフレームであるかどうかを判断する前に、
前記第2のキーフレームデータセットの第2のキーフレーム集合の識別子が予め設定された第1の識別子であるかどうかを判断し、ここで、前記予め設定された第1の識別子は、前記第2のキーフレーム集合が空集合であることを示すことと、前記第2のキーフレーム集合の識別子が前記予め設定された第1の識別子でないことに対応して、前記第2のキーフレーム集合の識別子を予め設定された第2の識別子に設定することと、をさらに含む、
請求項3に記載の顔追跡方法。
【請求項6】
前記動画フレームに基づいて第2のキーフレームデータセットを更新することは、
前記動画フレームを前記第2のキーフレームデータセットの第2のキーフレーム集合に追加することと、
前記動画フレームの顔キーポイント、姿勢データ、表情データを顔追跡データとして前記第2のキーフレームデータセットに追加することと、
前記動画フレームのフレームベクトルを前記第2のキーフレームデータセットに追加することと、
を含む、
請求項4に記載の顔追跡方法。
【請求項7】
前記動画フレームに基づいて第2のキーフレームデータセットを更新した後、
予め設定されたステップ幅に基づいて前記閾値を更新することと、
前記第2のキーフレームデータセットにおけるフレームベクトルに基づいて前記第2のPCAサブ空間を更新することと、
をさらに含む、
請求項6に記載の顔追跡方法。
【請求項8】
前記第2のキーフレームデータセットを前記第1のキーフレームデータセットに更新することは、
前記第2のキーフレームデータセットの第2のキーフレーム集合を前記第1のキーフレームデータセットの第1のキーフレーム集合に更新することと、
前記第2のキーフレームデータセットにおける顔追跡データを前記第1のキーフレームデータセットに更新することと、
前記第2のキーフレームデータセットにおけるキーフレームのフレームベクトルを前記第1のキーフレームデータセットに更新することと、
を含む、
請求項3に記載の顔追跡方法。
【請求項9】
前記第2のキーフレームデータセットを第1のキーフレームデータセットに更新した後、
前記第1のキーフレームデータセットにおけるフレームベクトルに基づいて前記第1のPCAサブ空間を更新することをさらに含む、
請求項8に記載の顔追跡方法。
【請求項10】
前記第2のキーフレームデータセットを第1のキーフレームデータセットに更新した後、
前記第2のキーフレーム集合の識別子を前記予め設定された第1の識別子として設定することをさらに含む、
請求項5に記載の顔追跡方法。
【請求項11】
前記動画フレームがキーフレームである場合、前記動画フレーム及び前記第2のキーフレームデータセットに基づいて前記第1のキーフレームデータセットを更新する前に、
前記第1のPCAサブ空間、前記動画フレームの姿勢データ及び表情データに基づいて、前記動画フレームがキーフレームであるかどうかを判断することと、
前記動画フレームがキーフレームであることに対応して、前記動画フレーム及び前記第2のキーフレームデータセットに基づいて前記第1のキーフレームデータセットを更新するステップを実行することと、
前記動画フレームがキーフレームでないことに対応して、前記第2のキーフレームデータセットの第2のキーフレーム集合が非空集合であるかどうかを判断することと、
前記第2のキーフレーム集合が非空集合であることに対応して、前記第2のキーフレームデータセットを前記第1のキーフレームデータセットに更新し、かつ前記第1のPCAサブ空間を更新することと、
前記第2のキーフレーム集合が空集合であることに対応して、前記最適化スレッドから顔アイデンティティベクトルを受信したかどうかを判断することと、
前記最適化スレッドから顔アイデンティティベクトルを受信したことに対応して、前記最適化スレッドから顔アイデンティティベクトルを受信した場合、受信した顔アイデンティティベクトルを現在の顔アイデンティティベクトルとして確定するステップに戻ることと、
前記最適化スレッドから顔アイデンティティベクトルを受信していないことに対応して、次の動画フレームを受信し、前記現在の顔アイデンティティベクトルに基づいて前記動画フレームを追跡することにより、顔追跡データとして前記動画フレームにおける顔の姿勢データ及び表情データを取得するステップに戻ることと、
をさらに含む、
請求項3に記載の顔追跡方法。
【請求項12】
前記第1のPCAサブ空間、前記動画フレームの姿勢データ及び表情データに基づいて、前記動画フレームがキーフレームであるかどうかを判断することは、
前記姿勢データと前記表情データに基づいて前記動画フレームのフレームベクトルを確定することと、
前記動画フレームのフレームベクトル、前記第1のPCAサブ空間の前記平均フレームベクトル及び前記特徴ベクトルマトリクスを用いて、前記動画フレームのフレームベクトルと前記第1のPCAサブ空間との距離を計算することと、
前記距離が予め設定された閾値未満である場合、前記動画フレームがキーフレームであると確定することと、
前記距離が予め設定された閾値より大きい場合、前記動画フレームがキーフレームでないと確定することと、
を含む、
請求項11に記載の顔追跡方法。
【請求項13】
前記動画フレーム及び前記第2のキーフレームデータセットに基づいて前記第1のキーフレームデータセットを更新することは、
前記動画フレーム、及び前記第2のキーフレームデータセットの第2のキーフレーム集合を前記第1のキーフレームデータセットの第1のキーフレーム集合に更新することと、
前記動画フレームのフレームベクトル、及び前記第2のキーフレームデータセットにおけるフレームベクトルを前記第1のキーフレームデータセットに追加することと、
前記動画フレームの顔追跡データ、及び前記第2のキーフレームデータセットにおける動画フレームの顔追跡データを前記第1のキーフレームデータセットに追加することと、
を含む、
請求項12に記載の顔追跡方法。
【請求項14】
前記動画フレーム及び前記第2のキーフレームデータセットに基づいて前記第1のキーフレームデータセットを更新した後、
予め設定されたステップ幅に基づいて前記閾値を更新することと、
前記第1のキーフレームデータセットにおけるフレームベクトルに基づいて前記第1のPCAサブ空間を更新することと、
をさらに含む、
請求項12に記載の顔追跡方法。
【請求項15】
前記受信した顔アイデンティティベクトルを現在の顔アイデンティティベクトルとして確定した後、
前記最適化スレッドから受信した2回隣接する顔アイデンティティベクトルを用いて顔変化率を計算することと、
前記顔変化率が予め設定された変化率閾値未満であるかどうかを判断することと、
前記顔変化率が予め設定された変化率閾値未満であることに対応して、前記現在の顔アイデンティティベクトルで前記動画フレームを追跡する過程で前記動画フレームがキーフレームであるかどうかの判断を停止し、前記最適化スレッドを呼び出さないことと、
前記顔変化率が予め設定された変化率閾値以上であることに対応して、前記現在の顔アイデンティティベクトルに基づいて前記動画フレームを追跡することにより、顔追跡データとして前記動画フレームにおける顔の姿勢データ及び表情データを取得するステップに戻ることと、
をさらに含む、
請求項2から14のいずれか1項に記載の顔追跡方法。
【請求項16】
最適化スレッドに適用され
る顔追跡方法であって、
前記最適化スレッドが呼び出された後、追跡スレッドに使用された現在の顔アイデンティティベクトルを初期顔アイデンティティベクトルとすることと、
第1のキーフレームデータセットを取得し、ここで、前記第1のキーフレームデータセットは、前記追跡スレッドによる顔追跡後に更新されたデータセットであり、前記第1のキーフレームデータセットは、顔追跡データを含むことと、
前記初期顔アイデンティティベクトルに基づいて前記第1のキーフレームデータセットにおける顔追跡データを最適化することにより、最適化された顔追跡データを得ることと、
前記最適化された顔追跡データに基づいて前記初期顔アイデンティティベクトルに対して反復最適化を行うことにより、最適化された顔アイデンティティベクトルを得ることと、
毎回の反復の後、前記最適化された顔アイデンティティベクトルと前記初期顔アイデンティティベクトルに基づいて反復停止条件を満たすかどうかを判断することと、
前記反復停止条件を満たすことに対応して、前記最適化された顔アイデンティティベクトルを前記追跡スレッドに送信することにより、前記追跡スレッドが、前記最適化された顔アイデンティティベクトルを受信した場合、受信した顔アイデンティティベクトルを現在の顔アイデンティティベクトルとして確定することと、
前記反復停止条件を満たさないことに対応して、前記追跡スレッドに第2のキーフレームデータセットにおける動画フレームをクリアするクリア命令を送信することにより、前記追跡スレッドが、前記クリア命令を受信した後、前記第2のキーフレームデータセットの第2のキーフレーム集合が非空集合である場合、前記第2のキーフレームデータセットを前記第1のキーフレームデータセットに更新することと、
前記最適化された顔アイデンティティベクトルを初期顔アイデンティティベクトルとし、前記初期顔アイデンティティベクトルに基づいて前記第1のキーフレームデータセットにおける顔追跡データを最適化することにより、最適化された顔追跡データを得るステップに戻ることと、
を含む、
顔追跡方法。
【請求項17】
前記顔追跡データは、顔キーポイント、姿勢データ及び表情データを含み、前記初期顔アイデンティティベクトルに基づいて前記第1のキーフレームデータセットにおける顔追跡データを最適化することにより、最適化された顔追跡データを得ることは、
前記初期顔アイデンティティベクトルと前記表情データとに基づいて3次元顔モデルを確立することと、
前記3次元顔モデルの顔キーポイントを取得することと、
前記3次元顔モデルの顔キーポイントと前記顔追跡データにおける顔キーポイントとに基づいて最適な姿勢データと表情データを求めることにより、前記最適化された顔追跡データとして最適化された姿勢データと表情データを得ることと、
を含む、
請求項16に記載の顔追跡方法。
【請求項18】
前記3次元顔モデルの顔キーポイントと前記顔追跡データにおける顔キーポイントとに基づいて最適な姿勢データと表情データを求めることにより、前記最適化された顔追跡データとして最適化された姿勢データと表情データを得ることは、
前記最適化された顔追跡データを以下の式で解くことを含み、
【数1】
ここで、kは第k回の反復であり、
【数2】
は第k回の反復に使用された中性顔であり、
【数3】
は第k回の反復に使用された表情形状融合変形器であり、
【数4】
は3次元顔モデル
【数5】
を投影してj個のキーポイントを得ることを指し、Q
iは第1のキーフレームデータセットにおける顔追跡データの顔キーポイントであり、γはパラメータであり、δ
iは表情データであり、P
iは姿勢データであり、iはi番目のキーフレームである、
請求項17に記載の顔追跡方法。
【請求項19】
前記顔追跡データは、顔キーポイント、姿勢データ及び表情データを含み、前記最適化された顔追跡データに基づいて前記初期顔アイデンティティベクトルに対して反復最適化を行うことにより、最適化された顔アイデンティティベクトルを得ることは、
前記顔キーポイントに基づいて追跡された顔の顔サイズを計算することと、
各キーフレームの表情データに基づいて各キーフレームの表情重みを計算することと、
前記顔追跡データ、前記顔サイズ、各キーフレームの表情重み、前記現在の顔アイデンティティベクトル、及び前記初期顔アイデンティティベクトルに基づいて反復をして解くことにより、前記最適化された顔アイデンティティベクトルを得ることと、
を含む、
請求項16に記載の顔追跡方法。
【請求項20】
前記各キーフレームの表情データに基づいて各キーフレームの表情重みを計算することは、
全てのキーフレームにおける表情データから最小表情データを確定することと、
予め設定された定数項、前記最小表情データ、及び前記キーフレームの表情データを用いて前記キーフレームの表情重みを計算し、ここで、前記キーフレームの表情重みと前記キーフレームの表情データとは、負の相関であることと、
を含む、
請求項19に記載の顔追跡方法。
【請求項21】
前記予め設定された定数項、前記最小表情データ、及び前記キーフレームの表情データを用いて前記キーフレームの表情重みを計算することは、
各キーフレームの表情重みを以下の式で計算することを含み、
【数6】
ここで、
【数7】
は第k回の反復におけるキーフレームiの表情重みであり、rは定数であり、
【数8】
は第k回の反復におけるキーフレームiの表情データであり、
【数9】
は第1のキーフレーム集合であり、
【数10】
は全てのキーフレームにおける最小表情データである、
請求項20に記載の顔追跡方法。
【請求項22】
前記顔追跡データ、前記顔サイズ、各キーフレームの表情重み、前記現在の顔アイデンティティベクトル、及び前記初期顔アイデンティティベクトルに基づいて反復をして解くことにより、前記最適化された顔アイデンティティベクトルを得ることは、
前記現在の顔アイデンティティベクトルと各キーフレームの表情データに基づいて3次元顔モデルを確立することと、
前記3次元顔モデルを2次元平面に投影して複数の投影顔キーポイントを得ることと、
前記複数の投影顔キーポイントと前記顔キーポイントとの距離の和を計算することと、
前記表情データ、前記距離の和、各キーフレームの表情重み、前記顔サイズ、前記現在の顔アイデンティティベクトル、及び前記初期顔アイデンティティベクトルに基づいて反復をして解くことにより、前記最適化された顔アイデンティティベクトルを得ることと、
を含む、
請求項19に記載の顔追跡方法。
【請求項23】
前記顔モデルは、双線形顔モデルを含み、前記表情データ、前記距離の和、各キーフレームの表情重み、前記顔サイズ、前記現在の顔アイデンティティベクトル、及び前記初期顔アイデンティティベクトルに基づいて反復をして解くことにより、前記最適化された顔アイデンティティベクトルを得ることは、
前記最適化された顔アイデンティティベクトルを以下の式で解くことを含み、
【数11】
α
kは第k回に反復をして解くことにより得られた中間顔アイデンティティベクトルであり、αは顔アイデンティティベクトルであり、
【数12】
は第k回にキーフレームiに対して顔追跡を行なった後に得られた双線形3次元顔モデルであり、
【数13】
は第k回のキーフレームiの表情データであり、Cはユーザーの中性顔であり、
【数14】
は第k回の反復におけるキーフレームiの表情重みであり、
【数15】
は第1のキーフレーム集合であり、
【数16】
はキーフレームiにおける双線形顔モデルによる投影後のj個の投影顔キーポイントであり、
【数17】
は追跡スレッドがキーフレームiを追跡することにより得られたj個の顔キーポイントであり、f
iは顔大きさであり、α
preは追跡スレッドが現在使用している顔アイデンティティベクトルであり、β
1とβ
2は定数である、
請求項22に記載の顔追跡方法。
【請求項24】
前記顔モデルは、主成分分析PCA顔モデルを含み、前記表情データ、前記距離の和、各キーフレームの表情重み、前記顔サイズ、前記現在の顔アイデンティティベクトル、及び前記初期顔アイデンティティベクトルに基づいて反復をして解くことにより、前記最適化された顔アイデンティティベクトルを得ることは、
最適化された顔アイデンティティベクトルを以下の式で解くことを含み、
【数18】
α
kは第k回に反復をして解くことにより得られた中間顔アイデンティティベクトルであり、αは顔アイデンティティベクトルであり、
【数19】
は第k回にキーフレームiに対して顔追跡を行なった後に得られたPCA3次元顔モデルであり、
【数20】
は第k回のキーフレームiの表情データであり、Bは平均顔であり、B
IDはユーザーのアイデンティティ形状融合変形器であり、B
expは平均顔Bに基づいて設計られた表情形状融合変形器であり、
【数21】
は第k回の反復におけるキーフレームiの表情重みであり、
【数22】
は第1のキーフレーム集合であり、
【数23】
はキーフレームiにおけるPCA3次元顔モデルによる投影後のj個の投影顔キーポイントであり、
【数24】
は追跡スレッドがキーフレームiを追跡することにより得られたj個の顔キーポイントであり、f
iは顔大きさであり、α
preは追跡スレッドが現在使用している顔アイデンティティベクトルであり、β
1、β
2及びβ
3は定数であり、α
k-1は第k-1回の反復によって得られた顔アイデンティティベクトルである、
請求項22に記載の顔追跡方法。
【請求項25】
前記毎回の反復の後、前記最適化された顔アイデンティティベクトルと前記初期顔アイデンティティベクトルに基づいて反復停止条件を満たすかどうかを判断することは、
前記最適化された顔アイデンティティベクトルと前記初期顔アイデンティティベクトルを用いて顔変化率を計算することと、
前記顔変化率が予め設定された変化率閾値未満であるかどうかを判断することと、
前記顔変化率が予め設定された変化率閾値未満であることに対応して、前記反復停止条件を満たすと確定することと、
前記顔変化率が予め設定された変化率閾値以上であることに対応して、前記反復停止条件を満たさないと確定することと、
を含む、
請求項16から24のいずれか1項に記載の顔追跡方法。
【請求項26】
前記最適化された顔アイデンティティベクトルと前記初期顔アイデンティティベクトルを用いて顔変化率を計算することは、
平均顔の顔大きさを取得することと、
前記最適化された顔アイデンティティベクトルに対応する顔グリッドと前記初期顔アイデンティティベクトルに対応する顔グリッドとの距離を計算することと、
前記距離と前記平均顔の顔大きさとの比を前記顔変化率として計算することと、
を含む、
請求項25に記載の顔追跡方法。
【請求項27】
前記最適化された顔アイデンティティベクトルを前記追跡スレッドに送信した後、
前記第1のキーフレームデータセットにおける最適化されたキーフレームの表情データと姿勢データに基づいて各キーフレームのフレームベクトルを更新することと、
各キーフレームのフレームベクトルに基づいて第1のPCAサブ空間を更新することと、
をさらに含む、
請求項16に記載の顔追跡方法。
【請求項28】
前記最適化スレッドが呼び出された後、追跡スレッドに使用された現在の顔アイデンティティベクトルを初期顔アイデンティティベクトルとする前に、
第1のPCAサブ空間を第2のPCAサブ空間にセットすることをさらに含む、
請求項16に記載の顔追跡方法。
【請求項29】
第1のキーフレームデータセットと第2のキーフレームデータセットをメンテナンス
する追跡スレッドに適用される顔追跡装置であって、
動画フレームに対して顔追跡を行う過程では、最適化スレッドが動作しているかどうかを判断するように構成される最適化スレッド動作判断モジュールと、
前記最適化スレッドが動作していることに対応して、前記動画フレームがキーフレームである場合、前記動画フレームに基づいて前記第2のキーフレームデータセットを更新するように構成される第2のキーフレームデータセット更新モジュールと、
前記最適化スレッドから送信された前記第2のキーフレームデータセットにおける動画フレームをクリアするクリア命令を受信した場合、前記第2のキーフレームデータセットにおける動画フレームをクリアし、前記第2のキーフレームデータセットを前記第1のキーフレームデータセットに更新するように構成されるクリアモジュールと、
前記最適化スレッドが動作していないことに対応して、前記動画フレームがキーフレームである場合、前記動画フレーム及び前記第2のキーフレームデータセットに基づいて前記第1のキーフレームデータセットを更新するように構成される第1のキーフレームデータセット更新モジュールと、
前記第1のキーフレームデータセットが更新された後、前記最適化スレッドを呼び出すことにより、前記最適化スレッドが前記第1のキーフレームデータセットに基づいて顔アイデンティティを最適化するように構成される最適化スレッド呼び出しモジュールと、
を含む、
顔追跡装置。
【請求項30】
最適化スレッドに適用され
る顔追跡装置であって、
前記最適化スレッドが呼び出された後、追跡スレッドに使用された現在の顔アイデンティティベクトルを初期顔アイデンティティベクトルとするように構成される顔アイデンティティベクトル初期化モジュールと、
第1のキーフレームデータセットを取得するように構成され、ここで、前記第1のキーフレームデータセットは、前記追跡スレッドによる顔追跡後に更新されたデータセットであり、前記第1のキーフレームデータセットは、顔追跡データを含む第1のキーフレームデータセット取得モジュールと、
前記初期顔アイデンティティベクトルに基づいて前記第1のキーフレームデータセットにおける顔追跡データを最適化することにより、最適化された顔追跡データを得るように構成される顔追跡データ最適化モジュールと、
前記最適化された顔追跡データに基づいて前記初期顔アイデンティティベクトルに対して反復最適化を行うことにより、最適化された顔アイデンティティベクトルを得るように構成される顔アイデンティティベクトル最適化モジュールと、
毎回の反復の後、前記最適化された顔アイデンティティベクトルと前記初期顔アイデンティティベクトルに基づいて反復停止条件を満たすかどうかを判断するように構成される反復停止判断モジュールと、
前記反復停止条件を満たすことに対応して、前記最適化された顔アイデンティティベクトルを前記追跡スレッドに送信することにより、前記追跡スレッドが、前記最適化された顔アイデンティティベクトルを受信した場合、受信した顔アイデンティティベクトルを現在の顔アイデンティティベクトルとして確定するように構成される反復停止モジュールと、
前記反復停止条件を満たさないことに対応して、前記追跡スレッドに第2のキーフレームデータセットにおける動画フレームをクリアするクリア命令を送信することにより、前記追跡スレッドが、前記クリア命令を受信した後、前記第2のキーフレームデータセットの第2のキーフレーム集合が非空集合である場合、前記第2のキーフレームデータセットを前記第1のキーフレームデータセットに更新するように構成されるクリア命令送信モジュールと、
前記最適化された顔アイデンティティベクトルを初期顔アイデンティティベクトルとして、前記顔追跡データ最適化モジュールに戻るように構成される初期顔アイデンティティベクトル更新モジュールと、
を含む、
顔追跡装置。
【請求項31】
少なくとも1つの処理装置と、
少なくとも1つのプログラムを記憶するように構成される記憶装置と、
を含み、
前記少なくとも1つのプログラムが前記少なくとも1つの処理装置によって実行される際に、前記少なくとも1つの処理装置に請求項1から28のいずれか1項に記載の顔追跡方法を実現させる、
電子デバイス。
【請求項32】
コンピュータプログラムが記憶され、ここで、前記プログラムが処理装置によって実行される際に、請求項1から28のいずれか1項に記載の顔追跡方法を実現するコンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本出願は、2021年01月05日に中国特許庁に提出された出願番号202110007729.1の中国特許出願の優先権を主張し、その全ての内容は参照により本出願に援用する。
【0002】
本出願の実施例は、画像処理技術の分野に関し、例えば顔追跡方法、顔追跡装置、電子デバイスおよび記憶媒体に関するものである。
【背景技術】
【0003】
動画の顔追跡は、例えば動画における顔に帽子や眼鏡を試着したり、ひげやタトゥーを追加したりするなどの視覚効果の増強を実現するために使用されることができ、仮想人形の表情運動を働かすために使用することもできる。
【0004】
動画における2次元顔は、ユーザーの顔アイデンティティとユーザーの表情を組み合わせた3次元顔の2次元投影であり、リアルタイムな顔追跡では、動画における顔の2次元キーポイントに基づいてユーザーの顔アイデンティティとユーザーの表情を正確に計算する必要があるので、顔アイデンティティを迅速に再構築して顔追跡を行う必要がある。
【0005】
リアルタイムな顔アイデンティティ再構築では、ユーザーのリアルタイム動画からキーフレームを抽出して顔アイデンティティを再構築する必要があり、ユーザーによる使用に非常に便利であり、しかも動画データが増えるにつれて、より多くのキーフレームで顔アイデンティティを最適化し、誤差を減らすことができる。しかしながら、顔アイデンティティの再構築を行う過程では、顔アイデンティティ最適化スレッドが動作している場合、追跡スレッドは、キーフレームを増やすことができず、顔アイデンティティ最適化スレッドの動作が終了した後にキーフレームを1つ増やすことしかできず、この結果、追跡スレッドは、キーフレームを検出しても顔アイデンティティを最適化するためにキーフレームを増やすことができず、キーフレームを1つ増やすごとに顔アイデンティティ最適化スレッドを1回に呼び出し、キーフレーム数の増加が遅く、キーフレームが見失われ、顔アイデンティティ最適化の収束速度が遅く、顔アイデンティティが正確でない一方、顔最適化スレッドの呼び出し回数が増加し、上記の2つの原因で、リアルタイムな顔アイデンティティ再構築のリアルタイム性が悪くなり、最終的にはリアルタイムな顔追跡に適用することができない。
【発明の概要】
【課題を解決するための手段】
【0006】
本出願では、関連技術における顔アイデンティティ再構築時の顔アイデンティティベクトルの収束速度が遅く、顔アイデンティティ最適化スレッドの呼び出し回数が多いという問題を解決するための顔追跡方法、顔追跡装置、電子デバイスおよび記憶媒体を開示する。
【0007】
本出願は、追跡スレッドに適用され、前記追跡スレッドは、第1のキーフレームデータセットと第2のキーフレームデータセットをメンテナンスし、
動画フレームに対して顔追跡を行う過程では、最適化スレッドが動作しているかどうかを判断することと、
前記最適化スレッドが動作していることに対応して、前記動画フレームがキーフレームである場合、前記動画フレームに基づいて第2のキーフレームデータセットを更新することと、
最適化スレッドから送信された前記第2のキーフレームデータセットにおける動画フレームをクリアするクリア命令を受信した場合、前記第2のキーフレームデータセットにおける動画フレームをクリアし、前記第2のキーフレームデータセットにおける動画フレームをクリアし、前記第2のキーフレームデータセットを第1のキーフレームデータセットに更新することと、
前記最適化スレッドが動作していないことに対応して、前記動画フレームがキーフレームである場合、前記動画フレーム及び前記第2のキーフレームデータセットに基づいて前記第1のキーフレームデータセットを更新することと、
前記第1のキーフレームデータセットが更新された後、前記最適化スレッドを呼び出すことにより、前記最適化スレッドが前記第1のキーフレームデータセットに基づいて顔アイデンティティを最適化することと、
を含む、
顔追跡方法に関する。
【0008】
本出願は、最適化スレッドに適用され、
前記最適化スレッドが呼び出された後、追跡スレッドに使用された現在の顔アイデンティティベクトルを初期顔アイデンティティベクトルとすることと、
第1のキーフレームデータセットを取得し、前記第1のキーフレームデータセットは、前記追跡スレッドによる顔追跡後に更新されたデータセットであり、前記第1のキーフレームデータセットは、顔追跡データを含むことと、
前記初期顔アイデンティティベクトルに基づいて前記第1のキーフレームデータセットにおける顔追跡データを最適化することにより、最適化された顔追跡データを得ることと、
前記最適化された顔追跡データに基づいて前記初期顔アイデンティティベクトルに対して反復最適化を行うことにより、最適化された顔アイデンティティベクトルを得ることと、
毎回の反復の後、前記最適化された顔アイデンティティベクトルと前記初期顔アイデンティティベクトルに基づいて反復停止条件を満たすかどうかを判断することと、
前記反復停止条件を満たすことに対応して、前記最適化された顔アイデンティティベクトルを前記追跡スレッドに送信することにより、前記追跡スレッドが、前記最適化された顔アイデンティティベクトルを受信した場合、受信した顔アイデンティティベクトルを現在の顔アイデンティティベクトルとして確定することと、
前記反復停止条件を満たさないことに対応して、前記追跡スレッドに第2のキーフレームデータセットにおける動画フレームをクリアするクリア命令を送信することにより、前記追跡スレッドが、前記クリア命令を受信した後、前記第2のキーフレームデータセットの第2のキーフレーム集合が非空集合である場合、前記第2のキーフレームデータセットを前記第1のキーフレームデータセットに更新することと、
前記最適化された顔アイデンティティベクトルを初期顔アイデンティティベクトルとし、前記初期顔アイデンティティベクトルに基づいて前記第1のキーフレームデータセットにおける顔追跡データを最適化することにより、最適化された顔追跡データを得るステップに戻ることと、
を含む、
顔追跡方法に関する。
【0009】
本出願は、追跡スレッドに適用され、前記追跡スレッドは、第1のキーフレームデータセットと第2のキーフレームデータセットをメンテナンスし、
動画フレームに対して顔追跡を行う過程では、最適化スレッドが動作しているかどうかを判断するように構成される最適化スレッド動作判断モジュールと、
前記最適化スレッドが動作していることに対応して、前記動画フレームがキーフレームである場合、前記動画フレームに基づいて第2のキーフレームデータセットを更新するように構成される第2のキーフレームデータセット更新モジュールと、
最適化スレッドから送信された前記第2のキーフレームデータセットにおける動画フレームをクリアするクリア命令を受信した場合、前記第2のキーフレームデータセットにおける動画フレームをクリアし、前記第2のキーフレームデータセットを第1のキーフレームデータセットに更新するように構成されるクリアモジュールと、
前記最適化スレッドが動作していないことに対応して、前記動画フレームがキーフレームである場合、前記動画フレーム及び前記第2のキーフレームデータセットに基づいて前記第1のキーフレームデータセットを更新するように構成される第1のキーフレームデータセット更新モジュールと、
前記第1のキーフレームデータセットが更新された後、前記最適化スレッドを呼び出すことにより、前記最適化スレッドが前記第1のキーフレームデータセットに基づいて顔アイデンティティを最適化するように構成される最適化スレッド呼び出しモジュールと、
を含む、
顔追跡装置に関する。
【0010】
本出願の実施例は、最適化スレッドに適用され、
前記最適化スレッドが呼び出された後、追跡スレッドに使用された現在の顔アイデンティティベクトルを初期顔アイデンティティベクトルとするように構成される顔アイデンティティベクトル初期化モジュールと、
第1のキーフレームデータセットを取得するように構成され、前記第1のキーフレームデータセットは、前記追跡スレッドによる顔追跡後に更新されたデータセットであり、前記第1のキーフレームデータセットは、顔追跡データを含む第1のキーフレームデータセット取得モジュールと、
前記初期顔アイデンティティベクトルに基づいて前記第1のキーフレームデータセットにおける顔追跡データを最適化することにより、最適化された顔追跡データを得るように構成される顔追跡データ最適化モジュールと、
前記最適化された顔追跡データに基づいて前記初期顔アイデンティティベクトルに対して反復最適化を行うことにより、最適化された顔アイデンティティベクトルを得るように構成される顔アイデンティティベクトル最適化モジュールと、
毎回の反復の後、前記最適化された顔アイデンティティベクトルと前記初期顔アイデンティティベクトルに基づいて反復停止条件を満たすかどうかを判断するように構成される反復停止判断モジュールと、
前記反復停止条件を満たすことに対応して、前記最適化された顔アイデンティティベクトルを前記追跡スレッドに送信することにより、前記追跡スレッドが、前記最適化された顔アイデンティティベクトルを受信した場合、受信した顔アイデンティティベクトルを現在の顔アイデンティティベクトルとして確定するように構成される反復停止モジュールと、
前記反復停止条件を満たさないことに対応して、前記追跡スレッドに第2のキーフレームデータセットにおける動画フレームをクリアするクリア命令を送信することにより、前記追跡スレッドが、前記クリア命令を受信した後、前記第2のキーフレームデータセットの第2のキーフレーム集合が非空集合である場合、前記第2のキーフレームデータセットを前記第1のキーフレームデータセットに更新するように構成されるクリア命令送信モジュールと、
前記最適化された顔アイデンティティベクトルを初期顔アイデンティティベクトルとして、顔追跡データ最適化モジュールに戻るように構成される初期顔アイデンティティベクトル更新モジュールと、
を含む、
顔追跡装置に関する。
【0011】
本出願は、
1つ以上の処理装置と、
1つ以上のプログラムを記憶するように構成される記憶装置と、
を含み、
前記1つ以上のプログラムが前記1つ以上の処理装置によって実行される際に、前記1つ以上の処理装置に上記の顔追跡方法を実現させる、
電子デバイスに関する。
【0012】
本出願は、コンピュータ可読記憶媒体に関し、前記コンピュータ可読記憶媒体にコンピュータプログラムが記憶され、当該プログラムが処理装置によって実行される際に、上記の顔追跡方法を実現する。
【図面の簡単な説明】
【0013】
【
図1】本出願の実施例1による顔追跡方法のステップのフローチャートである。
【
図2】本出願の実施例2による顔追跡方法のステップのフローチャートである。
【
図3】本出願の実施例3による顔追跡方法のステップのフローチャートである。
【
図4】本出願の実施例4による顔追跡方法のステップのフローチャートである。
【
図5】本出願の実施例5による顔追跡装置の構造ブロック図である。
【
図6】本出願の実施例6による顔追跡装置の構造ブロック図である。
【
図7】本出願の実施例7による電子デバイスの構造概略図である。
【発明を実施するための形態】
【0014】
以下、図面および実施例を参照して本出願を説明する。本明細書に記載された具体的な実施例は、本出願を説明するためにのみ使用される。なお、説明を容易にするために、図面には、本出願に関連する部分のみが示されている。
【0015】
実施例1
図1は、本出願の実施例1による顔追跡方法のステップのフローチャートであり、本出願の実施例は、顔追跡を行う過程では追跡スレッドが顔を追跡してキーフレームを抽出する場合に適用することができ、当該方法は、本出願の実施例による顔追跡装置によって実行されてもよく、当該顔追跡装置は、ソフトウェアおよび/またはハードウェアによって実現されることができ、本出願の実施例による電子デバイスに統合され、
図1に示されたように、本出願の実施例の顔追跡方法は、以下のステップを含み得る。
【0016】
S101では、動画フレームに対して顔追跡を行う過程では、最適化スレッドが動作しているかどうかを判断する。
【0017】
本出願の実施例では、追跡スレッドと最適化スレッドによって動画フレームに対して顔追跡を行うことができ、追跡スレッドは、動画の動画フレームに対して顔追跡を行うことにより顔姿勢データ、表情データ、顔キーポイントなどの顔追跡データを取得するためのスレッドであり、追跡スレッドは、動画フレームがキーフレームであるかどうかを検出するためにも使用され、最適化スレッドは、追跡スレッドによって検出されたキーフレームに基づいて顔アイデンティティベクトルを最適化するスレッドであってもよく、最適化スレッドは、追跡スレッドに対して最適化された顔アイデンティティベクトルを提供し、追跡スレッドは、最適化された顔アイデンティティベクトルに基づいて動画フレームに対して顔追跡を行い、キーフレームを検出する。
【0018】
追跡スレッドと最適化スレッドの間でデータを交換することができるため、追跡スレッドが、最適化スレッドが動作しているかどうかを判断することができ、例示的に、最適化スレッドは状態識別子を有してもよく、追跡スレッドは、当該状態識別子に基づいて最適化スレッドが動作しているかどうかを判断することができ、最適化スレッドが動作している場合、S102を実行し、最適化スレッドが動作していない場合、S104を実行する。
【0019】
S102では、前記動画フレームがキーフレームである場合、前記動画フレームに基づいて第2のキーフレームデータセットを更新する。
【0020】
本出願の実施例では、追跡スレッドは、第1のキーフレームデータセット
【0021】
【0022】
と第2のキーフレームデータセット
【0023】
【0024】
をメンテナンスし、各キーフレームデータセットは、キーフレーム集合、キーフレームのフレームベクトル、キーフレームの顔追跡データを含む。
【0025】
追跡スレッドが動画の顔追跡を開始する前に、顔アイデンティティベクトル、第1のキーフレームデータセット
【0026】
【0027】
と第2のキーフレームデータセット
【0028】
【0029】
など様々なパラメータを初期化することができ、ここで、現在の顔アイデンティティベクトルは、現在動画フレームを追跡するのに使用された顔アイデンティティベクトルであってもよく、追跡スレッドは、現在の顔アイデンティティベクトルを用いて動画フレームに対して顔追跡を行なった後、顔追跡データを取得することができ、当該顔追跡データは、顔姿勢データ、顔表情データ及び顔キーポイントであってもよく、即ち顔追跡を行う過程では、現在の顔アイデンティティベクトルαが与えられた場合、追跡スレッドは、i番目の動画フレームに対して顔追跡を行った後、次のような顔追跡データを取得し、即ち、
【0030】
【0031】
Qiは顔キーポイントであり、Piは姿勢データであり、
【0032】
【0033】
は表情データである。
【0034】
本出願の実施例では、最適化スレッドは、第1のキーフレームデータセットにおけるキーフレームの顔追跡データを用いて顔アイデンティティベクトルを最適化し、最適化スレッドの動作中に第1のキーフレームデータセットを更新しない。
【0035】
本出願の一選択可能な実施例では、追跡スレッドは、また第1の主成分分析(Principal Components Analysis、PCA)サブ空間と第2のPCAサブ空間をメンテナンスし、PCAサブ空間は、キーフレームデータセットのキーフレーム集合における全てのキーフレームのフレームベクトル、平均フレームベクトル及び特徴ベクトルマトリクスからなる空間であってもよく、第1のPCAサブ空間は、第1のキーフレームデータセットの第1のキーフレーム集合における全てのキーフレームのフレームベクトル、平均フレームベクトル及び特徴ベクトルマトリクスからなる空間であってもよく、最適化スレッドを開始する前に、第1のPCAサブ空間を第2のPCAサブ空間にセットし、現在の動画フレームの顔追跡データと第2のPCAサブ空間に基づいて現在の動画フレームがキーフレームであるかどうかを検出することができ、現在の動画フレームがキーフレームである場合、動画フレームFiをキーフレームとして第2のキーフレームデータセットの第2のキーフレーム集合に追加し、動画フレームのフレームベクトルを第2のキーフレームデータセットに追加し、第2のPCAサブ空間を更新し、即ち
【0036】
【0037】
になり、この後、更新された第2のPCAサブ空間で次の動画フレームがキーフレームであるかどうかを検出し続ける。
【0038】
例示的に、顔追跡中に、追跡スレッドは、表情データδと姿勢データにおける回転ベクトルに基づいて各動画フレームのフレームベクトルを計算し、第1のキーフレームデータセットにおける全てのキーフレームのフレームベクトルに対してPCA分析を行なって変化量の95%を保持することにより、平均フレームベクトル
【0039】
【0040】
と特徴ベクトルマトリクスMを得て、全てのキーフレームのフレームベクトル、平均フレームベクトル
【0041】
【0042】
、特徴ベクトルマトリクスMを第1のPCAサブ空間とし、第1のPCAサブ空間を第2のPCAサブ空間にセットした後、いずれかの動画フレームのフレームベクトルvから第2のPCAサブ空間までの距離は、
【0043】
【0044】
になる。
【0045】
距離
【0046】
【0047】
が予め設定された閾値
【0048】
【0049】
未満である場合、当該動画フレームがキーフレームであると確定し、当該動画フレームを第2のキーフレームデータセットの第2のキーフレーム集合に追加し、当該第2のキーフレームのフレームベクトルを第2のキーフレームデータセットに追加し、当該第2のキーフレームのフレームベクトルに基づいて第2のPCAサブ空間を更新し、距離
【0050】
【0051】
が予め設定された閾値
【0052】
【0053】
以上である場合、次の動画フレームを追跡する。
【0054】
実際の用途において、PCAサブ空間によって動画フレームがキーフレームであるかどうかを判断することに限らず、当業者は、他の方法で動画フレームがキーフレームであるかどうかを判断することができ、本出願の実施例では、これについて限定しない。
【0055】
S103では、最適化スレッドから送信された前記第2のキーフレームデータセットの動画フレームをクリアする命令を受信した場合、前記第2のキーフレームデータセットにおける動画フレームをクリアし、前記第2のキーフレームデータセットを第1のキーフレームデータセットに更新する。
【0056】
最適化スレッドが顔アイデンティティベクトルに対して反復最適化を行う場合、毎回の反復最適化の終了後、最適化スレッドは、第2のキーフレームデータセットにおける第2のキーフレーム集合が非空集合であるかどうかを判断し、第2のキーフレームデータセットにおける第2のキーフレーム集合が非空集合である場合、以下のことを示し、即ち、最適化スレッドによる反復最適化では、追跡スレッドによってキーフレームが追跡され、最適化スレッドは、第2のキーフレームデータセットの動画フレームをクリアする命令を追跡スレッドに送信することができ、追跡スレッドは、クリア命令を受信した後、第2のキーフレームデータセットにおける第2のキーフレーム集合のうちのキーフレームを第1のキーフレームデータセットの第1のキーフレーム集合に更新し、第2のキーフレーム集合をクリアし、同時に第2のキーフレーム集合のうちのキーフレームのフレームベクトルを第1のキーフレーム集合に追加し、これにより、動作している最適化スレッドは、新たに追跡されたキーフレームの顔追跡データを使用して、顔アイデンティティベクトルを反復して最適化することができ、最適化スレッドの動作中にキーフレームの追加を実現し、追跡されたキーフレームを追加できないことによるキーフレームの漏れを回避し、キーフレームの追加速度が向上する一方、最適化スレッドの動作中に複数のキーフレームを追加することができ、最適化スレッドを呼び出す回数を減らすことができる。
【0057】
S104では、前記動画フレームがキーフレームである場合、前記動画フレーム及び前記第2のキーフレームデータセットに基づいて前記第1のキーフレームデータセットを更新する。
【0058】
最適化スレッドが動作していない場合、第1のPCAサブ空間と顔追跡データに基づいて動画フレームがキーフレームであるかどうかを判断することができ、第2のPCAサブ空間と顔追跡データに基づいて動画フレームがキーフレームであるかどうかの判断を参照することができ、ここでは詳細を省略する。
【0059】
動画フレームがキーフレームであると確定した場合、当該動画フレームをキーフレームとして第1のキーフレームデータセットの第1のキーフレーム集合に追加し、動画フレームのフレームベクトルを第1のキーフレームデータセットに追加し、同時に動画フレームのフレームベクトルを第1のPCAサブ空間に追加し、第1のPCAサブ空間の平均フレームベクトルと特徴ベクトルマトリクスを更新し、次の動画フレームを追跡し、動画がキーフレームでない場合、第2のキーフレームデータセットにおける第2のキーフレーム集合が非空集合であるかどうかを判断し、第2のキーフレームデータセットにおける第2のキーフレーム集合が非空集合である場合、第2のキーフレーム集合のうちのキーフレームを第1のキーフレーム集合に更新し、第2のキーフレーム集合のうちのキーフレームのフレームベクトルを第1のキーフレームデータセットに追加する。
【0060】
S105では、前記第1のキーフレームデータセットが更新された後、前記最適化スレッドを呼び出すことにより、前記最適化スレッドが更新された第1のキーフレームデータセットに基づいて顔アイデンティティを最適化する。
【0061】
第1のキーフレームデータセットが更新されたことは、新しいキーフレームが追跡されたことを示し、第2のキーフレームデータセットにおける第2のキーフレーム集合が非空集合であることは、同様に新しいキーフレームが追跡されたことを示し、同様に第1のキーフレームデータセットを更新し、最適化スレッドが動作していないと、第1のキーフレームデータセットを更新する場合、最適化スレッドを呼び出し、最適化スレッドによって第1のキーフレームデータセットのキーフレームの顔追跡データと組み合わせることで顔アイデンティティベクトルを最適化する。
【0062】
本出願の実施例の顔追跡方法は、以下のことを実現し、即ち、最適化スレッドの動作中にまず検出されたキーフレームに基づいて第2のキーフレームデータセットを更新し、最適化スレッドから送信された第2のキーフレームデータセットの動画フレームをクリアする命令を受信した場合、第2のキーフレームデータセットを第1のキーフレームデータセットに更新し、第2のキーフレームデータセットにおける動画フレームをクリアし、最適化スレッドが動作していないと、動画フレームがキーフレームである場合、動画フレーム及び第2のキーフレームデータセットに基づいて第1のキーデータセットを更新し、即ち最適化スレッドが動作しているかどうかにかかわらず、追跡スレッドは常にキーフレームを追加することができ、1つのキーフレームが検出された度に最適化スレッドを1回に呼び出す必要がなく、最適化スレッドの呼び出し回数を減少させ、最終的にはリアルタイムな顔アイデンティティベクトルの最適化のリアルタイム性が高くなり、消費されたリソースが少なくなり、顔アイデンティティ最適化の正確性を高めるために、より多くのリソースを使用して複雑な最適化アルゴリズムを実現することができる。
【0063】
実施例2
図2は、本出願の実施例2による顔追跡方法のステップのフローチャートであり、上記実施例1を踏まえて本出願の実施例を説明し、
図2に示されたように、本出願の実施例の顔追跡方法は、以下のステップを含み得る。
【0064】
S201では、最適化スレッドから顔アイデンティティベクトルを受信した場合、受信した顔アイデンティティベクトルを現在の顔アイデンティティベクトルとして確定する。
【0065】
本出願の実施例では、追跡スレッドは、最適化スレッドに対してキーフレームを提供し、最適化スレッドは、キーフレームを用いて顔アイデンティティベクトルを最適化し、最適化スレッドが顔アイデンティティに対して反復最適化を行うことにより収束後の顔アイデンティティベクトルを得た後、当該顔アイデンティティベクトルを追跡スレッドに送信し、追跡スレッドは、当該受信した顔アイデンティティベクトルを現在の顔アイデンティティベクトルとし、当該現在の顔アイデンティティベクトルで受信した動画フレームに対して顔追跡を行う。
【0066】
S202では、前記現在の顔アイデンティティベクトルに基づいて動画フレームを追跡することにより、顔追跡データとして前記動画フレームにおける顔の顔キーポイント、姿勢データと表情データを取得する。
【0067】
追跡スレッドが動画の顔追跡を開始する前に、顔アイデンティティベクトルなど様々なパラメータを初期化することができ、現在の顔アイデンティティベクトルは、現在動画フレームを追跡するのに使用された顔アイデンティティベクトルであってもよく、追跡スレッドは、現在の顔アイデンティティベクトルを用いて動画フレームに対して顔追跡を行なった後、顔追跡データを取得することができ、当該顔追跡データは、顔姿勢データ、顔表情データ及び顔キーポイントであってもよく、即ち顔追跡を行う過程では、現在のアイデンティティベクトルαが与えられた場合、追跡スレッドは、i番目の動画フレームに対して顔追跡を行った後、次のような顔追跡データを取得し、即ち、
【0068】
【0069】
Qiは顔キーポイントであり、Piは姿勢データであり、
【0070】
【0071】
は表情データである。
【0072】
S203では、最適化スレッドが動作しているかどうかを判断する。
【0073】
追跡スレッドと最適化スレッドの間でデータを交換することができるため、追跡スレッドが、最適化スレッドが動作しているかどうかを判断することができ、例示的に、最適化スレッドには状態識別子が設定されてもよく、追跡スレッドは、当該状態識別子に基づいて最適化スレッドが動作しているかどうかを判断することができ、最適化スレッドが動作している場合、S204を実行し、最適化スレッドが動作していない場合、S212を実行する。
【0074】
S204では、最適化スレッドを呼び出す前に、第1のPCAサブ空間を第2のPCAサブ空間にセットし、前記第1のPCAサブ空間は、前記第1のキーフレームデータセットの第1のキーフレーム集合における全てのキーフレームのフレームベクトル、平均フレームベクトル及び特徴ベクトルマトリクスからなる空間である。
【0075】
本出願の実施例では、最適化スレッドが動作するたびに、第1のPCAサブ空間を第2のPCAサブ空間にセットすることができ、第1のPCAサブ空間は、第1のキーフレームデータセットにおける第1のキーフレーム集合の全てのキーフレームのフレームベクトル、平均フレームベクトル及び特徴ベクトルマトリクスからなるサブ空間である。
【0076】
S205では、前記第2のPCAサブ空間、前記動画フレームの姿勢データ及び表情データに基づいて前記動画フレームがキーフレームであるかどうかを判断する。
【0077】
選択肢の一つとして、姿勢データと表情データに基づいて動画フレームのフレームベクトルを計算し、動画フレームのフレームベクトルと第2のPCAサブ空間との距離を計算することができ、当該距離が予め設定された閾値未満である場合、動画フレームがキーフレームであると確定し、S206を実行し、当該距離が予め設定された閾値以上である場合、動画フレームがキーフレームでないと確定し、S209を実行する。
【0078】
例示的に、顔追跡中に、追跡スレッドが動画フレームにおける顔の表情データδと姿勢データにおける回転ベクトルに基づいて各動画フレームのフレームベクトルνを計算することにより、平均フレームベクトル
【0079】
【0080】
と特徴ベクトルマトリクスMを得て、Mは第1のPCAサブ空間であり、第1のPCAサブ空間を第2のPCAサブ空間にセットした後、いずれかの動画フレームのフレームベクトルνから第2のPCAサブ空間までの距離は、
【0081】
【0082】
になる。
【0083】
【0084】
は第2のPCAサブ空間における平均フレームベクトルであり、Mは第2のPCAサブ空間における特徴ベクトルマトリクスであり、距離
【0085】
【0086】
が予め設定された閾値
【0087】
【0088】
未満である場合、当該動画フレームがキーフレームであると確定し、距離
【0089】
【0090】
が予め設定された閾値
【0091】
【0092】
以上である場合、当該動画フレームがキーフレームでない。
【0093】
S206では、前記動画フレームに基づいて第2のキーフレームデータセットを更新する。
【0094】
現在の動画フレームをキーフレームとして第2のキーフレームデータセットの第2のキーフレーム集合に追加し、動画フレームの顔キーポイント、姿勢データ、表情データ及びフレームベクトルを第2のキーフレームデータセットに追加することができ、S207とS210を実行することができ、ここで、動画フレームの姿勢データ及び表情データに基づいて動画フレームのフレームベクトルを計算し第2のキーフレームデータセットに追加することができる。
【0095】
別の選択可能な実施例では、第2のキーフレームデータセットの第2のキーフレーム集合には識別子が設定されてもよく、まず第2のキーフレーム集合の識別子が予め設定された第1の識別子であるかどうかを判断することができ、予め設定された第1の識別子は、第2のキーフレーム集合が空集合であることを示す。例示的に、予め設定された第1の識別子は1であってもよく、第2のキーフレーム集合が空集合であることを示し、予め設定された第1の識別子が1でなく、例えば0である場合、第2のキーフレーム集合が非空集合であることを示し、識別子を変更することなく検出されたキーフレームを第2のキーフレーム集合に直接に追加することができ、第2のキーフレーム集合の識別子が予め設定された第1の識別子1である場合、第2のキーフレーム集合が空集合であることを示し、キーフレームが検出されキーフレームを第2のキーフレーム集合に追加した後、第2のキーフレーム集合の識別子を予め設定された第2の識別子0に設定することができる。第2のキーフレーム集合の識別子を設定することにより、最適化スレッドが、第2のキーフレーム集合が非空集合であるかどうかを容易に知ることができ、最適化スレッドが、最適化を行う過程では第2のキーフレーム集合が非空集合である場合追跡スレッドにクリア命令を送信して第1のキーフレーム集合と第2のキーフレーム集合をマージし、新たに検出されたキーフレームを使用して顔アイデンティティベクトルを最適化することができる。
【0096】
S207では、予め設定されたステップ幅に基づいて前記閾値を更新する。
【0097】
本出願の実施例では、動的閾値を採用し、即ち閾値をリアルタイムで更新し、例示的に、
【0098】
【0099】
を採用する。
【0100】
ここで、
【0101】
【0102】
は閾値であり、
【0103】
【0104】
はステップであり、1つのキーフレームが検出された度に閾値を更新し、この後S208を実行する。
【0105】
S208では、前記第2のキーフレームデータセットにおけるフレームベクトルに基づいて前記第2のPCAサブ空間を更新する。
【0106】
動画フレームのフレームベクトル、顔キーポイント、姿勢データ及び表情データを第2のキーフレームデータセットに追加した後、動画フレームのフレームベクトルを第2のPCAサブ空間に追加することができ、第2のPCAサブ空間の平均フレームベクトルと特徴ベクトルマトリクスを再計算することにより第2のPCAサブ空間を更新し、当該更新された第2のPCAサブ空間で次の動画フレームがキーフレームであるかどうかを判断し続け、最適化スレッドが動作していない後に第1のPCAサブ空間に基づいて動画フレームがキーフレームであるかどうかを判断する。
【0107】
S209では、前記最適化スレッドから顔アイデンティティベクトルを受信したかどうかを判断する。
【0108】
追跡スレッドは、1つの動画フレームを追跡した後に次の動画フレームを追跡する必要があり、次の動画フレームを追跡する前に、最適化スレッドから顔アイデンティティベクトルを受信したかどうかを先に判断することができ、最適化スレッドから顔アイデンティティベクトルを受信した場合、顔アイデンティティベクトルが最適化され更新されたことを示し、S201に戻って受信した顔アイデンティティベクトルを現在の顔アイデンティティベクトルとする。
【0109】
顔最適化スレッドから顔アイデンティティベクトルを受信しなかった場合、S202に戻り、顔アイデンティティベクトルが更新されなく最適化されないことを示し、現在の顔アイデンティティベクトルで次の動画フレームを追跡し続ける。
【0110】
S210では、最適化スレッドから送信された前記第2のキーフレームデータセットの動画フレームをクリアする命令を受信した場合、前記第2のキーフレームデータセットにおける動画フレームをクリアし、前記第2のキーフレームデータセットを第1のキーフレームデータセットに更新する。
【0111】
最適化スレッドが顔アイデンティティベクトルに対して反復最適化を行う場合、毎回の反復最適化の終了後、最適化スレッドは、第2のキーフレームデータセットにおける第2のキーフレーム集合が非空集合であるかどうかを判断し、第2のキーフレームデータセットにおける第2のキーフレーム集合が非空集合である場合、以下のことを示し、即ち、最適化スレッドによる反復最適化では、追跡スレッドによってキーフレームが追跡され、最適化スレッドは、第2のキーフレーム集合をクリアする命令を追跡スレッドに送信することができ、追跡スレッドは、第2のキーフレーム集合をクリアする命令を受信した後、追跡された第2のキーフレーム集合のうちのキーフレームを第1のキーフレーム集合に更新し、第2のキーフレーム集合をクリアし、これにより、動作している最適化スレッドは、新たに追跡されたキーフレームを使用して、顔アイデンティティベクトルを反復をして最適化することができ、最適化スレッドの動作中にキーフレームの追加を実現し、追跡されたキーフレームを追加できないことによるキーフレームの漏れを回避し、キーフレームの追加速度が向上する一方、最適化スレッドの動作中に複数のキーフレームを追加することができ、最適化スレッドを呼び出す回数を減らすことができる。
【0112】
S211では、前記第1のキーフレームデータセットにおけるフレームベクトルに基づいて前記第1のPCAサブ空間を更新する。
【0113】
第2のキーフレームデータセットにおけるフレームベクトルを第1のキーフレームデータセットに追加した後、追加されたフレームベクトルを第1のPCAサブ空間に追加し、第1のPCAサブ空間の平均フレームベクトルと特徴ベクトルマトリクスを再計算することにより第1のPCAサブ空間を更新することができる。
【0114】
S212では、第1のPCAサブ空間と前記顔追跡データに基づいて前記動画フレームがキーフレームであるかどうかを判断する。
【0115】
最適化スレッドが動作していない場合、動画フレームにおける顔の姿勢データ及び表情データに基づいて動画フレームのフレームベクトルを計算し、動画フレームのフレームベクトルと第1のPCAサブ空間との距離を計算することができ、距離が予め設定された閾値未満である場合、動画フレームがキーフレームであると確定し、S213を実行し、距離が予め設定された閾値以上である場合、動画フレームがキーフレームでないと確定し、S216を実行する。
【0116】
第1のPCAサブ空間と顔追跡データに基づいて動画フレームがキーフレームであるかどうかの判断について、S205を参照することができ、ここでは詳細を省略する。
【0117】
S213では、前記動画フレーム及び前記第2のキーフレームデータセットに基づいて前記第1のキーフレームデータセットを更新する。
【0118】
最適化スレッドが動作せず、動画フレームがキーフレームであることが検出された場合、当該動画フレームを第1のキーフレームデータセットの第1のキーフレーム集合に追加し、当該動画フレームのフレームベクトル、顔キーポイント、姿勢データ及び表情データを第1のキーフレームデータセットに追加し、同時に、第2のキーフレームデータセットにおける第2のキーフレーム集合のうちのキーフレームを第1のキーフレーム集合に追加し、第2のキーフレームデータセットにおけるキーフレームのフレームベクトル、顔キーポイント、姿勢データ及び表情データを第1のキーフレームデータセットに追加することができる。
【0119】
S214では、予め設定されたステップ幅に基づいて前記閾値を更新する。
【0120】
例示的に、
【0121】
【0122】
である。
【0123】
ここで、
【0124】
【0125】
は閾値であり、
【0126】
【0127】
はステップであり、即ち1つのキーフレームが検出された度に閾値を更新する。
【0128】
S215では、前記第1のキーフレームデータセットにおけるフレームベクトルに基づいて前記第1のPCAサブ空間を更新する。
【0129】
第1のキーフレームデータセットに、検出されたキーフレームのフレームベクトルを追加し、または第2のキーフレームデータセットにおけるキーフレームのフレームベクトルを追加し、新たに追加されたフレームベクトルを第1のPCAサブ空間に追加し、第1のPCAサブ空間におけるフレームベクトルに基づいて平均フレームベクトルと特徴ベクトルマトリクスを計算することにより、第1のPCAサブ空間を更新することができる。
【0130】
S216では、前記第2のキーフレーム集合が非空集合であるかどうかを判断する。
【0131】
追跡スレッドによって現在の動画フレームがキーフレームでないことが検出された場合、第2のキーフレーム集合が非空集合であるかどうかを判断し、第2のキーフレーム集合が非空集合である場合、S217を実行し、第2のキーフレーム集合が空集合である場合、S209に戻る。
【0132】
S217では、前記第2のキーフレームデータセットを前記第1のキーフレームデータセットに更新し、かつ前記第1のPCAサブ空間を更新する。
【0133】
第2のキーフレームデータセットにおける第2のキーフレーム集合のうちのキーフレームを第1のキーフレーム集合に追加し、第2のキーフレームデータセットにおけるキーフレームのフレームベクトル、顔キーポイント、姿勢データ及び表情データを第1のキーフレームデータセットに追加し、新たに追加されたフレームベクトルに基づいて第1のPCAサブ空間を更新し、更新された第1のPCAサブ空間で次の動画フレームがキーフレームであるかどうかを検出し続ける。
【0134】
S218では、前記第1のキーフレームデータセットが更新された後、前記最適化スレッドを呼び出す。
【0135】
本出願の実施例では、最適化スレッドが動作していない場合、第1のキーフレーム集合が更新されると最適化スレッドが呼び出され、最適化スレッドが第1のキーフレームデータセットにおけるキーフレームの姿勢データと表情データを使用して顔アイデンティティベクトルを最適化する。
【0136】
S219では、前記最適化スレッドから受信した2回隣接する顔アイデンティティベクトルを用いて顔変化率を計算する。
【0137】
最適化スレッドは、呼び出されるたびに最適化された顔アイデンティティベクトルを追跡スレッドに送信し、F(α)が顔アイデンティティベクトルαに対応する顔グリッドであり、sが3次元平均顔の最小外接矩形の対角線の長さであると仮定し、2回隣接する顔アイデンティティベクトルがα1からα2に変化した場合、顔変化率を計算し、
【0138】
【0139】
になる。
【0140】
即ち顔グリッドのj個の頂点における最大移動量を3次元平均顔の最小外接矩形の対角線の長さで割ると顔変化率となる。
【0141】
S220では、前記顔変化率が予め設定された変化率閾値未満であるかどうかを判断する。
【0142】
即ち
【0143】
【0144】
が成立するかどうかを判断する。
【0145】
上記の式が成立した場合、S221を実行し、上記の式が成立しない場合、S202に戻って顔追跡を行う過程ではキーフレームを抽出し続け、最適化スレッドは、より多くのキーフレームを使用して顔アイデンティティベクトルを最適化するようにする。
【0146】
S221では、前記現在の顔アイデンティティベクトルで動画フレームを追跡する過程で前記動画フレームがキーフレームであるかどうかの判断を停止し、前記最適化スレッドを呼び出さない。
【0147】
顔変化率が予め設定された変化率閾値未満である場合、顔アイデンティティベクトルは収束し、追跡スレッドは現在の顔アイデンティティベクトルに基づいて動画フレームを追跡し、追跡中にキーフレームを検出せず、即ちS203~S221のステップを実行しない。
【0148】
本出願の実施例の顔追跡方法は、以下のことを実現し、即ち、最適化スレッドの動作中にまず検出されたキーフレームに基づいて第2のキーフレームデータセットを更新し、最適化スレッドから送信された第2のキーフレームデータセットの動画フレームをクリアする命令を受信した場合、第2のキーフレームデータセットを第1のキーフレームデータセットに更新し、第2のキーフレームデータセットにおける動画フレームをクリアし、最適化スレッドが動作していないと、動画フレームがキーフレームである場合、動画フレーム及び第2のキーフレームデータセットに基づいて第1のキーデータセットを更新し、即ち最適化スレッドが動作しているかどうかにかかわらず、追跡スレッドは常にキーフレームを追加することができ、大量のキーフレームを迅速に抽出して顔アイデンティティベクトルを最適化することができ、顔アイデンティティベクトルの収束速度を向上させる一方、1つのキーフレームが検出された度に最適化スレッドを1回に呼び出す必要がなく、最適化スレッドの呼び出し回数を減少させ、最終的にはリアルタイムな顔アイデンティティベクトルの最適化のリアルタイム性が高くなり、消費されたリソースが少なくなり、顔アイデンティティ最適化の正確性を高めるために、より多くのリソースを使用して複雑な最適化アルゴリズムを実現することができる。
【0149】
最適化スレッドから送信された第2のキーフレーム集合をクリアする命令を受信した場合、第2のキーフレームデータセットを第1のキーフレームデータセットに更新し、第2のキーフレームデータセットにおける第2のキーフレーム集合をクリアすることにより、最適化スレッドが反復中に新たに検出されたキーフレームを使用して顔アイデンティティベクトルを最適化することができ、最適化スレッドによる最適化が終了した後に最適化スレッドを再び呼び出してから新たに検出されたキーフレームを使用して顔アイデンティティベクトルを最適化する必要はなく、最適化スレッドの呼び出し回数を低減することができる。
【0150】
新しいキーフレームが1つ検出されるたびに、予め設定されたステップ幅で閾値を更新し、キーフレームの追加につれて閾値が増加し、動画フレームがキーフレームとして検出されにくくなり、第1のキーフレームデータセットにおける第1のキーフレーム集合の更新頻度が小さくなり、最適化スレッドが呼び出される回数が減少する。
【0151】
実施例3
図3は、本出願の実施例3による顔追跡方法のステップのフローチャートであり、本出願の実施例は、最適化スレッドが顔アイデンティティベクトルを最適化する場合に適用することができ、当該方法は、本出願の実施例の顔追跡装置によって実行されることができ、当該顔追跡装置は、ソフトウェアおよび/またはハードウェアによって実現されることができ、本出願の実施例による電子デバイスに統合され、
図3に示されたように、本出願の実施例の顔追跡方法は、以下のステップを含み得る。
【0152】
S301では、前記最適化スレッドが呼び出された後、追跡スレッドに使用された現在の顔アイデンティティベクトルを初期顔アイデンティティベクトルとする。
【0153】
最適化スレッドが呼び出された後、追跡スレッドに使用された現在の顔アイデンティティベクトルを取得することができ、当該現在の顔アイデンティティベクトルを最適化の初期顔アイデンティティベクトルとし、一例では、最適化スレッドは、追跡スレッドに最近出力された顔アイデンティティベクトルを、初期顔アイデンティティベクトルとすることができる。
【0154】
S302、第1のキーフレームデータセットを取得し、前記第1のキーフレームデータセットは、前記追跡スレッドによる顔追跡後に更新されたデータセットであり、前記第1のキーフレームデータセットは、顔追跡データを含む。
【0155】
追跡スレッドは、第1のキーフレームデータセットをメンテナンスし、当該第1のキーフレームデータセットは、最適化スレッドが呼び出された前に検出された全てのキーフレームの顔追跡データを含み、当該顔追跡データは、顔キーポイント、姿勢データ及び表情データを含む。
【0156】
S303では、前記初期顔アイデンティティベクトルに基づいて前記第1のキーフレームデータセットにおける顔追跡データを最適化することにより、最適化された顔追跡データを得る。
【0157】
本出願の選択可能な実施例では、初期顔アイデンティティベクトルと表情データとに基づいて3次元顔モデルを確立し、3次元顔モデルの顔キーポイントを取得し、3次元顔モデルの顔キーポイントと顔追跡データにおける顔キーポイントとに基づいて最適な姿勢データと表情データを求めることにより、最適化された顔追跡データとして最適化された姿勢データと表情データを得る。
【0158】
S304では、前記最適化された顔追跡データに基づいて前記初期顔アイデンティティベクトルに対して反復最適化を行うことにより、最適化された顔アイデンティティベクトルを得る。
【0159】
一例では、まず顔キーポイントに基づいて追跡された顔の顔サイズを計算し、各キーフレームの表情データに基づいて各キーフレームの表情重みを計算し、顔追跡データ、顔サイズ、表情重み、現在の顔アイデンティティベクトル及び初期顔アイデンティティベクトルに基づいて最適化方程式を確立し、最適化方程式を反復をして解くことにより、最適化された顔アイデンティティベクトルを得る。
【0160】
S305、毎回の反復の後、前記最適化された顔アイデンティティベクトルと前記初期顔アイデンティティベクトルに基づいて反復停止条件を満たすかどうかを判断する。
【0161】
最適化された顔アイデンティティベクトルと初期顔アイデンティティベクトルを用いて顔変化率を計算することができ、顔変化率が予め設定された閾値未満である場合、反復を停止し、当該最適化された顔アイデンティティベクトルを、今回呼び出されることにより最適化した結果とし、反復停止条件に達した場合、S306を実行し、反復停止条件に達しなかった場合、S307を実行する。
【0162】
S306、前記最適化された顔アイデンティティベクトルを前記追跡スレッドに送信し、前記追跡スレッドは、前記最適化された顔アイデンティティベクトルを受信した場合、受信した顔アイデンティティベクトルを現在の顔アイデンティティベクトルとして確定する。
【0163】
最適化スレッドが1回の呼び出しで反復最適化を停止した後に最適化された顔アイデンティティベクトルを得る場合、当該顔アイデンティティベクトルを追跡スレッドに送信することができ、追跡スレッドが当該顔アイデンティティベクトルを受信した後に現在の顔アイデンティティベクトルとする。
【0164】
S307では、前記追跡スレッドに第2のキーフレームデータセットにおける動画フレームをクリアするクリア命令を送信することにより、前記追跡スレッドが、前記クリア命令を受信した後、前記第2のキーフレームデータセットの第2のキーフレーム集合が非空集合である場合、前記第2のキーフレームデータセットを前記第1のキーフレームデータセットに更新する。
【0165】
反復停止条件に達しておらず、追跡スレッドによって新しいキーフレームが検出され第2のキーフレームデータセットの第2のキーフレーム集合に追加された場合、毎回の反復の終了後に第2のキーフレーム集合をクリアする命令を追跡スレッドに送信することにより、追跡スレッドが第2のキーフレーム集合のうちのキーフレームを第1のキーフレーム集合に追加し、第2のキーフレーム集合をクリアし、この結果、追跡スレッドが次の最適化の際に新たに検出されたキーフレームを使用して顔アイデンティティベクトルを最適化できるようにする。
【0166】
S308では、前記最適化された顔アイデンティティベクトルを初期顔アイデンティティベクトルとする。
【0167】
最適化スレッドは、毎回の反復最適化の終了後、反復停止条件に達しなかった場合、今回の反復最適化によって得られた最適化された顔アイデンティティベクトルを次の反復の初期顔アイデンティティベクトルとし、S302に戻って顔アイデンティティベクトルに対する反復最適化を継続する。
【0168】
本出願の実施例の顔追跡方法では、最適化スレッドが呼び出された後、追跡スレッドに使用された現在の顔アイデンティティベクトルを初期顔アイデンティティベクトルとし、第1のキーフレームデータセットを取得し且つ初期顔アイデンティティベクトルに基づいて第1のキーフレームデータセットにおける顔追跡データを最適化することにより、最適化された顔追跡データを得て、最適化された顔追跡データに基づいて初期顔アイデンティティベクトルに対して反復最適化を行うことにより、最適化された顔アイデンティティベクトルを得て、毎回の反復の後、最適化された顔アイデンティティベクトルと初期顔アイデンティティベクトルに基づいて、反復停止条件を満たすかどうかを判断し、反復停止条件を満たす場合、最適化された顔アイデンティティベクトルを追跡スレッドに送信し、追跡スレッドは、最適化された顔アイデンティティベクトルを受信した場合、受信した顔アイデンティティベクトルを現在の顔アイデンティティベクトルとして確定し、反復停止条件を満たさない場合、追跡スレッドに第2のキーフレームデータセットにおける動画フレームをクリアするクリア命令を送信し、追跡スレッドは、前記クリア命令を受信した後、第2のキーフレームデータセットの第2のキーフレーム集合が非空集合である場合、第2のキーフレーム集合を第1のキーフレーム集合に更新し、最適化された顔アイデンティティベクトルを初期顔アイデンティティベクトルとし、顔アイデンティティベクトルを最適化し続ける。これにより、最適化スレッドが反復最適化の過程で新たに第2のキーフレーム集合に追加されたキーフレームを用いて顔アイデンティティベクトルを最適化することが実現され、最適化スレッドに対する呼び出しが終わった後に新たにキーフレームを追加して顔アイデンティティベクトルを最適化するのを待つ必要がなく、大量のキーフレームを迅速に抽出して顔アイデンティティベクトルを最適化することができ、顔アイデンティティベクトルの収束速度を向上させる一方、1つのキーフレームが検出された度に最適化スレッドを1回に呼び出す必要がなく、最適化スレッドの呼び出し回数を減少させ、最終的にはリアルタイムな顔アイデンティティベクトルの最適化のリアルタイム性が高くなり、消費されたリソースが少なくなり、顔アイデンティティ最適化の正確性を高めるために、より多くのリソースを使用して複雑な最適化アルゴリズムを実現することができる。
【0169】
実施例4
図4は、本出願の実施例4による顔追跡方法のステップのフローチャートであり、上記実施例3を踏まえて本出願の実施例を説明し、
図4に示されたように、本出願の実施例の顔追跡方法は、以下のステップを含み得る。
【0170】
S401、前記最適化スレッドが呼び出された後、追跡スレッドに使用された現在の顔アイデンティティベクトルを初期顔アイデンティティベクトルとする。
【0171】
例示的に、現在の顔アイデンティティベクトルはαpreであり、最適化スレッドに対する1回の呼び出が終了する前に、追跡スレッドは、αpreである現在の顔アイデンティティベクトルを使用して受信した動画フレームに対して顔追跡を行う。
【0172】
S402では、第1のキーフレームデータセットを取得し、前記第1のキーフレームデータセットは、前記追跡スレッドによる顔追跡後に更新されたデータセットであり、前記第1のキーフレームデータセットは、顔追跡データを含む。
【0173】
S403では、前記初期顔アイデンティティベクトルに基づいて前記第1のキーフレームデータセットにおける顔追跡データを最適化することにより、最適化された顔追跡データを得る。
【0174】
選択肢の一つとして、初期顔アイデンティティベクトルと表情データとに基づいて3次元顔モデルを確立し、3次元顔モデルの顔キーポイントを取得し、3次元顔モデルの顔キーポイントと顔追跡データにおける顔キーポイントとに基づいて最適な姿勢データと表情データを求めることにより、最適化された顔追跡データとして最適化された姿勢データと表情データを得る。
【0175】
顔アイデンティティベクトルαが与えられた場合、i番目の動画フレームの3次元顔モデルFiは、以下のように表すことができ、即ち、
【0176】
【0177】
ここで、
【0178】
【0179】
はユーザーの表情なしの中性顔であり、Cexpは当該ユーザーに対する表情形状融合変形器であり、δは顔表情データである。
【0180】
PCA3次元顔モデル
【0181】
【0182】
に対して、
【0183】
【0184】
とすることができる。
【0185】
ここで、Bは平均顔であり、BIDはユーザーのアイデンティティ形状融合変形器であり、Bexpは平均顔Bに基づいて設計られた表情形状融合変形器であり、ここで、B、BID、Bexpを予め設定することができる。
【0186】
双線形3次元顔モデル
【0187】
【0188】
に対して、
Cはユーザーの表情なしの中性顔であり、
【0189】
【0190】
はモード積である。
【0191】
入力された顔キーポイントQiに基づいて最適化方程式(4)を解くことにより、最適なPi,
【0192】
【0193】
が得られ、即ち、
【0194】
【0195】
ここで、kは第k回の反復であり、
【0196】
【0197】
は第k回の反復に使用された中性顔であり、
【0198】
【0199】
は第k回の反復に使用された表情形状融合変形器であり、
【0200】
【0201】
は3次元顔
【0202】
【0203】
を投影してj個のキーポイントを得ることを指し、Qiは追跡スレッドでは顔キーポイントの抽出アルゴリズムによって直接に抽出した顔キーポイントであり、γはパラメータであり、上記方程式(4)に対して最小値を求めることにより最適Pi,
【0204】
【0205】
が得られ、即ち、追跡スレッドは、第i番目の動画フレームに対して顔追跡を行った後、次のような顔追跡データを取得し、即ち、
【0206】
【0207】
である。
【0208】
Qiは顔キーポイントであり、Piは姿勢データであり、
【0209】
【0210】
は表情データである。
【0211】
S404、顔キーポイントに基づいて追跡された顔の顔サイズを計算する。
【0212】
顔キーポイントに基づいて顔の最小外接矩形枠を確定し、最小外接矩形枠における顔キーポイントに基づいて顔の顔サイズfiを計算することができる。
【0213】
S405では、各キーフレームの表情データに基づいて各キーフレームの表情重みを計算する。
【0214】
選択肢の一つとして、第1のキーフレーム集合は、複数のキーフレームを含み、複数のキーフレームに対して顔追跡を行った後に各キーフレームの表情データを取得し、全てのキーフレームにおける表情データから最小表情データを確定し、この後、予め設定された定数項、最小表情データ及びキーフレームの表情データを用いて、キーフレームの表情重みを計算することができ、ここで、キーフレームの表情重みとキーフレームの表情データとは、負の相関であり、以下の式で示す。
【0215】
各キーフレームの表情重みを以下の式で計算する。
【0216】
【0217】
ここで、
【0218】
【0219】
は第k回の反復におけるキーフレームiの表情重みであり、rは定数であり、
【0220】
【0221】
は第k回の反復におけるキーフレームiの表情データであり、
【0222】
【0223】
は第1のキーフレーム集合であり、
【0224】
【0225】
は全てのキーフレームにおける最小表情データである。
【0226】
上記の式(5)から分かるように、キーフレームにおいて顔表情が大きいほど、
【0227】
【0228】
が小さくなり、逆に顔表情が小さいほど、
【0229】
【0230】
が大きくなり、これにより、表情が大きな顔が顔アイデンティティベクトルに与える影響を低減することができる。
【0231】
S406では、前記顔追跡データ、前記顔サイズ、前記表情重み、前記現在の顔アイデンティティベクトル及び前記初期顔アイデンティティベクトルに基づいて反復をして解くことにより、前記キーフレームにおいて顔モデルの最適化された顔アイデンティティベクトルを得る。
【0232】
本出願の選択可能な実施例では、最適化方程式は以下のように確立される。
【0233】
【0234】
式では、
【0235】
【0236】
は第1のキーフレーム集合であり、β1、β2とγはパラメータであり、予め設定されることができ、αpreは追跡スレッドに使用された現在の顔アイデンティティベクトルである。
【0237】
本出願の一選択可能な実施例では、双線形3次元顔モデル
【0238】
【0239】
について、顔アイデンティティベクトルαkに対して反復最適化を行う式は以下のようになり、即ち、
【0240】
【0241】
別の選択可能な実施例では、PCA3次元顔モデル
【0242】
【0243】
について、最適化顔アイデンティティベクトルαkに対して反復最適化を行う式は以下のようになり、即ち、
【0244】
【0245】
式では、
【0246】
【0247】
は第1のキーフレーム集合であり、β1、β2とβ3はパラメータであり、予め設定されることができ、αpreは追跡スレッドに使用された現在の顔アイデンティティベクトルである。
【0248】
上記の式(7)と式(8)では、
【0249】
正則化項
【0250】
【0251】
に顔サイズfiを導入することにより、パラメータβ1が異なる顔サイズに適応できるようにする。顔アイデンティティベクトルの平滑化項
【0252】
【0253】
を導入することにより、顔アイデンティティベクトルの全体の収束速度を低下させるが、変顔などの特殊な応用シーンでは、追跡スレッドにおいて顔アイデンティティベクトルが更新された後に顔の突然のぶれが現れることを防止することができる。最適化中に
【0254】
【0255】
を導入することにより、
【0256】
【0257】
を使用して
【0258】
【0259】
を近似することができ、最適化方程式(6)がPCA3次元顔モデルと双線形3次元顔モデルに適用できるようにする。最適化中に働的に各キーフレームの重みwiを計算して、表情が大きな顔の重みを下げ、大きな表情が顔アイデンティティベクトルに与える影響を下げることができる。
【0260】
S407では、毎回の反復の後、現在の反復によって得られた顔アイデンティティベクトルと前回の反復によって得られた顔アイデンティティベクトルを用いて顔変化率を計算する。
【0261】
毎回の反復の終了後に1つの最適化された顔アイデンティティベクトルαkと前回の反復によって得られた顔アイデンティティベクトルαk-1が得られ、以下の式で顔変化率を計算することができ、即ち、
【0262】
【0263】
ここで、F(α)は顔アイデンティティベクトルαに対応する顔グリッドであり、sは3次元平均顔の最小外接矩形の対角線の長さであり、即ち顔グリッドのj個の頂点における最大移動量を3次元平均顔の最小外接矩形の対角線の長さで割ると顔変化率となる。
【0264】
S408では、前記顔変化率が予め設定された変化率閾値未満であるかどうかを判断する。
【0265】
即ち、
【0266】
【0267】
が成立するかどうかを判断する。
【0268】
上記の式が成立した場合、即ち反復停止ソルバー条件を満たすと確定した場合、S409を実行し、反復停止ソルバー条件を満たさないと確定した場合、S410を実行する。
【0269】
S409では、前記最適化された顔アイデンティティベクトルを前記追跡スレッドに送信することにより、前記追跡スレッドが、前記最適化された顔アイデンティティベクトルを受信した場合、受信した顔アイデンティティベクトルを現在の顔アイデンティティベクトルとして確定する。
【0270】
最適化された顔アイデンティティベクトルαkを追跡スレッドに送信し、追跡スレッドは、最適化された顔アイデンティティベクトルαkを受信した場合、受信した顔アイデンティティベクトルα
k
を現在の顔アイデンティティベクトルとして確定し、動画フレームを追跡する。
【0271】
選択肢の一つとして、最適化スレッドは、また最適化された顔アイデンティティベクトルαkに基づいて新しいユーザー顔
【0272】
【0273】
とユーザー顔表情形状ミキサ
【0274】
【0275】
を計算し、最適化された顔アイデンティティベクトルαk、ユーザー顔
【0276】
【0277】
とユーザー顔表情形状ミキサ
【0278】
【0279】
に基づいて動画フレームを追跡する。
【0280】
また、第1のキーフレームデータセットにおいて最適化された後のキーフレームの表情データおよび姿勢データに基づいて各キーフレームのフレームベクトルを更新し、各キーフレームのフレームベクトルに基づいて第1のPCAサブ空間を更新することにより、第1のPCAサブ空間がより正確になり、第1のPCAサブ空間に基づいてキーフレームをより正確に検出することができる。
【0281】
S410では、前記追跡スレッドに第2のキーフレームデータセットにおける動画フレームをクリアするクリア命令を送信することにより、前記追跡スレッドが、前記クリア命令を受信した後、前記第2のキーフレームデータセットの第2のキーフレーム集合が非空集合である場合、前記第2のキーフレームデータセットを前記第1のキーフレームデータセットに更新する。
【0282】
S411、前記最適化された顔アイデンティティベクトルを初期顔アイデンティティベクトルとし、S402に戻る。
【0283】
本出願の実施例の顔追跡方法では、毎回の反復の後、最適化された顔アイデンティティベクトルと初期顔アイデンティティベクトルに基づいて、反復停止条件を満たすかどうかを判断し、反復停止条件を満たす場合、最適化された顔アイデンティティベクトルを追跡スレッドに送信し、追跡スレッドは、受信した顔アイデンティティベクトルを現在の顔アイデンティティベクトルとして確定し、反復停止条件を満たさない場合、追跡スレッドに第2のキーフレームデータセットの動画フレームをクリアするクリア命令を送信し、追跡スレッドは、クリア命令を受信した後、第2のキーフレーム集合が非空集合である場合、第2のキーフレーム集合を第1のキーフレーム集合に更新し、第2のキーフレーム集合をクリアし、最適化された顔アイデンティティベクトルを初期顔アイデンティティベクトルとし、最適化された顔アイデンティティベクトルを反復をして求め続けることにより、最適化スレッドが反復最適化の過程で新たに第2のキーフレーム集合に追加されたキーフレームを用いて顔アイデンティティベクトルを最適化することが実現され、最適化スレッドに対する呼び出しが終わった後に新たにキーフレームを追加して顔アイデンティティベクトルを最適化するのを待つ必要がなく、大量のキーフレームを迅速に抽出して顔アイデンティティベクトルを最適化することができ、顔アイデンティティベクトルの収束速度を向上させる一方、1つのキーフレームが検出された度に最適化スレッドを1回に呼び出す必要がなく、最適化スレッドの呼び出し回数を減少させ、最終的にはリアルタイムな顔アイデンティティベクトルの最適化のリアルタイム性が高くなり、消費されたリソースが少なくなり、顔アイデンティティ最適化の正確性を高めるために、より多くのリソースを使用して複雑な最適化アルゴリズムを実現することができる。
【0284】
最適化方程式に顔サイズfiを導入することにより、異なる顔サイズに適応できる。顔アイデンティティベクトルの平滑化項
【0285】
【0286】
を導入することにより、顔アイデンティティベクトルの全体の収束速度を低下させるが、変顔などの特殊な応用シーンでは、追跡スレッドにおいて顔アイデンティティベクトルが更新された後に顔の突然のぶれが現れることを防止することができる。最適化中に
【0287】
【0288】
を導入することにより、
【0289】
【0290】
を使用して
【0291】
【0292】
を近似することができ、最適化方程式がPCA3次元顔モデルと双線形3次元顔モデルに適用できるようにする。最適化中に働的に各キーフレームの表情重みを計算して、表情が大きな顔の重みを下げ、大きな表情が顔アイデンティティベクトルに与える影響を下げることができる。
【0293】
実施例5
図5は、本出願の実施例5による顔追跡装置の構造ブロック図であり、
図5に示されたように、本出願の実施例の顔追跡装置は、追跡スレッドに適用され、前記追跡スレッドは、第1のキーフレームデータセットと第2のキーフレームデータセットをメンテナンスし、前記顔追跡装置は、
動画フレームに対して顔追跡を行う過程では、最適化スレッドが動作しているかどうかを判断するように構成される最適化スレッド動作判断モジュール501と、前記最適化スレッドが動作していることに対応して、前記動画フレームがキーフレームである場合、前記動画フレームに基づいて第2のキーフレームデータセットを更新するように構成される第2のキーフレームデータセット更新モジュール502と、最適化スレッドから送信された前記第2のキーフレームデータセットにおける動画フレームをクリアするクリア命令を受信した場合、前記第2のキーフレームデータセットにおける動画フレームをクリアし、前記第2のキーフレームデータセットを第1のキーフレームデータセットに更新するように構成されるクリアモジュール503と、前記最適化スレッドが動作していないことに対応して、前記動画フレームがキーフレームである場合、前記動画フレーム及び前記第2のキーフレームデータセットに基づいて前記第1のキーフレームデータセットを更新するように構成される第1のキーフレームデータセット更新モジュール504と、前記第1のキーフレームデータセットが更新された後、前記最適化スレッドを呼び出すことにより、前記最適化スレッドが前記第1のキーフレームデータセットに基づいて顔アイデンティティを最適化するように構成される最適化スレッド呼び出しモジュール505と、を含む。
【0294】
本出願の実施例による顔追跡装置は、本出願の実施例1、実施例2による顔追跡方法を実行することができ、方法の実行に対応する機能モジュール及び効果を有する。
【0295】
実施例6
図6は、本出願の実施例6による顔追跡装置の構造ブロック図であり、
図6に示されたように、本出願の実施例の顔追跡装置は、最適化スレッドに適用され、以下のモジュールを含み得る。
【0296】
顔アイデンティティベクトル初期化モジュール601は、前記最適化スレッドが呼び出された後、追跡スレッドに使用された現在の顔アイデンティティベクトルを初期顔アイデンティティベクトルとするように構成され、第1のキーフレームデータセット取得モジュール602は、第1のキーフレームデータセットを取得するように構成され、ここで、前記第1のキーフレームデータセットは、前記追跡スレッドによる顔追跡後に更新されたデータセットであり、前記第1のキーフレームデータセットは、顔追跡データを含み、顔追跡データ最適化モジュール603は、前記初期顔アイデンティティベクトルに基づいて前記第1のキーフレームデータセットにおける顔追跡データを最適化することにより、最適化された顔追跡データを得るように構成され、顔アイデンティティベクトル最適化モジュール604は、前記最適化された顔追跡データに基づいて前記初期顔アイデンティティベクトルに対して反復最適化を行うことにより、最適化された顔アイデンティティベクトルを得るように構成され、反復停止判断モジュール605は、毎回の反復の後、前記最適化された顔アイデンティティベクトルと前記初期顔アイデンティティベクトルに基づいて反復停止条件を満たすかどうかを判断するように構成され、反復停止モジュール606は、前記反復停止条件を満たすことに対応して、前記最適化された顔アイデンティティベクトルを前記追跡スレッドに送信することにより、前記追跡スレッドが、前記最適化された顔アイデンティティベクトルを受信した場合、受信した顔アイデンティティベクトルを現在の顔アイデンティティベクトルとして確定するように構成され、クリア命令送信モジュール607は、前記反復停止条件を満たさないことに対応して、前記追跡スレッドに第2のキーフレームデータセットにおける動画フレームをクリアするクリア命令を送信することにより、前記追跡スレッドが、前記クリア命令を受信した後、前記第2のキーフレーム集合が非空集合である場合、前記第2のキーフレームデータセットを前記第1のキーフレームデータセットに更新するように構成され、初期顔アイデンティティベクトル更新モジュール608は、前記最適化された顔アイデンティティベクトルを初期顔アイデンティティベクトルとし、顔追跡データ最適化モジュールに戻るように構成される。
【0297】
本出願の実施例による顔追跡装置は、本出願の実施例3、実施例4による顔追跡方法を実行することができ、方法の実行に対応する機能モジュール及び効果を有する。
【0298】
実施例7
図7を参照して、本出願の一例の電子デバイスの構造概略図が示される。
図6に示されたように、当該電子デバイスは、処理装置701、記憶装置702、タッチ機能付きディスプレイ703、入力装置704、出力装置705及び通信装置706を含み得る。当該電子デバイスにおける処理装置701の数は1つ以上であってもよく、
図7では1つの処理装置701を例にする。当該電子デバイスの処理装置701、記憶装置702、ディスプレイ703、入力装置704、出力装置705及び通信装置706は、バス又は他の方法で接続されることができ、
図7ではバスによる接続を例にする。前記電子デバイスは、本出願のいずれかの実施例による顔追跡方法を実行するように設定されている。
【0299】
本出願の実施例では、コンピュータ可読記憶媒体をさらに提供し、前記記憶媒体における命令がデバイスの処理装置によって実行される際に、デバイスに上記の方法実施例に記載された顔追跡方法を実行させることができる。当該コンピュータ可読記憶媒体は、非一時的な記憶媒体である。
【0300】
装置、電子デバイス、記憶媒体の実施例については、方法実施例と基本的に類似しているため、説明が比較的簡単であり、関連する点については、方法実施例の説明の一部を参照すればよい。
【0301】
本明細書の説明において、参照用語「一実施例」、「いくつかの実施例」、「例」、「具体的な例」、または「いくつかの例」等の説明は、当該実施例または例に関連して説明された具体的な特徴を指し、構造、材料、または特点は、本出願の少なくとも1つの実施例または例に含まれる。本明細書において、上記用語の概略的な表現は、必ずしも同一実施例または例を意味するものではない。そして、説明された具体的な特徴、構造、材料、または特点を、任意の1つまたは複数の実施例または例において適切な方法で組み合わせることができる。
【符号の説明】
【0302】
501 最適化スレッド動作判断モジュール
502 第2のキーフレームデータセット更新モジュール
503 クリアモジュール
504 第1のキーフレームデータセット更新モジュール
505 最適化スレッド呼び出しモジュール
601 顔アイデンティティベクトル初期化モジュール
602 第1のキーフレームデータセット取得モジュール
603 顔追跡データ最適化モジュール
604 顔アイデンティティベクトル最適化モジュール
605 反復停止判断モジュール
606 反復停止モジュール
607 クリア命令送信モジュール
608 初期顔アイデンティティベクトル更新モジュール
701 処理装置
702 記憶装置
703 ディスプレイ
704 入力装置
705 出力装置
706 及び通信装置