はじめに
がちもとさんアドベントカレンダー6日目の記事です。
今日は、GPT-4Vを用いて画像を説明するプログラム作りました。
開発環境
- Windows 11 PC
- Python 3.11
画像URLから画像説明
導入
1.ライブラリのインストール
pip install openai
2.APIキーを発行
https://platform.openai.com/api-keys
3.プログラムを作成
gpt4v.py
from openai import OpenAI
client = OpenAI(api_key="<INSERT-YOUR-API-KEY>")
response = client.chat.completions.create(
model="gpt-4-vision-preview",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "何が映っていますか?"}, # "What’s in this image?"
{
"type": "image_url",
"image_url": {
"url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",
},
},
],
}
],
max_tokens=300,
)
print(response.choices[0].message.content)
コード解説
1.OpenAIのAPIキーを使用して、OpenAIのサーバーと通信するためのクライアントを作成します。
2.client.chat.completions.createメソッドを使用して、リクエストを送信します。このリクエストには以下の情報が含まれています:
- model:GPT-4 Visionモデルを指定します。
- messages:ユーザーからのメッセージと画像の情報を含むリストです。ユーザーが「何が映っていますか?」と尋ねており、画像のURLも提供されています。
- max_tokens:応答の最大トークン数を設定します。
3.リクエストを送信し、APIからの応答を受け取ります。
4.最後に、APIからの応答から最初の選択肢のメッセージのコンテンツを表示します。
実行結果
何が映っていますか?
画像 | 説明 |
---|---|
この写真には、緑豊かな草地の中を通る木製の遊歩道が映っています。写真の背景に は青い空と白い雲が広がり、自然の美しさと静けさが感じられます。木製の道は一点 透視図法によって視点が遠くに向かって狭くなっており、遠景に向かう視線を導いて います。遊歩道の両側には野草や低木が生い茂り、手つかずの自然環境を思わせるシ ーンです。 |
画像ファイルから画像説明
導入
gpt4v.py
import base64
import requests
# OpenAI API Key
api_key = "<INSERT-YOUR-API-KEY>"
# Function to encode the image
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode('utf-8')
# Path to your image
image_path = "Gfp-wisconsin-madison-the-nature-boardwalk.jpg"
# Getting the base64 string
base64_image = encode_image(image_path)
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {api_key}"
}
payload = {
"model": "gpt-4-vision-preview",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "何が映っていますか?" # "What’s in this image?"
},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{base64_image}"
}
}
]
}
],
"max_tokens": 300
}
response = requests.post("https://api.openai.com/v1/chat/completions", headers=headers, json=payload)
print(response.json())
実行結果
{
"id": "chatcmpl-8SmT62dsyE0KSu8D1HucgXWPi3zhR",
"object": "chat.completion",
"created": 1701870188,
"model": "gpt-4-1106-vision-preview",
"usage": {
"prompt_tokens": 1120,
"completion_tokens": 135,
"total_tokens": 1255
},
"choices": [
{
"message": {
"role": "assistant",
"content": "この写真は、草原や湿地を通る 木製の遊歩道が映っています。周囲には緑豊かな草が密生しており、背景には数本の 木や遠くに小さい木々の茂ったエリアが見えます。空は晴れており、青空にはいくつ かの雲が浮かんでいます。自然の美しさと穏やかさを感じさせる風景です。"
},
"finish_details": {
"type": "stop",
"stop": "<|fim_suffix|>"
},
"index": 0
}
]
}
複数画像から画像説明
導入
gpt4v.py
from openai import OpenAI
client = OpenAI(api_key="<INSERT-YOUR-API-KEY>")
response = client.chat.completions.create(
model="gpt-4-vision-preview",
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": "何が映っていますか?違いはありますか?", # What are in these images? Is there any difference between them?
},
{
"type": "image_url",
"image_url": {
"url": "https://upload.wikimedia.org/wikipedia/commons/a/af/Golden_retriever_eating_pigs_foot.jpg",
},
},
{
"type": "image_url",
"image_url": {
"url": "https://upload.wikimedia.org/wikipedia/commons/0/08/Cat_Eating_Catgrass.jpg",
},
},
],
}
],
max_tokens=300,
)
print(response.choices[0].message.content)
実行結果
何が映っていますか?違いはありますか?
お疲れさまでした。
参考文献