2023年11月6日のOpenAI DevDaysにおいてOpenAIの新しい発表があった。どれも面白い。どれも使うのが簡単だが、Assistant APIとGPT-4 with VisionのAPIだけ少し複雑だ。
ここではGPT-4 with Visionをpythonスクリプトから叩くサンプルコードをおいておく。OpenAIの公式にはpythonでローカルファイルをアップロードする方法がpython完結するものが書いてなかった。
GPT-4 with Vision
ローカルに置いた画像ファイルはBase64形式でエンコードしてURLに入れ込むとそれでアップロードされる。
ちなみに、OpenAIによるとファイル形式はPNG (.png)、JPEG (.jpeg および .jpg)、WEBP (.webp)、および非アニメーション GIF (.gif)対応。サイズ制限は20MB。アップロードした画像は自動的に学習には使われず自動的に削除されるとのこと。
例えば、画像処理で有名なLennaさんの画像ファイルを同じフォルダでLenna.pngと置いておいて以下のスクリプトでGPT4から返答が来る。
実運用にはエラー処理など必要だが、ここでは最小限のコードにしている。
import base64
from pathlib import Path
from openai import OpenAI
from dotenv import load_dotenv
load_dotenv()
client = OpenAI()
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode('utf-8')
image_path = "Lenna.png"
base64_image = encode_image(image_path)
file_extension = Path(image_path).suffix
file_extension_without_dot = file_extension[1:]
url = f"data:image/{file_extension_without_dot};base64,{base64_image}"
response = client.chat.completions.create(
model="gpt-4-vision-preview",
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": "この画像の女性の名前はLennaです。なぜか有名らしいですが、なぜでしょう?",
},
{
"type": "image_url",
"image_url": {
"url": url,
},
},
],
}
],
max_tokens=1000,
)
print(response.choices[0].message.content)
ちなみに、.pyファイルと同じ場所に.envファイルを置いておき、中身にOpenAIのAPIキーを書いておくのを忘れないこと
OPENAI_API_KEY = "sk-~~~"
とても楽しい。
過去記事