高橋かずひとのプログラミング、その他、備忘録。

日々調べてたことや、作ってみたものをメモしているブログ。 お決まりの断り文句ですが、このブログに書かれている内容は個人の見解であり、所属する組織の公式見解ではありません。チラ裏。

gpt-4-vision-preview をお試し👻

GPT4-VのAPIが解放されたため試してみています👀

手軽に高性能なVLMが扱えるのは良いですね。

 

API化されたことによって、システムからもサクッと使えるようになりました。

とりあえず仕事用のAWSのLambdaから呼んで、定期監視を構築してみました(お仕事関係なのでココに結果は載せれませんが)

 

今回お試しで書いたスクリプト(2個目の事例のやつ)は以下です。

システムロールの設定もちゃんと有効に動きますね。

import base64
import requests

import cv2

# OpenAI API Key
api_key = "【OpenAIのAPIキーを設定する】"

image_path = "sample.jpg"

image = cv2.imread(image_path)
_, imencode_image = cv2.imencode('.jpg', image)
base64_image = base64.b64encode(imencode_image)

headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {api_key}"
}

system_text = """
### 指示 ###
画像の内容を理解した上で、出力形式にあわせて回答してください。

### 出力の制約 ###
- 日本語
- 天気は一言でまとめ、分からない場合は一番近いと思われる天気を回答する
- 道路状況は詳細を説明する
- 障害物がない場合は、なしとだけ回答する
- 障害物がある場合は、障害物の名称のみを回答する

### 出力形式 ###
天気:
道路状況:
障害物:
"""

payload = {
    "model":
    "gpt-4-vision-preview",
    "messages": [
        {
            "role": "system",
            "content": system_text
        },
        {
            "role":
            "user",
            "content": [
                {
                    "type": "text",
                    "text": "この画像には何が映っていますか?"
                },
                {
                    "type": "image_url",
                    "image_url": {
                        "url":
                        f"data:image/jpg;base64," +
                        base64_image.decode("ascii")
                    }
                },
            ]
        },
    ],
    "max_tokens":
    300
}

response = requests.post(
    headers=headers,
    json=payload,
)

print(response.json()['choices'][0]['message']['content'])
 
cv2.imshow('gpt-4-vision-preview test', image)
cv2.waitKey(-1)