gpt-4-vision-preview APIをGradioで使用する[GPT-4V API]

2023年11月24日

コード

import base64
import gradio
import openai
from PIL import Image


openai.api_key = ("YOUR_API_KEY")

# 画像パスを返す
def convert_to_png(image):
    # 画像をPNG形式で保存
    output_path = "./uploaded_image.png"
    image.save(output_path, "PNG")
    return output_path

# 画像をbase64にエンコードする関数
def encode_image_to_base64(image_path):
    with open(image_path, "rb") as image_file:
        return base64.b64encode(image_file.read()).decode("utf-8")


# Gradioアプリと連携する関数
def ask_openai_with_image(image):
    # 画像をbase64にエンコードする
    img = convert_to_png(image)

    base64_image = encode_image_to_base64(img)

    # チャットの応答を生成する
    response = openai.ChatCompletion.create(
        model="gpt-4-vision-preview",
        messages=[
            {
                "role": "user",
                "content": [
                    {"type": "text", "text": "何が起きてる?"},  # ここに質問を書く
                    {"type": "image_url", "image_url": f"data:image/png;base64,{base64_image}"},  # 画像の指定の仕方がちょい複雑
                ],
            }
        ],
        max_tokens=300,
    )
    
    # 応答をテキストで返す
    return response.choices[0].message['content

# Gradioインタフェースの定義
iface = gradio.Interface(
    fn=ask_openai_with_image,
    inputs=gradio.Image(type="pil",label="Upload an Image"),
    outputs="text"
)

# Gradioアプリを起動する
iface.launch(server_name="0.0.0.0")

参考

https://qiita.com/kenji-kondo/items/87e71bf9645338d59ecb