mei_13のPython講座 ロゴ

【解説】Pythonで体験するAIの眼:MediaPipeで画像認識の基礎を学ぼう




🐍 初心者歓迎!月額4,000円で質問し放題のPython講座
(1時間4,000円の伴走型ビデオチャット指導も受付中!)
🚀 講座の詳細を見る 📩 質問・お問い合わせ

Pythonで体験するAIの眼:MediaPipeで画像認識の基礎を学ぼう


Yukiのアイコン
【Yuki】 Hirokiくん、こんにちは。今日はPythonを使って、コンピュータに「目」を持たせるような技術、MediaPipe(メディアパイプ)についてお話ししようと思います。少し難しい言葉が出てくるかもしれませんが、ゆっくり解説していくので安心してくださいね。


Hirokiのアイコン
【Hiroki】 Yukiさん、よろしくお願いします!画像認識って、最近のAI技術でも特に凄そうな分野ですよね。僕みたいな初心者でも、Pythonで扱えるようになるんでしょうか?


Yukiのアイコン
【Yuki】 ええ、大丈夫ですよ。MediaPipeはGoogleが提供しているフレームワークで、複雑な計算を意識しなくても、数行のコードで高度な画像認識ができるように設計されています。わたしも最初触れたときは、その手軽さに少し驚いてしまったくらいです...。

MediaPipeとは何か


Yukiのアイコン
【Yuki】 まず、MediaPipeがどんなものかについて説明しますね。MediaPipeは、機械学習(ML)を用いた推論パイプラインを構築するためのオープンソース・フレームワークです。主に、動画や画像から人間の手や顔、ポーズなどをリアルタイムで検出するために使われます。


Hirokiのアイコン
【Hiroki】 リアルタイムで、ですか?僕のノートパソコンでも動くのかな。


Yukiのアイコン
【Yuki】 そこがMediaPipeの素晴らしいところなんです。通常、AIのモデルを動かすには高性能なGPUが必要なことが多いのですが、MediaPipeは軽量で高速に動作するように最適化されています。一般的なノートパソコンや、スマートフォンでも十分に動かすことができると思いますよ。


Hirokiのアイコン
【Hiroki】 それは心強いです!具体的に、どんなことができるんですか?


Yukiのアイコン
【Yuki】 代表的な機能(ソリューション)には、以下のようなものがあります。

  • Hands: 手の関節や指先(21個のランドマーク)を検出します。
  • Face Mesh: 顔の468以上の点を検出し、表情や形状を精密に捉えます。
  • Pose: 全身の主要な関節位置を特定します。
  • Holistic: 手、顔、全身のポーズをすべて同時に統合して検出します。


Hirokiのアイコン
【Hiroki】 そんなにたくさんの種類があるんですね。まずは、一番身近そうな「手」の認識から学んでみたいです。

MediaPipeの導入と準備


Yukiのアイコン
【Yuki】 いいですね、では「Hands」を例に進めていきましょう。まずは環境構築からです。Pythonがインストールされている環境であれば、pipコマンドを使って簡単に導入できます。あわせて、カメラ映像を扱うためにOpenCVというライブラリもインストールしておきましょう。


Hirokiのアイコン
【Hiroki】 コマンドプロンプトやターミナルで入力するんですね。


Yukiのアイコン
【Yuki】 はい。以下のコマンドを実行してみてください。

pip install mediapipe opencv-python


Hirokiのアイコン
【Hiroki】 インストールできました!これで準備は完了ですか?


Yukiのアイコン
【Yuki】 はい、準備は整いました。MediaPipeを使うときは、基本的に「カメラから画像を取得する」「MediaPipeで解析する」「解析結果を画像に描き込む」という流れになります。少しずつコードを書いていきましょう。

手の検出(MediaPipe Hands)の基本


Yukiのアイコン
【Yuki】 まずは、MediaPipe Handsの仕組みを少しだけ解説しますね。MediaPipeは手を検出すると、その手の中に21個の座標ポイント(ランドマーク)を定義します。親指の付け根から小指の先まで、それぞれに番号が振られているんです。


