Azure OpenAIでGPT-4 Turbo with Visionが利用可能になったので触ってみた


# ご挨拶と宣伝
こんにちは、京セラコミュニケーションシステム 貫見（[@kccs_haruki-nukumi](https://qiita.com/kccs_haruki-nukumi)）と申します。

弊社のXでは、Qiita投稿に関する情報や各種セミナー情報をお届けしております！
情報収集や学びの場を求める方々にぜひフォローしていただき、最新情報を手に入れてください！

https://x.com/kccs_digital

# はじめに
ついに、**GPT-4 Turbo with Vision**(以下、GPT-4V)がAzure OpenAI Serviceで利用可能（パブリックプレビュー）になりました！

https://techcommunity.microsoft.com/t5/ai-azure-ai-services-blog/gpt-4-turbo-with-vision-is-now-available-on-azure-openai-service/ba-p/4008456

さらに、GPT-4VとAzure AI Servicesを組み合わせることで、
より強力な機能が利用できるみたいなので、併せて試してみようと思います。
- Optical Character Recognition (OCR)
- Object grounding
- Video prompts

:::note warn
- 本稿は **2023/12/19時点** の情報をもとに記載しています。
:::

# GPT-4Vってなに？
- OpenAI によって開発された [大規模マルチモーダルモデル (LMM)](http://export.arxiv.org/abs/2309.17421) のひとつで、
- GPT-4やGPT-3.5と違い、テキスト(文章)だけでなく画像も理解することができ、
- 文章を読んだり書いたりするだけでなく、画像を見てその内容を理解したり、説明したりすることが可能なAIモデルです。


:::note info
**LMM（大規模マルチモーダルモデル）とは：**
テキストや画像、動画、音声など複数種類の情報を処理できるAIモデルを指します。
例えば、画像からテキストを生成したり、逆にテキストから画像を生成したりなど、種類の異なる情報も一緒に処理・生成が可能です。
:::

参考：
- [Microsoft - GPT-4 Turbo with Vision on Azure OpenAI Service](https://techcommunity.microsoft.com/t5/ai-azure-ai-services-blog/gpt-4-turbo-with-vision-on-azure-openai-service/ba-p/3979933)
- [Microsoft - GPT-4 および GPT-4 Turbo プレビュー モデル](https://learn.microsoft.com/ja-jp/azure/ai-services/openai/concepts/models#gpt-4-and-gpt-4-turbo-preview-models)

# 注意点
- Azure OpenAI ServiceのGPT-4Vは**一部リージョンでのみ利用可能**です。
本稿執筆時点で利用可能なリージョンは以下の4つです。
    - Australia East（オーストラリア東部）
    - Sweden Central（スウェーデン中部）
    - Switzerland North（スイス北部）
    - West US（米国西部）
- Azure OpenAI Serviceの利用には[**事前申請**](https://customervoice.microsoft.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR7en2Ais5pxKtso_Pz4b1_xUNTZBNzRKNlVQSFhZMU9aV09EVzYxWFdORCQlQCN0PWcu)が必要です。

# 準備(リソース作成)
まずは下準備として、Azure Portalからリソース作成とモデルデプロイを実施します。
※ AzureCLIやPowerShellを用いて実施したい方は[こちら](https://learn.microsoft.com/ja-jp/azure/ai-services/openai/how-to/create-resource?pivots=cli)を参考にしてください。

### 1. リソースグループ作成
まずはリソースグループを作成します。 
![1_リソースグループ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974422/6f42757c-4d91-f2d0-0ec1-65c896fcba8d.png)
<font color="gray">※ 詳細な手順は[こちら](https://learn.microsoft.com/ja-jp/azure/azure-resource-manager/management/manage-resource-groups-portal)を参考にしてください。
</font>

### 2. リソース作成&モデルデプロイ -Azure OpenAI Service
次にAzure OpenAIを作成します。
必ず**GPT-4Vが利用可能なリージョン**を選択してください。

![2_AOAI.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974422/64981efd-6f02-8236-dfef-f19d1ab1a905.png)

続いて、作成したAzure OpenAIのリソースにモデルをデプロイします。
[Azure OpenAI Studio](https://oai.azure.com/)にサインインし、以下の通りデプロイを作成します。
![3_AOAI_モデル.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974422/0b188e6d-2375-2ce7-aed3-a46879489e2d.png)
<font color="gray">※ 詳細な手順は[こちら](https://learn.microsoft.com/ja-jp/azure/ai-services/openai/how-to/create-resource?pivots=web-portal)を参考にしてください。
</font>
もし、↓のようなエラーが発生した場合は、
[詳細設定オプション] > [1 分あたりのトークンレート制限 (数千)]の値を変更してください。
```
The specified capacity '0' of account deployment should be at least 1 and no more than 10000.
```
### 3. (任意)リソース作成 - Azure AI Services(Computer Vision)
最後にComputer Visionを作成します。
なお、この手順は後述する「Vision Enhancement機能」を試したい場合のみ必要です。
![4_ComputerVision.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974422/e8b5e2f3-bbf0-807a-273d-8e70932f1728.png)

これで準備は完了です！リソースグループが以下のような状態になっているはずです。
![5_完了.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974422/9e2bf61b-8a14-5054-b246-c3f2028320c9.png)

# 試してみる

### GPT-4V
まずは、[こちら](https://techcommunity.microsoft.com/t5/ai-azure-ai-services-blog/gpt-4-turbo-with-vision-is-now-available-on-azure-openai-service/ba-p/4008456)で公開されているシステムプロンプトの例と共に、いくつかの画像を与えてみてどのような結果が得られるか試してみます。

今回は手軽に試したいので、Azure OpenAI Studioのチャットプレイグラウンド機能を使いますが、REST APIを使って試したい方は↓こちらが参考になると思います。

https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/gpt-with-vision#use-vision-enhancement-with-images


#### ① 画像を説明してもらう
まずは、以下のプロンプトを[アシスタントのセットアップ]→[システム メッセージ]に設定して、画像について詳細に説明してもらいます。
```:プロンプト①
As an AI assistant, provide a clear, detailed sentence describing the content depicted in this image.
訳)AI アシスタントとして、この画像に描かれている内容を説明する明確で詳細な文を提供してください。
```
ちなみに、使用する画像は私のスマホからいくつかピックアップしてきました。

##### ①-1 購入用のメモとして撮影した写真　(IKEAにて撮影)
![input_1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974422/6a5541f4-a740-5ad8-a1c3-8fc06dc64e18.jpeg)
[^*1]
[^*1]:本ブログに掲載されているIKEAの値札の写真は、検証目的での使用を意図しており、著作権や商標権を侵害する意図はありません。すべての商標はそれぞれの所有者に帰属します。
また、掲載されている価格や商品情報は　撮影時点(2020年)のものであり、現在の価格や商品情報と異なる可能性があることをご了承ください。IKEAの最新の商品情報については、公式ウェブサイトをご参照いただくか、最寄りのIKEA店舗に直接お問い合わせください。


**↓結果**
![6_結果①(1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974422/d86ae189-571a-a5cf-dc2d-0fe982490b49.png)

```:結果(DeepLにて翻訳)
画像は、IKEAのLINNMONという商品の一連の同じラベルである。
各ラベルには英語と日本語の情報が記載されており、商品のサイズは150x75cm、価格は3,999円と表示されている。
価格の下には、在庫や識別のための固有のバーコードと番号列がある。
各ラベルの下部の赤い部分には、在庫番号か日付コードと思われる異なる数字が並んでいる。
```
おー、画像内の主要な情報である、商品名・金額や商品サイズだけでなく、
これが商品のラベルであることや、ラベル下の管理用項目まで正しく説明してくれました。
改めて、アノテーションやモデル学習の手間なしでこのレベルのタスクが実行できる素晴らしさを実感します。



##### ①-2 展示スペースの立体造形や植栽に感動して撮影した写真　(よこはま動物園ズーラシアにて撮影)
![input_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974422/5db948f6-a2f9-f4b8-9425-b3a942bb6738.jpeg)

**↓結果**
![7_結果①(2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974422/9c0c366b-769b-f216-71ea-b75574515a1a.png)
```:結果(DeepLにて翻訳)
この画像は、動物園か野生動物保護区の中にあるような生息地にいるホッキョクグマを示している。
この環境は、岩、水域、植生など、自然条件を模倣して設計されている。画像には反射があり、
このような大型動物を安全に観察するために動物園で一般的なガラス障壁の後ろから撮影されたことを示唆している。
```
**え、すごい。**
結果をみてハッとしたのですが、たしかにこの画像は動物園で撮ったものなんです。
でも、もちろんそんなことをプロンプトには含めていません。
画像上の僅かな反射や汚れから、ガラス障壁の後ろから撮ったことを推測していて、
ほぼ100点といっていいほど、指示通り明確で詳細に説明してくれました。

---
#### ② 画像に含まれる要素に関するタグを列挙してもらう
次に、以下のプロンプトを[アシスタントのセットアップ]→[システム メッセージ]に設定します。 
```:プロンプト②
Identify and list prevalent tags associated with the content of this image.
訳)この画像のコンテンツに関連するタグを特定し、一覧表示する。
```
##### ②-1 光と影がきれいで撮った写真　(横浜山手西洋館にて撮影)
![input_3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974422/83a229ea-3c52-8d49-677b-67a1f8b31c16.jpeg)

**↓結果**
![8_結果②(1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974422/d196839e-5afe-1d84-5233-44eb633617c5.png)

```:結果(DeepLにて翻訳)
・ テーブルセッティング
・ ダイニングテーブル
・ 食器類
・ ガラス食器
・ フラワーセンターピース
・ フルーツデコレーション
・ テーブルクロス
・ エレガントな装飾
・ プレースセッティング
・ おもてなし
・ ホームデコレーション
・ ファインチャイナ
・ クリスタルグラス
・ 織物プレースマット
・ 生花
・ リンゴと洋ナシ
・ 豪華なダイニング
・ お祝いのテーブル
・ 柄皿
```
うーむ、やっぱりすごい。
「プレースセッティング」や「ファインチャイナ」など私も知らなかった<font color="gray">(ボキャブラリーがないだけかも...)</font>単語が挙がっています。さらに、単純に写っている"モノ"を列挙するだけでなく、そこから発展して「おもてなし(Entertaining)」が挙がっている点、すごくないですか？


### GPT-4V+Azure AI Services (Vision Enhancement機能)

次に、Azure OpenAI独自機能であるVision Enhancement機能を試します。
冒頭にも述べた通り、Azure AI Servicesとの組み合わせによってGPT-4Vの機能を拡張することができます。

なお本機能を使うためには、Computer Visionリソースの作成と割り当て後に有効化が必要です。
![9_VisionEnhance.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974422/85a38d01-c2d4-3f86-199b-11645d6d3043.gif)
<font color="gray">Computer Visionリソース割り当てはチャットプレイグラウンドから設定可能です。</font>


#### Optical Character Recognition (OCR)
せっかくなので手書き文字をOCRしてもらおうと思います。
たまたま手元にあった申込書フォーマットに、適当な内容を記入してスキャンした画像を入力しました。Vision Enhancementあり/なしでどれだけ精度に違いがあるかも気になるのでそれぞれ実施して比較しています。

**↓結果**
![10_OCR比較.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974422/f3b2ae25-b740-3fca-324a-ebd9724b3e5d.png)
```:結果(Vision Enhancementあり)
This is an application form written in Japanese. The form appears to be for the rental or purchase of a "留袖" (tomesode), which is a type of formal kimono for married women, often worn for weddings by family members of the bride and groom.

The form includes fields for:
The date of the ceremony: 2023年 (year) 12月 (month) 19日 (day) (火) which indicates a Tuesday.
The names of both families involved in the ceremony, with the names of the bridegroom and bride provided. The groom is 買見 晴樹 (Haruki Kaimi) and the bride is 田中 花子 (Hanako Tanaka), with their respective furigana (phonetic readings) provided.
The name of the user (presumably the person filling out the form) is 鈴木 花子 (Hanako Suzuki).
Contact information including a phone number: 090 (0000) 0000.
A mailing address for correspondence: 〒108-8605 東京都港区三田3-5-19 三田ガーデンタワー (Mita Garden Tower, 3-5-19 Mita, Minato-ku, Tokyo, postal code 108-8605).
Details regarding the tomesode set accessories which include a long undergarment (長襦袢), an obi (帯), an obi pad (帯揚), and an obi cord (帯締).
The size requested for the items is 190 cm / 27号, with a note explaining the sizes: M寸 is up to size 11号, L寸 is for sizes 13号 to 15号, and LL寸 is for sizes 15号 to 17号. There is also a note that other sizes can be discussed.

The text is partially occluded in the image, but the provided OCR text helps confirm the details filled in the form.

(DeepLにて翻訳）
日本語で書かれた申込書。留袖は既婚女性用の着物の一種で、新郎新婦の家族が結婚式で着ることが多い。

フォームには以下の項目がある：
式の日付：2023年（年）12月（月）19日（日）（火）は火曜日を示す。
挙式に関わる両家の名前、新郎と新婦の名前。新郎は「見晴樹」（かいみはるき）、新婦は「田中花子」（たなかはなこ）で、それぞれのふりがなも記されている。
利用者（おそらく記入者）の名前は鈴木花子（鈴木花子）。
電話番号を含む連絡先：090（0000）0000。
連絡用の住所： 〒108-8605 東京都港区三田3-5-19 三田ガーデンタワー（〒108-8605 東京都港区三田3-5-19 三田ガーデンタワー）。
長襦袢、帯、帯揚げ、帯締めの留袖セット小物の詳細です。
希望サイズは190cm/27号で、サイズの説明書きがある： M寸は11号まで、L寸は13号から15号まで、LL寸は15号から17号まで。他のサイズも相談に応じるとの注釈もある。

画像では文字が一部隠れてしまっているが、OCRテキストで記入内容を確認することができる。
```

```:結果(Vision Enhancementなし)
Here is the extracted text from the image:
 
受付日 2023年 1月 19日(火)

患者氏名 穂積　春樹　　新橋　百中花子　様

ご連絡先 090 (0000) 0000

連絡先緊急先住所 〒108-8605　東京都港区三田 3-5-19 ミロカツデンタル
 
Please note that due to the handwritten nature of some parts of the document, there may be inaccuracies in the text.
```
一目瞭然です、Vision Enhancementありの圧勝です。
Vision Enhancementありは、手書き且つ日本語の文字を正しく認識できているだけでなく、
希望サイズなどフォーマット内に明記されていない項目も、文脈を読んで補完しています。
>希望サイズは190cm/27号

唯一 私の名字のみ正しく認識してくれなかったのは少し残念ですが、
このレベルであればアプリケーション側の工夫でカバー可能だと感じました。

#### Object grounding
ざっくり説明すると次のような機能です。
　・画像内の主要なオブジェクトを識別して強調表示し、
　・描画結果を紐づけた応答を生成する。

百聞は一見にしかず、と言いますので[②-1](#-1-光と影がきれいで撮った写真横浜山手西洋館にて撮影)で使用した写真を入力してみます。

![11_ObjectGrounding.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974422/bbefaf39-b4a9-17b8-17a0-103e42dabcb2.gif)
生成された文章と画像内のオブジェクトが紐付けられていることがわかると思います。


#### Video prompts
プロンプトに基づいてビデオから最も関連性の高いフレームを使用して質問に回答が得られるとのことです。手元に良さそうな動画が無かったので、大阪旅行時に撮影したタイムラプス動画を入力しています。
![12_Movie.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974422/60b3cb23-45e8-2f9a-9a2e-f005975b5954.png)

```:結果(DeepLにて翻訳)
この映画は、多数の建物、道路、スタジアムがある人口密度の高い都市部を空撮したもののようです。 
タイムスタンプ 00:00:00 から 00:00:03 までの画像にはほとんど変化が見られず、
ビデオが静止画であるか、これらのフレーム内の動きが最小限であることを示しています。 
舞台は昼間の近代都市のようです。
```
動画自体かなり短いですが、正しく特徴を理解できていると思います。

# まとめ
今回は12/14にパブリックプレビューになったAzure OpenAI ServiceのGPT-4 Turbo with Vision（GPT-4V）を利用してみました！

GPT-4Vは、テキストだけでなく画像も理解できる大規模マルチモーダルモデル (LMM)であり、画像の内容を説明したり、タグを列挙したりできます。さらに、Azure AI Servicesと組み合わせることで、OCRやObject grounding機能の利用や、動画を入力することができ、よりAzure上で利用するメリットが増えたと感じます。

私自身実際に触ってみて、GPT-4V、Vision Enhancement機能共に非常に便利であると感じました。今後 弊社内やサービスでどのように活用できるかを想像しながら、最新動向を追っていきたいと思います。

# 宣伝
弊社Xでは、Qiita投稿に関する情報や各種セミナー情報をお届けしております。
情報収集や学びの場を求める皆さん！ぜひフォローしていただき、最新情報を手に入れてください😄

https://x.com/kccs_digital


# 参考文献
https://learn.microsoft.com/en-us/azure/ai-services/openai/gpt-v-quickstart?tabs=image&pivots=programming-language-studio

https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/gpt-with-vision

# 他にもこんな記事かいています

https://qiita.com/kccs_haruki-nukumi/items/08572d3b1e7e98473d84

https://qiita.com/kccs_haruki-nukumi/items/2806873d78992ff2d958