Opencv+Mediapipe→顔特徴点検出

1. 最初の知り合い

MediaPipe での顔の特徴点検出には、MediaPipe が提供する事前トレーニング済みモデルとライブラリを使用できます。MediaPipe は、人間の顔の 468 個の特徴点をリアルタイムに検出する「FaceMesh」と呼ばれるモデルを提供しています。

MediaPipe を使用して顔の特徴点を検出する基本的な手順は次のとおりです。

  1. MediaPipe をインストールする: まず、MediaPipe フレームワークをインストールする必要があります。

  2. 入力と出力のセットアップ: 入力データのソース (カメラ、ビデオ ファイル、または画像など) を決定します。同時に、検出された顔のランドマークを保存するように出力を設定します。

  3. MediaPipe グラフの作成: MediaPipe フレームワークの API を使用して、「FaceMesh」モデルをロードし、入力データを処理するためのグラフを作成します。

  4. グラフの実行: MediaPipe グラフの入力ノードに入力データを渡し、グラフの出力ノードから結果を取得することで、顔特徴点検出用のグラフを実行します。

  5. 結果の処理: 出力ノードから検出された顔特徴点の結果を取得し、それらに対してさらなる分析またはアプリケーション統合を実行します。

MediaPipe の「FaceMesh」モデルは、目、眉、鼻、口など、人間の顔画像内の主要な特徴点を自動的に見つけて識別できます。ニーズに応じて特定の特徴点の使用を選択できます。

さらに、MediaPipe は、手の検出、姿勢推定などの他の機能とモデルも提供します。

2. 顔特徴点検出

(1) 設置環境

pip install opencv-python
pip install mediapipe==0.8.3.1

(2) OpenCV読み込み動画

コード:

import cv2
import mediapipe as mp
import time

cap = cv2.VideoCapture("Video/6.mp4")  # 加载视频
pTime = 0

while True:
    success, img = cap.read()
    imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

    # 帧数
    cTime = time.time()
    fps = 1 / (cTime - pTime)
    pTime = cTime

    cv2.putText(img, f'FPS:{int(fps)}', (20, 70), cv2.FONT_HERSHEY_PLAIN, 3, (0, 255, 0), 3)
    cv2.imshow("Image", img)
    cv2.waitKey(1)

効果:

無料動画素材URL添付:Pexels

 (3) 特徴点検出

コード:

import cv2
import mediapipe as mp
import time

cap = cv2.VideoCapture("Video/6.mp4")  # 加载视频
pTime = 0

mpDraw = mp.solutions.drawing_utils  # drawing_utils模块:绘制特征点和边界框
mpFaceMesh = mp.solutions.face_mesh
faceMesh = mpFaceMesh.FaceMesh(max_num_faces=2)  # 初始化FaceMesh模块
drawSpec = mpDraw.DrawingSpec(thickness=1, circle_radius=2)  # 绘图样式

while True:
    success, img = cap.read()
    imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    results = faceMesh.process(imgRGB)  # process():检测人脸关键点
    # 获取关键点信息
    if results.multi_face_landmarks:
        for faceLms in results.multi_face_landmarks:
            mpDraw.draw_landmarks(img, faceLms, mpFaceMesh.FACE_CONNECTIONS, drawSpec, drawSpec)  # 绘制关键点
            for id, lm in enumerate(faceLms.landmark):
                # print(lm)
                ih, iw, ic = img.shape
                # 关键点坐标
                x, y = int(lm.x * iw), int(lm.y * ih)
                print(id, x, y)
    # 帧数
    cTime = time.time()
    fps = 1 / (cTime - pTime)
    pTime = cTime

    cv2.putText(img, f'FPS:{int(fps)}', (20, 70), cv2.FONT_HERSHEY_PLAIN, 3, (0, 255, 0), 3)
    cv2.imshow("Image", img)
    cv2.waitKey(1)

効果:

3. 応用の見通し

顔特徴点検出は、コンピュータビジョンや人工知能の分野で幅広い応用が期待されています。次のように:

  1. 顔認識と認証: 顔特徴点検出は、顔認識と認証の基礎です。目、鼻、口などの顔の主要な特徴点を正確に検出することにより、顔の固有の特徴表現を確立することができます。これは、安全なアクセス制御システム、モバイルデバイスのロック解除、オンライン支払い検証などで使用できます。

  2. 表情分析と感情認識: 顔の特徴点の検出は、顔の表情と感情状態の分析に役立ちます。目、眉、口角などの重要な特徴点の位置や変化を検出することで、笑顔、怒り、悲しみなどの表情を判定します。これは、ソーシャルメディア分析、市場調査、感情認識技術などに幅広く応用できます。

  3. 顔の美化と仮想メイクアップ: 顔の特徴点の検出は、顔の美化と仮想メイクアップのアプリケーションに使用できます。顔の重要な特徴点を特定することで、目の大きさを変更したり、口の形を調整したりするなど、顔の特徴を分析および修正して、顔の美化効果を実現できます。これは、モバイル アプリ、カメラ ソフトウェア、仮想試着などの分野で非常に人気があります。

  4. 顔の変換と顔の融合: 顔の特徴点検出を使用して、顔の変換と顔の融合の効果を実現できます。複数の顔の重要な特徴点を検出することで、ある人物の顔の特徴を別の人物の画像に適用し、表情、年齢、性別などの変換や融合を実現します。これは、エンターテイメント アプリケーション、映画の特殊効果、顔変更ソフトウェアなどに幅広く応用できます。

  5. ビデオ分析と人間とコンピューターのインタラクション: 顔のランドマーク検出は、ビデオ分析と人間とコンピューターのインタラクションの分野でも重要な役割を果たします。人間の顔の重要な特徴点をリアルタイムに検出・追跡することで、表情認識、ジェスチャー認識、頭部姿勢追跡などの機能を実現できます。これは、拡張現実、仮想現実、ゲーム開発、ユーザー エクスペリエンスの向上などに大きな可能性を秘めています。 

おすすめ

転載: blog.csdn.net/weixin_44686138/article/details/130518744