0
3

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 x ChatGPT] 速攻でオブジェクト認識を始める

Last updated at Posted at 2024-06-09

はじめに

気になっているライブラリを使ってみたい。新しい分野のサンプルコードを動かして開発に活用したい。このようなシチュエーションでは、プロンプトを工夫しなくても差し支えないと思います。

プロンプトを工夫してChatGPTの出力を制御する手法がありますが、私が普段ChatGPTとペアプログラミングする際には意識していません。思うがままに入力して、期待する出力が得られないのであれば、具体的に変更箇所を指示することで、不自由なく使えています。

テーマ:MediaPipeを使った開発

ChatGPTとのペアプログラミングの例として、MediaPipeというGoogle社が開発した学習済みモデルを使用した画像処理アプリケーションを動かしてみます。

種別 バージョン
モデル ChatGPT-4
Python 3.11
conda conda 22.9.0
開発環境 VSCode

1ターン目

入力したプロンプト(1ターン目)
PythonでMediaPipeを使ったサンプルコードを提供してください。
始めて使用するので依存関係のインストール方法も提示してください。

ChatGPTからの解答(1ターン目)

MediaPipeは、Googleによって開発されたマルチモーダル(音声、ビデオ、時間的メディアなど)での機械学習パイプラインを構築するためのフレームワークです。以下に、PythonでMediaPipeを使ってカメラの映像から顔を検出するサンプルコードとそのセットアップ方法を示します。

1. 依存関係のインストール

まず、MediaPipeを使用するにはPython環境にいくつかのライブラリをインストールする必要があります。以下のコマンドを使用してインストールできます。

pip install mediapipe opencv-python

2. サンプルコード

以下のサンプルコードは、ウェブカメラからの映像を取得し、リアルタイムで顔の検出を行います。

import cv2
import mediapipe as mp

# MediaPipeの顔検出モデルを初期化
mp_face_detection = mp.solutions.face_detection
mp_drawing = mp.solutions.drawing_utils

# カメラの映像を取得
cap = cv2.VideoCapture(0)

with mp_face_detection.FaceDetection(
    model_selection=0, min_detection_confidence=0.5) as face_detection:

    while cap.isOpened():
        success, image = cap.read()
        if not success:
            continue

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

        # 画像から顔を検出
        results = face_detection.process(image)

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

        # 検出結果の描画
        if results.detections:
            for detection in results.detections:
                mp_drawing.draw_detection(image, detection)

        # 結果を画面に表示
        cv2.imshow('MediaPipe Face Detection', image)
        if cv2.waitKey(5) & 0xFF == 27:
            break

cap.release()
cv2.destroyAllWindows()

このコードでは、MediaPipeの顔検出機能を使って、リアルタイムでカメラ映像から顔を検出し、それを画面に表示します。ウィンドウを閉じるには、ESCキーを押してください。

これで基本的なセットアップとサンプルコードの説明は完了です。何か他に知りたいことがあれば、お知らせください。

動作確認(1ターン目)

VScodeにコピペして、Python仮想環境をMediaPipeとOpenCVをインストールした環境に切り替えることで、カメラが起動してフェイストラッキングしてくれることを確認できました。

image.png

image.png

2ターン目

将来的に、ハンドジェスチャーでマウスをコントロール(Apple Vision Proみたいに)したいので、異なるサンプルコードを書いてもらうことにしました。

入力したプロンプト(2ターン目)
手を認識するサンプルコードはありますか?

ChatGPTからの解答(2ターン目)

もちろんです。MediaPipeを使用して手の検出を行うサンプルコードを以下に示します。このコードはウェブカメラからの映像をリアルタイムで処理し、検出された手のランドマークを描画します。

サンプルコード

import cv2
import mediapipe as mp

# MediaPipeの手検出モデルを初期化
mp_hands = mp.solutions.hands
mp_drawing = mp.solutions.drawing_utils

# カメラの映像を取得
cap = cv2.VideoCapture(0)

with mp_hands.Hands(
    min_detection_confidence=0.5, min_tracking_confidence=0.5) as hands:

    while cap.isOpened():
        success, image = cap.read()
        if not success:
            continue

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

        # MediaPipeによる処理
        image.flags.writeable = False
        results = hands.process(image)

        # 画像を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)
        if cv2.waitKey(5) & 0xFF == 27:
            break

cap.release()
cv2.destroyAllWindows()

このコードでは、Hands モデルを使って手の検出とランドマークの追跡を行います。検出された手のランドマークは、画面上にリアルタイムで描画されます。ウィンドウを閉じるには、ESCキーを押してください。

このコードを実行するためには、先ほどと同様に mediapipeopencv-python ライブラリがインストールされている必要があります。もし他に質問があればお知らせください。

動作確認(2ターン目)

今回も要求通りに、ハンドトラッキングするコードを出力してくれました。
これで今後は任意のジェスチャーに対して、特定の機能を追加する見通しが立ちました。

image.png

image.png

OpenCV-Python

OpenCVのインストールが進まないな。と思うときは以下の記事を参考にしてください。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?