LoginSignup
30
24

GPT-4Vを使ってゲーム実況させる

Posted at

はじめに

GPT-4Vを使ってゲーム実況をさせてみます。
この記事はLLM Advent Calendar 2023の12月14日のアドベントカレンダー記事となります。

解説

以下のようなゲーム実況スクリプトを自動で作成できる状態が、この記事のゴールです。

コード

と言っても、コード自体は数10行で、以下の通り簡単に実装できます。

from IPython.display import display, Image
import base64
import cv2
import openai
import requests
import tempfile
import time

with tempfile.NamedTemporaryFile(suffix=".mp4") as f:
    with open(f.name, "wb") as f2:
        f2.write(requests.get("https://raw.githubusercontent.com/takaaki-inada/rinna-4b-multimodal-hello-aituber/main/mock_sample.mp4").content)

    video = cv2.VideoCapture(f2.name)
    base64Frames = []
    while video.isOpened():
        success, frame = video.read()
        if not success:
            break
        _, buffer = cv2.imencode(".jpg", frame)
        base64Frames.append(base64.b64encode(buffer).decode("utf-8"))

    video.release()
    print(len(base64Frames), "frames read.")

display_handle = display(None, display_id=True)
for img in base64Frames:
    display_handle.update(Image(data=base64.b64decode(img.encode("utf-8"))))
    time.sleep(0.025)

PROMPT_CONTENT = """
これはゼルダの伝説のゲームプレイ動画です。
お気に入りのゲーム実況をする、超興奮した日本人人気VTuberのスタイルで、ゲームの次の展開を予想しながら短いナレーションスクリプトを作成してください。
ゼルダの伝説の大ファンで、興奮を伝えるために、必要に応じて大文字や感嘆符を使ってください。
"""

PROMPT_MESSAGES = [
    {
        "role": "user",
        "content": [
            PROMPT_CONTENT,
            *map(lambda x: {"image": x}, base64Frames[0::60]),
        ],
    },
]
params = {
    "model": "gpt-4-vision-preview",
    "messages": PROMPT_MESSAGES,
    "api_key": "ここに OpenAI の APIKey をセット",
    "headers": {"Openai-Version": "2020-11-07"},
    "max_tokens": 256,
}

result = openai.ChatCompletion.create(**params)
print(result.choices[0].message.content)

実行にはOpenAIのAPIKeyの発行が必要です。
APIKeyを発行して上記コードにセットして実行すると、こんな感じの実況スクリプトを作成してくれます。

エヴェリボディー、こんにちはー!今日は「ゼルダの伝説 ブレス オブ ザ ワイルド」の冒険を進めていくよー!今、僕たちはなんとか難関を乗り越えて、高い高い山に登ってきたぞ!見てくれ、この絶景!ハイラルの大地がこんなにも広大で美しいなんて、もう感動しちゃうよね!
さてさて、この先にはどんな秘密があるのかな?ここは分かれ道だ!左に行くべきか、右に行くべきか…うーん、迷っちゃうなあ。でもね、この看板を信じてみよう!そうだ、風の向くまま、心のままに行くんだ!

リアルタイムプレイへの適用

ゼルダのプレイ画面で、リアルタイムに過去15秒分のフレームで実況させるとこんな感じになります。

さすがGPT-4Vだけあって、なかなかの状況認識能力を感じさせます。

リアルタイム版の仕組みの記事はこちらです。

おわりに

コードを貼りつけただけの簡単な記事ですみません。どたなかのお役に立てれば幸いです。

30
24
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
30
24