MediaPipe フェイス ランドマーカー タスクを使用すると、顔のランドマークと顔の表情を検出できます。 使用できます。このタスクを使用して、人間の顔の表情を識別し、 顔のフィルタやエフェクトを適用したり、仮想アバターを作成したりできます。このタスクで使用するもの 単一の画像または連続的な画像でも処理できる 必要があります。このタスクでは、顔の 3 次元のランドマーク、ブレンドシェイプが出力されます。 スコア(顔の表情を表す係数)を使って、顔の微妙な リアルタイムでの表面処理、変換行列を使用して、 エフェクトのレンダリングに必要な変換の数を表します。
この手順で説明するコードサンプルは、 GitHub。 機能、モデル、構成オプションの詳細については、 概要をご覧ください。
サンプルコード
MediaPipe Tasks のサンプルコードは、顔のランドマークの単純な実装です。 アプリこの例では、物理的な Android デバイスのカメラを使用して、 連続する動画ストリームで顔を検出できます。また、顔を検出することもできます。 デバイスのギャラリーから画像と動画を抽出できます。
独自の Android アプリの出発点としてアプリを使用することも、アプリ自体に言及することもできます。 変更する際の注意点があります。顔認識マーカーのサンプルコードは GitHub。
コードをダウンロードする
次の手順では、サンプルのローカルコピーを作成する方法を示します。 git コマンドライン ツールを使用してコードを実行します。
<ph type="x-smartling-placeholder">サンプルコードをダウンロードするには:
- 次のコマンドを使用して Git リポジトリのクローンを作成します。
git clone https://github.com/google-ai-edge/mediapipe-samples
- 必要に応じて、スパース チェックアウトを使用するように Git インスタンスを構成し、
顔認識マーカー サンプルアプリのファイルのみ:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/face_landmarker/android
サンプルコードのローカル バージョンを作成したら、プロジェクトをインポートできます。 アプリを実行します。手順については、セットアップ ガイド: Android。
主要コンポーネント
次のファイルには、この顔のランドマークのサンプルに不可欠なコードが含まれています。 アプリケーション:
- FaceLandmarkerHelper.kt - 顔ランドマークを初期化し、モデルとデリゲートを処理します 選択します。
- CameraFragment.kt - デバイスのカメラを処理し、画像と動画の入力データを処理します。
- GalleryFragment.kt -
OverlayView
を操作して、出力画像または動画を表示します。 - OverlayView.kt - 検出された顔の顔メッシュを使用したディスプレイを実装します。
セットアップ
このセクションでは、開発環境をセットアップする主な手順と 顔認識地マーカーを使用するコード プロジェクトです。一般的な情報については、 MediaPipe タスクを使用するための開発環境の設定 プラットフォーム バージョンの要件については、 Android。
<ph type="x-smartling-placeholder">依存関係
顔のランドマーク タスクでは、com.google.mediapipe:tasks-vision
ライブラリを使用します。追加
これを Android アプリの build.gradle
ファイルに追加します。
dependencies {
implementation 'com.google.mediapipe:tasks-vision:latest.release'
}
モデル
MediaPipe フェイス ランドマーカー タスクには、以下と互換性のあるトレーニング済みモデルバンドルが必要です できます。顔認識マーカーに使用できるトレーニング済みモデルについて詳しくは、 タスクの概要のモデル セクションをご覧ください。
モデルを選択してダウンロードし、プロジェクト ディレクトリに保存します。
<dev-project-root>/src/main/assets
ModelAssetPath
パラメータ内でモデルのパスを指定します。
サンプルコードの場合、モデルは
FaceLandmarkerHelper.kt
ファイル:
baseOptionsBuilder.setModelAssetPath(MP_FACE_LANDMARKER_TASK)
タスクを作成する
MediaPipe フェイス ランドマーカー タスクでは、createFromOptions()
関数を使用して
タスクを実行します。createFromOptions()
関数は構成の値を受け入れます。
。構成オプションの詳細については、構成
オプションをご覧ください。
顔認識地マーカーは、静止画像、動画といった入力データタイプをサポートしています。 ファイル、ライブ動画ストリームなどです。実行モードを指定する必要があります タスクの作成時に、入力データ型に対応する値を宣言します。タブを選択 タスクの作成方法とコード実行方法を 説明します。
画像
val baseOptionsBuilder = BaseOptions.builder().setModelAssetPath(MP_FACE_LANDMARKER_TASK) val baseOptions = baseOptionBuilder.build() val optionsBuilder = FaceLandmarker.FaceLandmarkerOptions.builder() .setBaseOptions(baseOptionsBuilder.build()) .setMinFaceDetectionConfidence(minFaceDetectionConfidence) .setMinTrackingConfidence(minFaceTrackingConfidence) .setMinFacePresenceConfidence(minFacePresenceConfidence) .setNumFaces(maxNumFaces) .setRunningMode(RunningMode.IMAGE) val options = optionsBuilder.build() FaceLandmarker = FaceLandmarker.createFromOptions(context, options)
動画
val baseOptionsBuilder = BaseOptions.builder().setModelAssetPath(MP_FACE_LANDMARKER_TASK) val baseOptions = baseOptionBuilder.build() val optionsBuilder = FaceLandmarker.FaceLandmarkerOptions.builder() .setBaseOptions(baseOptionsBuilder.build()) .setMinFaceDetectionConfidence(minFaceDetectionConfidence) .setMinTrackingConfidence(minFaceTrackingConfidence) .setMinFacePresenceConfidence(minFacePresenceConfidence) .setNumFaces(maxNumFaces) .setRunningMode(RunningMode.VIDEO) val options = optionsBuilder.build() FaceLandmarker = FaceLandmarker.createFromOptions(context, options)
ライブ配信
val baseOptionsBuilder = BaseOptions.builder().setModelAssetPath(MP_FACE_LANDMARKER_TASK) val baseOptions = baseOptionBuilder.build() val optionsBuilder = FaceLandmarker.FaceLandmarkerOptions.builder() .setBaseOptions(baseOptionsBuilder.build()) .setMinFaceDetectionConfidence(minFaceDetectionConfidence) .setMinTrackingConfidence(minFaceTrackingConfidence) .setMinFacePresenceConfidence(minFacePresenceConfidence) .setNumFaces(maxNumFaces) .setResultListener(this::returnLivestreamResult) .setErrorListener(this::returnLivestreamError) .setRunningMode(RunningMode.LIVE_STREAM) val options = optionsBuilder.build() FaceLandmarker = FaceLandmarker.createFromOptions(context, options)
顔認識用マーカーのサンプル コードを実装すると、
処理モードを選択できますこのアプローチでは、タスク作成コードが複雑になり、
ユースケースに適さない場合がありますこのコードは
setupFaceLandmarker()
関数を次の
FaceLandmarkerHelper.kt
表示されます。
構成オプション
このタスクには、Android アプリ用に次の構成オプションがあります。
オプション名 | 説明 | 値の範囲 | デフォルト値 |
---|---|---|---|
runningMode |
タスクの実行モードを設定します。3 つの
モード: IMAGE: 単一画像入力のモード。 VIDEO: 動画のデコードされたフレームのモード。 LIVE_STREAM: 入力のライブ配信のモード カメラからのデータなどです。このモードでは、resultListener は 結果を受け取るリスナーを設定するために呼び出されます。 使用できます。 |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
numFaces |
FaceLandmarker 。平滑化は次の場合にのみ適用されます。
num_faces は 1 に設定されています。
|
Integer > 0 |
1 |
minFaceDetectionConfidence |
顔検出に必要な最小信頼スコア 成功したとみなされます。 | Float [0.0,1.0] |
0.5 |
minFacePresenceConfidence |
顔存在の最小信頼スコア 顔のランドマーク検出のスコアが出力されます。 | Float [0.0,1.0] |
0.5 |
minTrackingConfidence |
顔トラッキングの最小信頼スコア 成功とみなされます。 | Float [0.0,1.0] |
0.5 |
outputFaceBlendshapes |
顔認識地マーカーが顔ブレンドシェイプを出力するかどうか。 顔ブレンドシェイプは、3D 顔モデルのレンダリングに使用されます。 | Boolean |
False |
outputFacialTransformationMatrixes |
FaceLandmarker が顔を出力するかどうか 変換行列が作成されますFaceLandMarker で 行列を使用して、顔のランドマークを正規の顔モデルから 検出されたランドマークに効果を適用できます。 | Boolean |
False |
resultListener |
ランドマークの結果を受け取るように結果リスナーを設定します。
自動的に同期されます。
実行モードが LIVE_STREAM に設定されている場合にのみ使用できます |
ResultListener |
N/A |
errorListener |
オプションのエラーリスナーを設定します。 | ErrorListener |
N/A |
データの準備
Face Landmarker は、画像、動画ファイル、ライブ動画ストリームで動作します。タスク サイズ変更、回転、値を含むデータ入力の前処理を処理 説明します。
次のコードは、処理のためにデータを引き渡す方法を示しています。これらの サンプルには、画像、動画ファイル、ライブ ストリーミング データ、 動画ストリーム。
画像
import com.google.mediapipe.framework.image.BitmapImageBuilder import com.google.mediapipe.framework.image.MPImage // Convert the input Bitmap object to an MPImage object to run inference val mpImage = BitmapImageBuilder(image).build()
動画
import com.google.mediapipe.framework.image.BitmapImageBuilder import com.google.mediapipe.framework.image.MPImage val argb8888Frame = if (frame.config == Bitmap.Config.ARGB_8888) frame else frame.copy(Bitmap.Config.ARGB_8888, false) // Convert the input Bitmap object to an MPImage object to run inference val mpImage = BitmapImageBuilder(argb8888Frame).build()
ライブ配信
import com.google.mediapipe.framework.image.BitmapImageBuilder import com.google.mediapipe.framework.image.MPImage // Convert the input Bitmap object to an MPImage object to run inference val mpImage = BitmapImageBuilder(rotatedBitmap).build()
顔認識マーカーのサンプルコードでは、
FaceLandmarkerHelper.kt
表示されます。
タスクを実行する
扱うデータのタイプに応じて、
そのデータ型に固有の FaceLandmarker.detect...()
メソッドを使用します。使用
個々の画像の場合は detect()
、動画ファイル内のフレームの場合は detectForVideo()
、
動画ストリームの場合は detectAsync()
です。Cloud Storage バケットに
検出を別のスレッドで実行して、この問題を回避してください。
ユーザー インターフェース スレッドをブロックします。
次のコードサンプルは、顔認識機能の実行方法の簡単な例を示しています。 さまざまなデータモードで
画像
val result = FaceLandmarker.detect(mpImage)
動画
val timestampMs = i * inferenceIntervalMs FaceLandmarker.detectForVideo(mpImage, timestampMs) .let { detectionResult -> resultList.add(detectionResult) }
ライブ配信
val mpImage = BitmapImageBuilder(rotatedBitmap).build() val frameTime = SystemClock.uptimeMillis() FaceLandmarker.detectAsync(mpImage, frameTime)
次の点にご留意ください。
- 動画モードまたはライブ配信モードで実行する場合は、 顔認識地マーカー タスクへの入力フレームのタイムスタンプ。
- 画像モードまたは動画モードで実行すると、顔認識地マーカー タスクがブロックされます。 入力画像やフレームの処理が完了するまで、現在のスレッドを待機状態にします。宛先 ユーザー インターフェースをブロックせずに、バックグラウンドで処理を実行 使用します。
- ライブ ストリーム モードで実行している場合、顔認識ツールタスクは 現在のスレッドをブロックしません。このメソッドは、 完了するたびに、その検出結果が 表示されます。
顔認識マーカーのサンプルコードでは、detect
、detectForVideo
、
detectAsync
関数は、
FaceLandmarkerHelper.kt
表示されます。
結果の処理と表示
顔認識地マーカーは、検出のたびに FaceLandmarkerResult
オブジェクトを返します。
あります。結果のオブジェクトには、検出された顔ごとに顔メッシュが含まれ、
各顔ランドマークの座標です。必要に応じて、結果オブジェクトには
顔の表情を表すブレンドシェイプと、
変換行列を使用して、検出されたランドマークに顔効果を適用します。
このタスクからの出力データの例を次に示します。
FaceLandmarkerResult:
face_landmarks:
NormalizedLandmark #0:
x: 0.5971359014511108
y: 0.485361784696579
z: -0.038440968841314316
NormalizedLandmark #1:
x: 0.3302789330482483
y: 0.29289937019348145
z: -0.09489090740680695
... (478 landmarks for each face)
face_blendshapes:
browDownLeft: 0.8296722769737244
browDownRight: 0.8096957206726074
browInnerUp: 0.00035583582939580083
browOuterUpLeft: 0.00035752105759456754
... (52 blendshapes for each face)
facial_transformation_matrixes:
[9.99158978e-01, -1.23036895e-02, 3.91213447e-02, -3.70770246e-01]
[1.66496094e-02, 9.93480563e-01, -1.12779640e-01, 2.27719707e+01]
...
次の図は、タスク出力を可視化したものです。
顔認識マーカーのサンプルコードは、返された結果を表示する方法を示しています。
タスクの詳細については、
OverlayView
クラスをご覧ください。