0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MediaPipeを使ってWebカメラでハンドトラッキングしてみる

Posted at

はじめに

今回は、Googleが提供するMediaPipeというフレームワークを使って、ハンドトラッキングをしてみます。ノートパソコン搭載のWebカメラを使います。

MediaPipeについて

Google が提供する、クロスプラットフォームのオープンソースフレームワークです。主に、リアルタイムの機械学習(ML)モデルを、カメラ映像やその他のセンサーデータと組み合わせて、様々なデバイス(モバイル、デスクトップ、Web)上で動作させることを目的としています。

今回は、ハンドトラッキングを使いますが、その他にも顔検出や姿勢推定、セグメンテーションなどの機能も提供されています。

実際にやってみる

必要なものは以下の通りです。

  • Python環境(今回3.12)
  • Webカメラ

コードは以下の通りです。

main.py
import cv2
import mediapipe as mp

# MediaPipe Handsのセットアップ
mp_hands = mp.solutions.hands
hands = mp_hands.Hands()
mp_drawing = mp.solutions.drawing_utils

# カメラからの映像をキャプチャ
cap = cv2.VideoCapture(0)

# OpenCVのウィンドウを作成
cv2.namedWindow('Hand Tracking', cv2.WINDOW_NORMAL)
is_fullscreen = False

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break

    # 画像を水平方向に反転
    frame = cv2.flip(frame, 1)

    # 画像をRGBに変換
    image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

    # 手のランドマークの検出
    results = hands.process(image)

    # 画像をBGRに戻す
    frame = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)

    # 検出結果がある場合、ランドマークを描画
    if results.multi_hand_landmarks:
        for hand_landmarks in results.multi_hand_landmarks:
            mp_drawing.draw_landmarks(frame, hand_landmarks, mp_hands.HAND_CONNECTIONS)

    # 画像を表示
    cv2.imshow('Hand Tracking', frame)

    # キー入力をチェック
    key = cv2.waitKey(10) & 0xFF
    if key == ord('q'):
        break
    elif key == ord('f'):
        is_fullscreen = not is_fullscreen
        if is_fullscreen:
            cv2.setWindowProperty('Hand Tracking', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)
        else:
            cv2.setWindowProperty('Hand Tracking', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_NORMAL)

# リソースの解放
cap.release()
cv2.destroyAllWindows()

このコードを実行すると、Webカメラからの映像ウィンドウが立ち上がります。
そこに映るように手を持っていくと・・・

スクリーンショット 2025-07-21 233543.png

できました!

このように、手を認識してポイントとノードでトラッキングされます。
手を動かしても、しっかりと綺麗に追従しています。

指が隠れるようなジェスチャーをしてみました。すると・・・

image.png

このように、指の位置も途切れませんでした!学習されたモデルが位置推定をしていると思われますが、かなり高精度のようです。

おわりに

想像していたよりもスゴイモノでした!ここまで高精度だとは...。この技術を活用すればいろいろ面白いことができそうではないでしょうか!(バーチャル空間とかにもいける・・・!?)

今回は、ここまでです。ありがとうございました!

篠木友馬

Mail:s233317@stn.nagaokaut.ac.jp
Portfolio:https://yumashinoki.my.canva.site
GitHub:https://github.com/YumaShinoki47

0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?