MediaPipe 顔検出タスクを使用すると、画像や動画内の顔を検出できます。次を使用: このタスクでは、フレーム内の顔と顔の特徴を検出します。このタスクでは、 単一の画像または連続的な画像で機能する 必要があります。このタスクでは、顔の位置と、以下が出力されます。 顔の要点: 左目、右目、鼻先、口、左目のトラジション、 あります
この手順で説明するコードサンプルは、 GitHub。 機能、モデル、構成オプションの詳細については、 概要をご覧ください。
サンプルコード
顔検出器のサンプルコードは、顔検出機能の完全な実装を示しています。 タスクを示しています。このコードは、このタスクをテストして、 独自の顔検出器の開発を始めました。特定のリソースを表示、実行、 編集 顔検出機能のサンプルコード できます。
Raspberry Pi 用に顔検出機能を実装する場合は、 Raspberry Pi の例 アプリ。
セットアップ
このセクションでは、開発環境をセットアップする主な手順と Face Detector を使用するコード プロジェクトを作成することにしました。一般的な情報については、 MediaPipe タスクを使用するための開発環境の設定 プラットフォーム バージョンの要件については、 Python のセットアップ ガイド
<ph type="x-smartling-placeholder">パッケージ
MediaPipe Face Detector タスクには、mediapipe PyPI パッケージが必要です。 これらの依存関係は、次のコマンドでインストールしてインポートできます。
$ python -m pip install mediapipe
インポート
Face Detector のタスク関数にアクセスするには、次のクラスをインポートします。
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision
モデル
MediaPipe Face Detector タスクには、これと互換性のあるトレーニング済みモデルが必要です タスクを実行します。顔検出機能で利用可能なトレーニング済みモデルについて詳しくは、以下をご覧ください。 タスクの概要のモデル セクションをご覧ください。
モデルを選択してダウンロードし、ローカル ディレクトリに保存します。
model_path = '/absolute/path/to/face_detector.task'
BaseOptions
オブジェクトの model_asset_path
パラメータを使用してパスを指定する
モデルを定義します。コード例については、次のセクションをご覧ください。
タスクを作成する
MediaPipe Face Detector タスクは、create_from_options
関数を使用して以下を行います。
タスクを設定します。create_from_options
関数は値を受け入れる
処理する構成オプションを確認してくださいリソースの構成について
構成オプションをご覧ください。
次のコードは、このタスクをビルドして構成する方法を示しています。
これらのサンプルは、画像のタスク構成のバリエーションも示しています。 動画ファイル、ライブ ストリームです。
画像
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions FaceDetector = mp.tasks.vision.FaceDetector FaceDetectorOptions = mp.tasks.vision.FaceDetectorOptions VisionRunningMode = mp.tasks.vision.RunningMode # Create a face detector instance with the image mode: options = FaceDetectorOptions( base_options=BaseOptions(model_asset_path='/path/to/model.task'), running_mode=VisionRunningMode.IMAGE) with FaceDetector.create_from_options(options) as detector: # The detector is initialized. Use it here. # ...
動画
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions FaceDetector = mp.tasks.vision.FaceDetector FaceDetectorOptions = mp.tasks.vision.FaceDetectorOptions VisionRunningMode = mp.tasks.vision.RunningMode # Create a face detector instance with the video mode: options = FaceDetectorOptions( base_options=BaseOptions(model_asset_path='/path/to/model.task'), running_mode=VisionRunningMode.VIDEO) with FaceDetector.create_from_options(options) as detector: # The detector is initialized. Use it here. # ...
ライブ配信
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions FaceDetector = mp.tasks.vision.FaceDetector FaceDetectorOptions = mp.tasks.vision.FaceDetectorOptions FaceDetectorResult = mp.tasks.vision.FaceDetectorResult VisionRunningMode = mp.tasks.vision.RunningMode # Create a face detector instance with the live stream mode: def print_result(result: FaceDetectorResult, output_image: mp.Image, timestamp_ms: int): print('face detector result: {}'.format(result)) options = FaceDetectorOptions( base_options=BaseOptions(model_asset_path='/path/to/model.task'), running_mode=VisionRunningMode.LIVE_STREAM, result_callback=print_result) with FaceDetector.create_from_options(options) as detector: # The detector is initialized. Use it here. # ...
画像で使用する顔検出器の作成の詳細な例については、 コードサンプルをご覧ください。
構成オプション
このタスクには、Python アプリケーション用の次の構成オプションがあります。
オプション名 | 説明 | 値の範囲 | デフォルト値 |
---|---|---|---|
running_mode |
タスクの実行モードを設定します。3 つの
モード: IMAGE: 単一画像入力のモード。 VIDEO: 動画のデコードされたフレームのモード。 LIVE_STREAM: 入力のライブ配信のモード カメラからのデータなどです。このモードでは、resultListener は 結果を受け取るリスナーを設定するために呼び出されます。 使用できます。 |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
min_detection_confidence |
顔検出が成功とみなされるための最小信頼スコア。 | Float [0,1] |
0.5 |
min_suppression_threshold |
重複とみなされる顔検出の非最大抑制しきい値の最小値。 | Float [0,1] |
0.3 |
result_callback |
検出結果を受信する結果リスナーを設定する
顔検出がライブ配信中に非同期で送信されます。
モードです。実行モードが LIVE_STREAM に設定されている場合にのみ使用できます。 |
N/A |
Not set |
データの準備
入力を画像ファイルまたは numpy 配列として準備します。
mediapipe.Image
オブジェクトに変換します。入力が動画ファイルの場合
ライブ ストリームで配信する場合、
入力フレームを numpy として読み込むための OpenCV
あります
画像
import mediapipe as mp # Load the input image from an image file. mp_image = mp.Image.create_from_file('/path/to/image') # Load the input image from a numpy array. mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_image)
動画
import mediapipe as mp # Use OpenCV’s VideoCapture to load the input video. # Load the frame rate of the video using OpenCV’s CV_CAP_PROP_FPS # You’ll need it to calculate the timestamp for each frame. # Loop through each frame in the video using VideoCapture#read() # Convert the frame received from OpenCV to a MediaPipe’s Image object. mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
ライブ配信
import mediapipe as mp # Use OpenCV’s VideoCapture to start capturing from the webcam. # Create a loop to read the latest frame from the camera using VideoCapture#read() # Convert the frame received from OpenCV to a MediaPipe’s Image object. mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
タスクを実行する
顔検出器は、detect
、detect_for_video
、detect_async
を使用します。
推論をトリガーできます顔検出では、次のことを行います。
画像内の顔を検出できます。
次のコードは、タスクモデルを使用して処理を実行する方法を示しています。
画像
# Perform face detection on the provided single image. # The face detector must be created with the image mode. face_detector_result = detector.detect(mp_image)
動画
# Perform face detection on the provided single image. # The face detector must be created with the video mode. face_detector_result = detector.detect_for_video(mp_image, frame_timestamp_ms)
ライブ配信
# Send live image data to perform face detection. # The results are accessible via the `result_callback` provided in # the `FaceDetectorOptions` object. # The face detector must be created with the live stream mode. detector.detect_async(mp_image, frame_timestamp_ms)
次の点にご留意ください。
- 動画モードまたはライブ配信モードで実行している場合 顔検出タスクに入力フレームのタイムスタンプを提供します。
- 画像モデルまたは動画モデルで実行する場合、顔検出タスクは 入力画像の処理が完了するまで、現在のスレッドをブロックします。 クリックします。
- ライブ ストリーム モードで実行している場合、顔検出タスクが 現在のスレッドをブロックしません。このメソッドは、 完了するたびに、その検出結果が 表示されます。顔検出タスクの実行時に検出関数が呼び出された場合 別のフレームの処理でビジー状態の場合、タスクは新しい入力フレームを無視します。
画像に対して顔検出機能を実行する詳細な例については、 コードサンプル をご覧ください。
結果の処理と表示
顔検出は、検出ごとに FaceDetectorResult
オブジェクトを返します。
あります。result オブジェクトには、検出された顔の境界ボックスと、
信頼スコアが表示されます。
このタスクからの出力データの例を次に示します。
FaceDetectionResult:
Detections:
Detection #0:
BoundingBox:
origin_x: 126
origin_y: 100
width: 463
height: 463
Categories:
Category #0:
index: 0
score: 0.9729152917861938
NormalizedKeypoints:
NormalizedKeypoint #0:
x: 0.18298381567001343
y: 0.2961040139198303
NormalizedKeypoint #1:
x: 0.3302789330482483
y: 0.29289937019348145
... (6 keypoints for each face)
Detection #1:
BoundingBox:
origin_x: 616
origin_y: 193
width: 430
height: 430
Categories:
Category #0:
index: 0
score: 0.9251380562782288
NormalizedKeypoints:
NormalizedKeypoint #0:
x: 0.6151331663131714
y: 0.3713381886482239
NormalizedKeypoint #1:
x: 0.7460576295852661
y: 0.38825345039367676
... (6 keypoints for each face)
次の図は、タスク出力を可視化したものです。
境界ボックスのない画像については、元の画像をご覧ください。
顔検出器のコード例は、顔検出機能 結果については、 コードサンプルをご覧ください。 をご覧ください。