Google AI  Gemini APIを使ってマルチモーダルを体験してみた

はじめに
---
OpenAIのChatGPTを皮切りに、生成AIが急速に発展しています。GoogleのGeminiは、その中でも特に注目を集める大規模言語モデルです。Gemini APIは、この強力なモデルをプログラムから利用できるインターフェースを提供し、テキスト生成だけでなく、画像認識など、多様なタスクに対応可能です。本記事では、Gemini APIのマルチモーダル機能に焦点を当て、画像認識の簡単な例を通して、その可能性を探ります。

Google AI Gemini APIとは
---
OpenAIでいうGPTに相当するLLM（大規模言語モデル）として、GoogleのGemini（ジェミナイと呼ぶらしい）というモデルが有名ですが、このGeminiは、インターネットからチャット形式での対話ができる環境が公開されています。

もちろん、この環境でもある程度の機能は使えるのですが、アプリケーションプログラマーとしては、APIをつかって、自分のプログラムから呼び出してみたいという衝動に駆られます。Googleからは、本格的なAI開発基盤である、VertexAIが提供されており、VertexAIの機能を使うには、Vertex AI Gemini APIというAPIを使うことで呼び出しが可能になっていますが、それと並行して、もっと気軽に使うことができる、Google AI Gemini APIというAPIがあります。このAPIを使ってGoogle Colabから呼び出しができる仕組みが提供されているので、そちらを使っていろいろ試してみたいと思います。

Google AI Gemini APIのAPIキーを取得
---
ブラウザより、Google AI Studioの画面を表示します。
https://ai.google.dev/aistudio
画面は結構更新されることがある様ですが、この画面のどこかに、
「Gemini APIキーを取得する」というアイコンがありますので、それをクリックします。
「API キーを取得」画面が表示されますので、その画面の中の「APIキーを作成」ボタンを
押すと、クリップボードにAPIキーがコピーされます。

Google Colabの鍵アイコンをクリックすると、シークレットが表示されるので、
名前：「GOOGLE_API_KEY」、値をクリップボードの値をペーストして、
シークレットを保存します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3822494/06925859-5b09-5230-da74-a1d0ba43fac4.png" width=70%>

Google Colab上でAPIをインストールする
---
Google Colabのノートブックを開き、下記を実行します。
```py:Google Colab
!pip install -q -U google-generativeai
```
続いて、下記を実行して、APIキーを設定します。
```py:Google Colab
from google.colab import userdata
import google.generativeai as genai

GOOGLE_API_KEY = userdata.get('GOOGLE_API_KEY')
genai.configure(api_key=GOOGLE_API_KEY) 
```
次に、利用可能なモデルを確認します。
```py:Google Colab
for m in genai.list_models():
    if "generateContent" in m.supported_generation_methods:
        print(m.name)
```
下記の様に、利用可能なモデルのリストが返されます。
```:Google Colab結果（例）
models/gemini-1.0-pro-latest
models/gemini-1.0-pro
models/gemini-pro
models/gemini-1.0-pro-001
models/gemini-1.0-pro-vision-latest
models/gemini-pro-vision
models/gemini-1.5-pro-latest
models/gemini-1.5-pro-001
models/gemini-1.5-pro-002
models/gemini-1.5-pro
models/gemini-1.5-pro-exp-0801
models/gemini-1.5-pro-exp-0827
models/gemini-1.5-flash-latest
models/gemini-1.5-flash-001
models/gemini-1.5-flash-001-tuning
models/gemini-1.5-flash
models/gemini-1.5-flash-exp-0827
models/gemini-1.5-flash-8b-exp-0827
models/gemini-1.5-flash-8b-exp-0924
models/gemini-1.5-flash-002
```
モデルへの簡単な質問をしてみる
---
さて、いよいよモデルへの接続です。利用可能なモデルの中から選び、下記を実行します。
```py:Google Colab
model = genai.GenerativeModel("models/gemini-1.5-pro")
```
モデルへの接続ができましたので、続いてクエリしてみましょう。
```py:Google Colab
response = model.generate_content("Google Gemini APIとは？")
print(response.text)
```
通常のチャットと同様に、すぐに結果が返ってきます。
```:Google Colab結果出力（例）
Google Gemini API は、Google が開発した大規模言語モデル Gemini を利用したアプリケーションプログラミングインターフェースです。Gemini API を使用すると、開発者は Gemini の高度な言語理解および生成機能をアプリケーションに統合できます。
Gemini API は、次のような機能を提供します。

* テキスト生成
* テキストの要約
* 翻訳
* 質疑応答
* 会話生成
* コード生成
　　　・・・（略）
```
この様に、Google AI Gemini APIを使うと、非常に簡単にAPIを経由した推論が実行できます。

モデルに読み込み画像への質問をしてみる
---
マルチモーダルと題しておりますので、簡単ですが画像についても扱ってみます。
まずは、対象となる画像ファイルを準備しておきます。
Google Colabのフォルダアイコンをクリックすると、フォルダが表示されるので、
「content」直下に準備した画像ファイルをドラッグ＆ドロップします。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3822494/725b1397-4491-ee21-1eb0-6383f19d8a83.png" width=50%>

（上記では、test_img1.jpgをコピーしました）
次に、PILという画像イメージを扱うライブラリを使って、画像を読み込みます。
最後の「image」行で画像を表示します。
```py:Google Colab
import PIL.Image

image = PIL.Image.open("test_img1.jpg")
image
```
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3822494/4208d545-9c61-8aa6-16ee-940ef4b11009.png" width=50%>

先ほど利用したモデルをそのまま使って、質問を行います。

```py:Google Colab
response = model.generate_content([image, "これは何の画像ですか"])
print(response.text)
```
結果は次の通りです。
```:Google Colab結果出力（例）
これは、柴犬のぬいぐるみの画像です。
```
概ね予想通りの回答を返してくれました。

（追記）マルチモーダルのすごいところ
---
この他にも、wavなどの音声データを読み込み、文字起こしや要約を作成することや、mp4等の動画データを読み込み、その動画の要約や、物語であればストーリーをまとめたり、シーンごとに何が描写されているのかを説明してくれたりします。（画像か音声か動画かは自動的に判別してくれます）
それも、基本的に画像の手順と同様に、対象となる音声データや動画をアップロードし、それに対して問い合わせを行うだけです。

まとめ
---
今回は、Google AI Gemini APIを使って、簡単ではありますが、マルチモーダルの初歩的な確認を行いました。
引き続き、もう少し高度な使い方についてもご紹介していきたいと思います。