OpenAI DevDay で多くの発表があった。
その中の一つに、 GPT に画像を読み込ませてなんらかテキストで応えてもらう GPT-4V の API 利用ができるようになったことがある。
ChatGPT ではできてたことだけど、満を持して API で使えるようになった。
早速それを試す。
インプットする画像
猫が食洗機の中に入り込んだ画像ついて説明してもらう。ファイル名は bad_cat.jpg
コード
まず openai のライブラリをインストールする。すでにインストールしている人はアップデートしたほうがよいかも。
pip install openai
以下はコード。
ポイントは、画像を base64 でエンコードして、その文字列を送る、ということ。
# %%
import base64
from openai import OpenAI
# 画像をbase64にエンコードする関数
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode("utf-8")
# 画像のパス
image_path = "./bad_cat.jpg"
# 画像をbase64にエンコードする
base64_image = encode_image(image_path)
# OpenAI APIのクライアントを作成する.
# YOUR_API_KEYには、OpenAI の API キーを入力する
client = OpenAI(
api_key="YOUR_API_KEY",
)
# チャットの応答を生成する
response = client.chat.completions.create(
# model の名前は gpt-4-vision-previewが使えなくなったので、以下に変更.
model="gpt-4o-mini",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "何が起きてる?"}, # ここに質問を書く
{"type": "image_url", "image_url":{"url": f"data:image/jpeg;base64,{base64_image}"}}, # 画像の指定の仕方がちょい複雑
],
}
],
max_tokens=300,
)
# 応答を表示する
print(response.choices[0])
回答
Choice(finish_reason=None, index=0, message=ChatCompletionMessage(content='写真には食器洗い機の中に入っている猫が映っています。洗うべき食器の代わりに、猫が食器用ラックの中に快適に収まっている様子です。これは家庭において猫が好奇心旺盛で狭い空間に入ることを好む傾向を示す典型的な例です。面白くて可愛らしい瞬間を捉えていますが、もし食器洗い機を使いたい場合は、猫を安全に移動させてから始める必要があります。', role='assistant', function_call=None, tool_calls=None), finish_details={'type': 'stop', 'stop': '<|fim_suffix|>'})
写真には食器洗い機の中に入っている猫が映っています。洗うべき食器の代わりに、猫が食器用ラックの中に快適に収まっている様子です。これは家庭において猫が好奇心旺盛で狭い空間に入ることを好む傾向を示す典型的な例です。面白くて可愛らしい瞬間を捉えていますが、もし食器洗い機を使いたい場合は、猫を安全に移動させてから始める必要があります。
いいね。