OpenAIのgpt-4-vision-previewに画像を投げてどんなことをしてくれるのか試してみた



今朝のOpenAI DevDaysで発表されましたが、遂に待望のマルチモーダルAPIが開放されましたね!
個人的にはこれ(↓)ができそうで大変ワクワクしています。

gpt-4-vision-previewについて知る

  • 捉え方としては「GPT-4が視覚を持つようになったもの」なのでテキストタスクも引き続きGPT-4と同等の精度で扱える

  • URLでもBase64エンコードした画像のどちらでもOK

  • png jpeg webp git(アニメーション無しのものに限る)を受け付けている

特性

Limitationsの欄に、どんな画像が苦手なのかが書いてありますね。

  • 日本語や韓国語などの非ラテンアルファベットテキストは苦手

  • チェスの盤面など正確な空間定位が必要なタスクは苦手

  • 上下逆さまの画像は誤って解釈される可能性がある

  • 特定の状況(?)で誤った説明やキャプションを生成することがある

  • APIにCAPTCHA画像を投げてもシステムによってリジェクトされる

など。
それでも、「画像を解釈して文字にする」という能力に誰もが触れるようになったのはたいへん力強いと思います。


色々遊んでみた

実験に使ったコード

さくっと試したかったのでJavascriptで書いてみました。

const OpenAI = require('openai');

const openai = new OpenAI({
  apiKey: 'APIキーはここに書く', 
});


async function main(){

  const prompt = "プロンプト";
  const imageUrl = "画像URL";

  const startTime = Date.now(); // 開始時間
  
  const chatCompletion = await openai.chat.completions.create({
    messages: [{ role: 'user', content: [
      {"type": "text", "text": prompt},
      {
          "type": "image_url",
          "image_url": imageUrl,
      },
    ] }],
    model: "gpt-4-vision-preview",
    max_tokens: 2000,
  });

  const endTime = Date.now(); // 終了時間

  console.log("実行時間(ms):" + (endTime - startTime) + "ms\n返答:\n" + chatCompletion.choices[0].message.content);
}

main();

このコードに対してpromptと画像URLをいくつか入れ替えてどんな感じで返答を返してくれるのか試したものを以下に書いていこうと思います。


これは何の画像?

自作の画像

Prompt:
What's in this image? answer in japanese and 3 lines.
(この画像には何が写っていますか? 日本語と3行で答えてください。)

APIからのレスポンスメッセージ:
この画像には、踊っているアニメ風の女性キャラクターが描かれています。
背景には、緑色の光を放つライトがたくさん並んでいて、ステージのようです。
キャラクターは、歌っているかパフォーマンスをしている姿が表現されています。

実行時間(ms):
3592ms

内容もちゃんと解釈できてるし、実行速度もそれなりに早いしで良いですね!


この状況で気をつけるべきことは何?

コミケの写真

Prompt:
List the top three things to watch out for in this situation.
(この状況で気をつけるべきことについて、上位3つを列挙してください。)

APIからのレスポンスメッセージ(日本語訳):
写真のような混雑したイベントでは、安全と快適な体験のために気をつけなければならないことがいくつかある:

  1. 身の安全: このような混雑では、つまずいたり、転んだり、他の人にぶつかったりして、自分自身や他の人が怪我をしないように、歩く場所に気を配ることが大切です。こぼれた液体、落下物、凸凹のある床面など、床に潜在的な危険がないか目を光らせてください。

  2. 群衆管理: このような混雑した空間では、群衆が押し寄せたり、パニックに陥ったりする危険性が常にあり、危険な状況につながる可能性があります。最寄りの出口を確認し、すぐに退出できるように計画を立ててください。イベントスタッフの指示に従ってください。

  3. 所持品: 混雑した場所では、紛失や盗難を防ぐため、持ち物をしっかり管理することが重要です。バッグはファスナーで開閉できるものを使用し、目の前や常に手に取れる場所に置いておきましょう。特にスリには十分注意してください。

イベント主催者から特別な案内やルールがある場合は、それに従い、常に周囲に気を配ることを忘れずに。

実行時間(ms):
6250ms

やはり、画像から状況や写っているものの属性を抜き出して、それに対して論じるのは得意そうな予感がします。
偶然かもしれませんが、これが「イベント」ってわかってるのは面白いですね。


NSFW画像

(画像は省略します)

Prompt:
What's in this image? answer in japanese and 3 lines.

APIからのレスポンスメッセージ:
(エラーが返ってきました。引き続きNSFWはダメみたいですね)

エラーメッセージ

実行時間(ms):
-

まぁこれは仕方ないですね。

見方を変えてみると、NSFW判定をする便利なAPIとして使えてしまうのか?と思ったけど、そういう使い方してBANされたら嫌なので自分はやりません…。


サイゼリヤの間違い探し

引用:https://www.saizeriya.co.jp/entertainment/2212.html

Prompt:
This is a mistake-finding image. Please find as much as possible where the difference is between the left and right images.
(これは間違い探しの画像です。左と右の画像で差分がどこにあるのか可能な限り見つけてください。)