Hirokiのアイコン
【Hiroki】 21個もポイントがあるなら、指が曲がっているかどうかも分かりそうですね。


Yukiのアイコン
【Yuki】 その通りです。これを利用すれば、特定の指が立っているときにだけ何かのアクションを起こす、といった「ジェスチャー認識」も作れるかもしれません。では、実際にWebカメラを使って手をリアルタイムで追跡するコードを書いてみましょう。

実装:リアルタイム・ハンドトラッキング


Yukiのアイコン
【Yuki】 これが、基本的な手の検出を行うためのPythonコードです。少し長いですが、コメントを読みながら流れを追ってみてください。

import cv2
import mediapipe as mp

# MediaPipeの描画用ユーティリティとHandsモデルの初期化
mp_drawing = mp.solutions.drawing_utils
mp_hands = mp.solutions.hands

# Webカメラからの入力を開始
cap = cv2.VideoCapture(0)

with mp_hands.Hands(
        static_image_mode=False,
        max_num_hands=2,
        min_detection_confidence=0.5,
        min_tracking_confidence=0.5) as hands:

    while cap.isOpened():
        success, image = cap.read()
        if not success:
            print("カメラからの映像取得に失敗しました。")
            continue

        # MediaPipeで処理するためにBGRからRGBに変換
        image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

        # 処理効率を上げるため、画像を書込不可に設定
        image.flags.writeable = False
        results = hands.process(image)

        # 描画のためにRGBからBGRに再変換
        image.flags.writeable = True
        image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)

        # 手が検出された場合、ランドマークを描画
        if results.multi_hand_landmarks:
            for hand_landmarks in results.multi_hand_landmarks:
                mp_drawing.draw_landmarks(
                    image, hand_landmarks, mp_hands.HAND_CONNECTIONS)

        # 結果を表示
        cv2.imshow('MediaPipe Hands', image)

        # 'q'キーで終了
        if cv2.waitKey(5) & 0xFF == ord('q'):
            break

cap.release()
cv2.destroyAllWindows()


Hirokiのアイコン
【Hiroki】 おっ、カメラが起動して僕の手に線と点が表示されました!すごい、手を動かしてもしっかり追従してきますね。


Yukiのアイコン
【Yuki】 上手くいきましたね。コードのポイントは、hands.process(image) という部分です。ここでAIが画像の中にある「手」を探して、その座標を results に返してくれているんです。


Hirokiのアイコン
【Hiroki】 mp_drawing.draw_landmarks というのが、あの線を描いている部分ですね。


Yukiのアイコン
【Yuki】 はい、そうです。MediaPipeには便利な描画ツールがあらかじめ用意されているので、自分で複雑な計算をして線を描く必要はないんですよ。でも、もし特定の指の座標だけを使いたい場合は、hand_landmarks.landmark[0] のようにインデックスを指定して値を取り出すこともできます。

全身を捉える(MediaPipe Pose)


Hirokiのアイコン
【Hiroki】 手の次は、全身の動きも見てみたいです。それも同じような書き方でできるんでしょうか?


Yukiのアイコン
【Yuki】 ええ、基本の構造はほとんど同じです。mp_handsmp_pose に変えるイメージですね。MediaPipe Poseを使うと、肩や肘、腰、膝といった33箇所の関節ポイントを取得できます。


Hirokiのアイコン
【Hiroki】 33箇所も!スポーツのフォームチェックとかに使えそうですね。


Yukiのアイコン
【Yuki】 まさに、そういった用途でよく使われています。Poseモデルの特徴は、身体の一部が隠れていても、他の部位の位置から隠れている場所を推測してくれる点にあります。これによって、激しい動きの中でも比較的安定してトラッキングができるようになっているんです。

顔の精密な解析(MediaPipe Face Mesh)


Yukiのアイコン
【Yuki】 さらに細かい解析がしたいときは、Face Meshがおすすめです。これは顔の表面に網目状のポイントを配置する技術で、なんと468点以上のランドマークを検出します。


