(1時間4,000円の伴走型ビデオチャット指導も受付中!)
Pythonで体験するAIの眼:MediaPipeで画像認識の基礎を学ぼう
![]()
【Yuki】
Hirokiくん、こんにちは。今日はPythonを使って、コンピュータに「目」を持たせるような技術、MediaPipe(メディアパイプ)についてお話ししようと思います。少し難しい言葉が出てくるかもしれませんが、ゆっくり解説していくので安心してくださいね。
![]()
【Hiroki】
Yukiさん、よろしくお願いします!画像認識って、最近のAI技術でも特に凄そうな分野ですよね。僕みたいな初心者でも、Pythonで扱えるようになるんでしょうか?
![]()
【Yuki】
ええ、大丈夫ですよ。MediaPipeはGoogleが提供しているフレームワークで、複雑な計算を意識しなくても、数行のコードで高度な画像認識ができるように設計されています。わたしも最初触れたときは、その手軽さに少し驚いてしまったくらいです...。
MediaPipeとは何か
![]()
【Yuki】
まず、MediaPipeがどんなものかについて説明しますね。MediaPipeは、機械学習(ML)を用いた推論パイプラインを構築するためのオープンソース・フレームワークです。主に、動画や画像から人間の手や顔、ポーズなどをリアルタイムで検出するために使われます。
![]()
【Hiroki】
リアルタイムで、ですか?僕のノートパソコンでも動くのかな。
![]()
【Yuki】
そこがMediaPipeの素晴らしいところなんです。通常、AIのモデルを動かすには高性能なGPUが必要なことが多いのですが、MediaPipeは軽量で高速に動作するように最適化されています。一般的なノートパソコンや、スマートフォンでも十分に動かすことができると思いますよ。
![]()
【Hiroki】
それは心強いです!具体的に、どんなことができるんですか?
![]()
【Yuki】
代表的な機能(ソリューション)には、以下のようなものがあります。
- Hands: 手の関節や指先(21個のランドマーク)を検出します。
- Face Mesh: 顔の468以上の点を検出し、表情や形状を精密に捉えます。
- Pose: 全身の主要な関節位置を特定します。
- Holistic: 手、顔、全身のポーズをすべて同時に統合して検出します。
![]()
【Hiroki】
そんなにたくさんの種類があるんですね。まずは、一番身近そうな「手」の認識から学んでみたいです。
MediaPipeの導入と準備
![]()
【Yuki】
いいですね、では「Hands」を例に進めていきましょう。まずは環境構築からです。Pythonがインストールされている環境であれば、pipコマンドを使って簡単に導入できます。あわせて、カメラ映像を扱うためにOpenCVというライブラリもインストールしておきましょう。
![]()
【Hiroki】
コマンドプロンプトやターミナルで入力するんですね。
![]()
【Yuki】
はい。以下のコマンドを実行してみてください。
pip install mediapipe opencv-python
![]()
【Hiroki】
インストールできました!これで準備は完了ですか?
![]()
【Yuki】
はい、準備は整いました。MediaPipeを使うときは、基本的に「カメラから画像を取得する」「MediaPipeで解析する」「解析結果を画像に描き込む」という流れになります。少しずつコードを書いていきましょう。
手の検出(MediaPipe Hands)の基本
![]()
【Yuki】
まずは、MediaPipe Handsの仕組みを少しだけ解説しますね。MediaPipeは手を検出すると、その手の中に21個の座標ポイント(ランドマーク)を定義します。親指の付け根から小指の先まで、それぞれに番号が振られているんです。
![]()
【Hiroki】
21個もポイントがあるなら、指が曲がっているかどうかも分かりそうですね。
![]()
【Yuki】
その通りです。これを利用すれば、特定の指が立っているときにだけ何かのアクションを起こす、といった「ジェスチャー認識」も作れるかもしれません。では、実際にWebカメラを使って手をリアルタイムで追跡するコードを書いてみましょう。
実装:リアルタイム・ハンドトラッキング
![]()
【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】
おっ、カメラが起動して僕の手に線と点が表示されました!すごい、手を動かしてもしっかり追従してきますね。
![]()
【Yuki】
上手くいきましたね。コードのポイントは、hands.process(image) という部分です。ここでAIが画像の中にある「手」を探して、その座標を results に返してくれているんです。
![]()
【Hiroki】
mp_drawing.draw_landmarks というのが、あの線を描いている部分ですね。
![]()
【Yuki】
はい、そうです。MediaPipeには便利な描画ツールがあらかじめ用意されているので、自分で複雑な計算をして線を描く必要はないんですよ。でも、もし特定の指の座標だけを使いたい場合は、hand_landmarks.landmark[0] のようにインデックスを指定して値を取り出すこともできます。
全身を捉える(MediaPipe Pose)
![]()
【Hiroki】
手の次は、全身の動きも見てみたいです。それも同じような書き方でできるんでしょうか?
![]()
【Yuki】
ええ、基本の構造はほとんど同じです。mp_hands を mp_pose に変えるイメージですね。MediaPipe Poseを使うと、肩や肘、腰、膝といった33箇所の関節ポイントを取得できます。
![]()
【Hiroki】
33箇所も!スポーツのフォームチェックとかに使えそうですね。
![]()
【Yuki】
まさに、そういった用途でよく使われています。Poseモデルの特徴は、身体の一部が隠れていても、他の部位の位置から隠れている場所を推測してくれる点にあります。これによって、激しい動きの中でも比較的安定してトラッキングができるようになっているんです。
顔の精密な解析(MediaPipe Face Mesh)
![]()
【Yuki】
さらに細かい解析がしたいときは、Face Meshがおすすめです。これは顔の表面に網目状のポイントを配置する技術で、なんと468点以上のランドマークを検出します。
![]()
【Hiroki】
468点...!さっきの手の21点とは桁が違いますね。
![]()
【Yuki】
そうなんです。これを使うと、目やまぶた、唇の動きをミリ単位で捉えることができます。例えば、まばたきを検知して何かのスイッチにしたり、口の形から発話の状態を解析したりすることも可能です。バーチャルなキャラクターを自分の表情で動かす「アバター」の技術にも、こうした仕組みが応用されていますね。
![]()
【Hiroki】
自分の動きがそのまま反映されるのって、ちょっとワクワクしますね。MediaPipeを使えば、僕でもそういったシステムが作れるようになるかもしれない、と思えてきました。
MediaPipeのメリットと注意点
![]()
【Yuki】
Hirokiくんなら、きっと面白いものが作れると思いますよ。MediaPipeの大きなメリットを改めてまとめると、以下のようになります。
- リアルタイム性: 遅延が少なく、ビデオチャットやゲームなどにも応用しやすい。
- クロスプラットフォーム: Pythonだけでなく、C++、JavaScript、Android、iOSでも動かせます。
- カスタマイズ性: モデルの設定(検出のしきい値など)を細かく調整できます。
![]()
【Hiroki】
逆に、気をつけるべき点はありますか?
![]()
【Yuki】
そうですね...。MediaPipeはあくまで「座標を特定する」のが得意なツールです。例えば「映っているのが誰の顔か」という「顔認証」や、「持っている物体が何という名前か」という「一般物体認識」を行うには、また別のモデルや仕組みを組み合わせる必要があります。
![]()
【Hiroki】
なるほど、目的によってツールを使い分けることが大切なんですね。
さらなる学習のために
![]()
【Yuki】
MediaPipeについてもっと深く知りたくなったら、公式サイトのドキュメントを読んでみるのが一番の近道かもしれません。英語のサイトですが、図解も多くて分かりやすいですよ。
![]()
【Hiroki】
ありがとうございます。ドキュメントを読みながら、さっきのコードを少し改造して、指を立てたら画面に文字が出るようなプログラムに挑戦してみます!
![]()
【Yuki】
いいですね、その意気です。もしコードを書いていて行き詰まったり、特定の指の座標の取り方が分からなくなったりしたら、いつでも聞いてください。わたしも...Hirokiくんが素敵なツールを作れるように、陰ながら応援していますね。
![]()
【Hiroki】
はい!Yukiさん、今日は丁寧に教えてくれてありがとうございました!
![]()
【Yuki】
どういたしまして。画像認識の世界はとても広くて奥が深いですが、MediaPipeはその入り口として最適だと思います。夜も深まってきましたが、あまり根を詰めすぎないようにしてくださいね。また次回、お会いできるのを楽しみにしています。
「MediaPipe」のサンプルコードを見る
この記事では基礎を解説しましたが、実務においては「もっと複雑なデータを扱いたい」「独自のシステムに組み込みたい」といった、個別の課題に直面することも多いはずです。
「自分で書く時間は最小限に抑え、プロの品質でツールを完成させたい」という方は、ぜひ一度ご相談ください。
- 専門家の知見に基づいた、保守性の高いコード設計
- AIの専門家による、Gemini API等の最新AIを組み合わせた高度な自動化
- ChatGPT等が生成したコードのデバッグ・最適化
「教わる」だけでなく「形にする」パートナーとして、フリーランスエンジニアのmei_13が最短ルートでの解決をサポートします。
初心者から始められるPythonレッスン
● 月額4,000円で質問し放題!!
● 完全オンライン
● 翌日までには必ず返信
● 挫折しない独自の学習メソッド
● 圧倒的高評価!!
● テキストベースで時間を選ばない
● 4,000円/60分の伴走型ビデオチャット指導も可能
● 高品質なサンプルコード
詳細はこちら