APIからのレスポンスメッセージ(日本語訳):

  1. 左側の画像の窓の外にある雪だるまが、右側にはありません。

  2. 左側の画像の壁に掛かっている絵には、緑色の車が2台ありますが、右側の画像では1台になっています。

  3. 左側の画像の一番前に座っている赤い服の子供のスパゲッティにはフォークが刺さっていますが、右側の画像ではフォークがなくなっています。

  4. 左側の画像にはピンクの服を着た子供が右手でピースサインをしていますが、右側では親指を立てています。

  5. 左側の画像では、テーブル上のサラダの器には一つにレモンがふたつありますが、右側の画像ではレモンが一つだけになっています。

  6. 左側の画像の壁に掛けられた服の色が赤と青ですが、右側では赤と緑に変わっています。

  7. 左側の画像のテーブルの上のチーズボトルのラベルの色が緑ですが、右側の画像では赤に変わっています。

  8. 左側の画像のテーブルにある水色のボトルが右側の画像ではなくなっています。

実行時間(ms):
9623ms

えっ、凄い!と思ったけど、1以外は全部不正解です。
やっぱりLimitationsの項目にあったように、ものがどこにあるのかという正確な把握は難しいみたいですね。


この料理はなんですか?

昔新宿で食べた抹茶ぜんざい

Prompt:
What is the name of this dish?
(この料理の名前はなんですか?)

APIからのレスポンスメッセージ(日本語訳):
この料理の名前は「抹茶ぜんざい」です。

実行時間(ms):
2834ms

料理の形状なんて店によって全然違うと思うのですがこれができるなら、全然知らない異国の料理でも答えてくれそうで良いですね!


写真の場所はどこ?

スカイツリーからの風景を撮影した時の画像

Prompt:
Where is the location in this picture?
(この写真に写っている場所はどこですか?)

APIからのレスポンスメッセージ(日本語訳):
これは東京の風景である。地平線まで広がる広大な街並みと無数の光、そして市街地を蛇行する川は、東京の密集した広大な大都会の特徴である。また、この画像は夕日をとらえていることから、東京の超高層ビルや展望台、おそらく東京スカイツリーなどの高い建物から撮影されたものと思われる。

実行時間(ms):
3980ms

そこまで当てますか?ってくらい当ててきて怖い。撮影した場所まで当てるな!
ただ、有名所以外の場所で撮影した画像だと、ここまでの精度は出ないことがわかりました。

以下の画像でやってみると…

秋葉原のとあるホテルでワーケーションした時の写真

「画像の情報だけでは正確な場所を特定することはできない。しかし、建物、看板、一般的な都市配置の状況や外観から、この写真が日本国内の人口密度の高い都市で撮影されたことは推測できる。看板には日本語の文字と日本で営業していることがわかるブランドが含まれており、この場所が日本の都市の商業地区である可能性が高いことを示唆している。」

ということで、ある程度の推定はしてくれるが特定のポイントをピンポイントで当ててくるわけではないということがわかる。
(それでも凄いけど…)


キャラクターの名前を教えて

引用:https://ascii.jp/elem/000/004/009/4009983/

Prompt:
What are the names of all the characters in this image?
(この画像には写っているキャラクターの名前を全て教えてください。)

APIからのレスポンスメッセージ(日本語訳):
画像に写っているのは、「ボーカロイド」シリーズおよび関連メディアのキャラクターたち。左から

  1. MEIKO

  2. 巡音ルカ

  3. 初音ミク

  4. 鏡音リン

  5. 鏡音レン

  6. KAITO

これらのキャラクターは、ソフトウェアによって合成された声を持つバーチャル・シンガーとして、音楽界で人気を博している。

実行時間(ms):
4643ms

完璧ですね。

ただ、一方でVTuberなどの他のキャラクターの画像を渡してみると「 identifying real or fictional individuals by name in images, including virtual characters like these, falls outside of my capabilities. (このようなバーチャル・キャラクターを含め、映像の中で実在の人物や架空の人物の名前を特定することは、私の能力の範囲外である。)」と言われてしまいます。

この反応の差がどこで出てしまうのかはちょっと判断に困るところですね。


終わりに

依然として出力されたものが真に正しいのかは最終的に人間が判断することにはなりますが、個人的には十分な速度で十分な解釈が行われている用に感じます。

これまで同様AIに対して知識を問うのではなく、写っているものの属性を解釈するというシチュエーションではうまく作用しますし、それをふまえて論じさせるのはOpenAIが一番想定してる使い方な気がします。
なのでこの方向性でLimitationsに注意しながらこれを活用すると上手く扱えそうですね。

(冒頭で書いたような「きれいな海ですね~」は実現できそうで良かった!)

あと、試していた印象として、Promptを英語で渡すと推論能力が上がってる気がします。
元々テキストでのやり取りも英語で対話すると日本語よりも回答の精度があがることは経験則としてありましたが、画像も同様なんでしょうか?


以上です。
お読みいただきましてありがとうございました!

この記事が気に入ったらサポートをしてみませんか?