LoginSignup
3
0

More than 1 year has passed since last update.

mediapipeを試す17行

Last updated at Posted at 2022-04-21

SS 192.png 顔に線がびっしり張り付くやつ

mediapipeにとっつきたい

表情認識などで使われるmediapipeを手元のpythonで使ってみます。
使い方の理解のためになるべくシンプルにして試します。

準備

がんばってmediapipeをインストールします。
方法は調べると出てくると思います。

未対応のM1 silicon Macの方は下記の記事が参考になるかもしれません。

参考記事

MediaPipe Face Mesh
こちらの公式記事にあるスクリプトを、解説用にギリ動作するレベルまで短く刈り込んでいます。

理解のための素朴なコード

もろもろ省略したシンプルなコードです。ちょっとわからないところもありました。

mediapipe_simple.py
import cv2
import mediapipe as mp

cap = cv2.VideoCapture(2)#カメラのIDを選ぶ。映らない場合は番号を変える。

with mp.solutions.face_mesh.FaceMesh(#mesh化の設定をしてその処理名をface_meshとする
    max_num_faces=1,refine_landmarks=True,min_detection_confidence=0.5,min_tracking_confidence=0.5) as face_mesh:
    #↑顔の数, 目の周りを細かくするか, ランドマーク検出成功判定の閾値, ランドマークトラッキング成功判定の閾値

  while cap.isOpened():
    success, image = cap.read()#キャプチャが成功していたら画像データとしてimageに取り込む
    results = face_mesh.process(image)#メッシュ化計算の結果がresutsに入る

    if results.multi_face_landmarks:#ランドマークが取得できたら
      for face_landmarks in results.multi_face_landmarks:#結果データについて順次描画処理をしていく
        mp.solutions.drawing_utils.draw_landmarks(#以下の設定で描画を実行
            image=image, landmark_list=face_landmarks, connections=mp.solutions.face_mesh.FACEMESH_TESSELATION,
            #↑画像データ, ランドマークのリスト, メッシュの繋ぎ方?(テッセレーション)
            landmark_drawing_spec=None,connection_drawing_spec=mp.solutions.drawing_styles.get_default_face_mesh_tesselation_style())
            #↑わからぬ, わからぬ

    cv2.imshow('MediaPipe Face Mesh', cv2.flip(image, 1))#imageを鏡像で表示

    if cv2.waitKey(5) & 0xFF == 27:#ESCキーが押されたら終わり
      break

cap.release() #カメラを終了

multi_face_landmarksは468個のランドマークで表されるらしい。
ランドマークはx,y,zを持ち、x,yは0~1で正規化されているらしい。
zは頭を頂点を原点として、カメラに近いほど小さい値になるらしい。

実行結果

スマホ画面をカメラに向けて撮影しているので色が悪いですが、高速にフェイスメッシュをとってくれます。
もちろん動画で、リアルタイムに線が顔にびっしり張り付きます。

実行結果

間違いやおすすめの解説ページがありましたら教えてください。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0