AIによる画像認識入門(1)MediaPipeとOpenAIを活用した手の認識
※このページは神奈川工科大学電気電子情報工学科 コミュニケーションロボティクス研究室の平凡なチュートリアルを淡々と示したものです。過度な期待はしないでください。
1. AIによる画像認識とは
AIによる画像認識とは、カメラで撮影した画像や映像の中から、人や物体の特徴を自動的に見つけ出す技術です。例えば次のようなことができます。
顔を見つける
手を見つける
人の姿勢を認識する
犬や猫を判別する
文字を読み取る
近年ではスマートフォンの顔認証や自動運転、監視カメラなど様々な場面で活用されています。
人間とAIの画像認識の違い
https://gyazo.com/c0f0d13fbb86a7b2b6b42cde7c6877aa
人間の場合 「これは手だ」 と瞬時に判断できます。
一方コンピュータは画像を
赤(R)
緑(G)
青(B)
の数値の集まりとして扱っています。
AIは大量の画像を学習することで、 「この特徴なら手である可能性が高い」 という判断を行っています。
2. 今回作るシステム
今回はWebカメラの映像から手を認識します。
code:システム構成
Webカメラ
↓
OpenCV
↓
画像取得
↓
MediaPipe
↓
手の認識
↓
MediaPipe、OpenCVで描画
3. まずは手の認識プログラムを動かしてみよう
※推奨環境
Python 3.12.10  ここ
MediaPipe 0.10.21
注意:MediaPipe0.10.30以降でmp.solutionsが廃止され、Tasks APIに移行しています。このチュートリアルではmp.solutions(古い方)を採用していますが、これは2026年5月現在では、まだmp.solutionsの方がネット上に情報が多いためです。学習時に調べやすいように配慮しています。解説は0.10.30向けに書いてありますので、来年あたりに(覚えていたら)コードを更新しようと思います。
インストール
code:インストール
pip install mediapipe==0.10.21 opencv-python
手の認識サンプル(Python)
code:hand_recognition.py
import cv2
import mediapipe as mp
# MediaPipe Hands 初期化
mp_hands = mp.solutions.hands
hands = mp_hands.Hands(
static_image_mode=False,
max_num_hands=2,
min_detection_confidence=0.7,
min_tracking_confidence=0.7
)
# 描画用
mp_draw = mp.solutions.drawing_utils
# カメラ開始
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
if not ret:
break
# 左右反転(鏡表示)
frame = cv2.flip(frame, 1)
# BGR → RGB変換 ※OpenCV(BGR)とMediaPipe(RGB)の色順の違いを合わせる
rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
# 手認識
results = hands.process(rgb)
# 手が見つかった場合
if results.multi_hand_landmarks:
for hand_landmarks in results.multi_hand_landmarks:
# ランドマーク描画
mp_draw.draw_landmarks(
frame,
hand_landmarks,
mp_hands.HAND_CONNECTIONS
)
# 人差し指先端の座標取得
index_tip = hand_landmarks.landmark8
h, w, c = frame.shape
x = int(index_tip.x * w)
y = int(index_tip.y * h)
cv2.circle(frame, (x, y), 10, (0, 255, 0), -1)
print(f"Index Finger: {x}, {y}")
cv2.imshow("Hand Tracking", frame)
# ESCで終了
if cv2.waitKey(1) & 0xFF == 27:
break
cap.release()
cv2.destroyAllWindows()
4. MediaPipeとは
MediaPipe はGoogleが開発した機械学習ライブラリです。
画像や動画から様々な特徴をリアルタイムに検出できます。
table:主な特徴(Landmark)
Landmark 内容
Hand 手の認識
Face 顔の認識
Pose 全身姿勢推定
Holistic 顔・手・姿勢の同時認識
https://gyazo.com/6cc1e200fc0cad6f9d4eb3a56ef1f746
MediaPipeの主な機能。Google for Developersをもとに作成
MediaPipe Hands
今回はHand Landmarker を利用します。
Hand Landmarker機能では
手を検出
21個の関節点を推定
をできます。
https://gyazo.com/2731cb5f4a04d82dd936eb5ab75b3fa2
手の関節点一覧。図はGoogle for Developersより
5. OpenCVとは
OpenCV は、画像処理やコンピュータビジョンを行うためのオープンソースライブラリです。
OpenCVを使うことで、
カメラ映像の取得
画像の表示
色変換
図形描画
動画処理
などを簡単に行うことができます。
今回のプログラムでは、
OpenCVは
カメラから画像を取得する
画像を表示する
認識結果を描画する
という役割を担当しています。
6. プログラムにおける役割分担まとめ
今回のシステムでは次のように役割を分担しています。
table:役割分担
ステム 役割
OpenCV カメラ映像を取得する
OpenCV 画像を表示する
OpenCV 認識結果を描画する
MediaPipe 手を検出する
MediaPipe 21個の関節座標を取得する
Pythonプログラム 座標データを処理する
つまり、
OpenCV = カメラと画像処理担当
MediaPipe = AI認識担当
という役割分担になっています。
code:処理の流れ
① Webカメラ映像取得(OpenCV)
↓
② BGR→RGB変換(OpenCV)
↓
③ 手の検出(MediaPipe)
↓
④ 21個のランドマーク取得(MediaPipe)
↓
⑤ ランドマーク描画(OpenCV)
↓
⑥ 画面表示(OpenCV)
https://gyazo.com/71c7de59f100448c29cdb7f29fbd171b
Communication Robotics Lab.