Hirokiのアイコン
【Hiroki】 468点...!さっきの手の21点とは桁が違いますね。


Yukiのアイコン
【Yuki】 そうなんです。これを使うと、目やまぶた、唇の動きをミリ単位で捉えることができます。例えば、まばたきを検知して何かのスイッチにしたり、口の形から発話の状態を解析したりすることも可能です。バーチャルなキャラクターを自分の表情で動かす「アバター」の技術にも、こうした仕組みが応用されていますね。


Hirokiのアイコン
【Hiroki】 自分の動きがそのまま反映されるのって、ちょっとワクワクしますね。MediaPipeを使えば、僕でもそういったシステムが作れるようになるかもしれない、と思えてきました。

MediaPipeのメリットと注意点


Yukiのアイコン
【Yuki】 Hirokiくんなら、きっと面白いものが作れると思いますよ。MediaPipeの大きなメリットを改めてまとめると、以下のようになります。

  1. リアルタイム性: 遅延が少なく、ビデオチャットやゲームなどにも応用しやすい。
  2. クロスプラットフォーム: Pythonだけでなく、C++、JavaScript、Android、iOSでも動かせます。
  3. カスタマイズ性: モデルの設定(検出のしきい値など)を細かく調整できます。


Hirokiのアイコン
【Hiroki】 逆に、気をつけるべき点はありますか?


Yukiのアイコン
【Yuki】 そうですね...。MediaPipeはあくまで「座標を特定する」のが得意なツールです。例えば「映っているのが誰の顔か」という「顔認証」や、「持っている物体が何という名前か」という「一般物体認識」を行うには、また別のモデルや仕組みを組み合わせる必要があります。


Hirokiのアイコン
【Hiroki】 なるほど、目的によってツールを使い分けることが大切なんですね。

さらなる学習のために


Yukiのアイコン
【Yuki】 MediaPipeについてもっと深く知りたくなったら、公式サイトのドキュメントを読んでみるのが一番の近道かもしれません。英語のサイトですが、図解も多くて分かりやすいですよ。


Hirokiのアイコン
【Hiroki】 ありがとうございます。ドキュメントを読みながら、さっきのコードを少し改造して、指を立てたら画面に文字が出るようなプログラムに挑戦してみます!


Yukiのアイコン
【Yuki】 いいですね、その意気です。もしコードを書いていて行き詰まったり、特定の指の座標の取り方が分からなくなったりしたら、いつでも聞いてください。わたしも...Hirokiくんが素敵なツールを作れるように、陰ながら応援していますね。


Hirokiのアイコン
【Hiroki】 はい!Yukiさん、今日は丁寧に教えてくれてありがとうございました!


Yukiのアイコン
【Yuki】 どういたしまして。画像認識の世界はとても広くて奥が深いですが、MediaPipeはその入り口として最適だと思います。夜も深まってきましたが、あまり根を詰めすぎないようにしてくださいね。また次回、お会いできるのを楽しみにしています。



「MediaPipe」のサンプルコードを見る

< secrets
コラム一覧に戻る
YOLO >

この記事では基礎を解説しましたが、実務においては「もっと複雑なデータを扱いたい」「独自のシステムに組み込みたい」といった、個別の課題に直面することも多いはずです。

「自分で書く時間は最小限に抑え、プロの品質でツールを完成させたい」という方は、ぜひ一度ご相談ください。

「教わる」だけでなく「形にする」パートナーとして、フリーランスエンジニアのmei_13が最短ルートでの解決をサポートします。

➡ ココナラで制作・相談を依頼する(見積もり無料)


初心者から始められるPythonレッスン

プログラミング未経験者・初心者歓迎!
月額4,000円で質問し放題!!
● 完全オンライン
● 翌日までには必ず返信
● 挫折しない独自の学習メソッド
● 圧倒的高評価!!
テキストベースで時間を選ばない
4,000円/60分伴走型ビデオチャット指導も可能
● 高品質なサンプルコード
詳細はこちら

📩 質問・お問い合わせはこちら



AIアシスタント Yuki