GASでGemini APIのマルチモーダル利用方法!画像とプロンプト同時入力

2023年12月26日

2023年12月13日に公開されたGemini APIによって、現時点でGemini ProのAIモデルをAPI経由で利用可能です。

Gemini APIはテキストのプロンプト入力のみならず、画像も入力できるマルチモーダルに対応しています。

そこでGoogle Apps Script(GAS)でGemini APIの画像とプロンプトを同時に入力するマルチモーダルを実行する方法を解説します。

※すぐにGemini APIのマルチモーダルを実行可能なGASサンプルコード付きです。

Gemini APIはマルチモーダル対応

Googleが2023年12月13日に提供開始したGemini APIは、Gemini Proをプログラミングやローコードで実行することができます。

Gemini APIではテキストのプロンプト入力に加えて、画像入力も可能なマルチモーダル対応です。

Gemini APIで画像とプロンプトをリクエストにセットすると、Gemini Pro Visionのモデルがマルチモーダル対応の応答を返してくれます。

Gemini APIのマルチモーダルによって、画像の識別を依頼したり、画像の一部分にフォーカスして質問などが可能です。

Gemini APIのマルチモーダルを利用することで、AIを活用した様々なアプリケーションの可能性が広がります。

GASでもGemini APIのマルチモーダルがリクエスト可能

Gemini APIのマルチモーダル機能を利用するには、APIリクエストで画像を送る必要があります。

テキストのプロンプトなら簡単ですが、画像ファイルもAPIリクエストで送るのは難易度が高く感じます。

しかし、実際にはGoogle Apps Script(GAS)でもGemini APIのマルチモーダル機能をリクエスト可能です。

GASでGeminiのマルチモーダルをAPI実行するには、APIでPOSTする画像設定がやや複雑になっています。

そこで、GASでGemini APIのマルチモーダルを実行する方法を紹介します。

Gemini APIのAPIキーの発行手順

Gemini APIを利用するにはまずAPIキーを用意する必要があります。

Google AI Studioの場合、Gemini APIのAPIキーは簡単に発行可能です。

下記の記事でGemini APIのAPIキーを発行する方法を解説しています。

Google Apps Script(GAS)のサンプルコードを実行するのに、Gemini APIのKeyは必要不可欠です。

今はGemini APIはGoogleアカウントがあればタダで使えますので、まずAPIキーを準備してください。

※Vertex AIでGemini APIを利用する場合、GCPの認証設定が必要になり複雑なので、Google AI Studioがおすすめです。

GASでGemini APIのプロンプトのみ投稿する方法

Google Apps Script(GAS)でGemini APIにプロンプトを投稿する方法は、前回の記事でサンプルコード付きで解説しています。

単体のプロンプトをGemini APIにリクエストする方法から、過去の会話履歴を含めてAPIを実行して文脈に応じたGemini Proの応答を得る方法まで説明しています。

GASでGemini APIのマルチモーダルを実行するサンプルコード

実際にGoogle Apps Script(GAS)でGemini APIのマルチモーダルを実行する方法をサンプルコードを使って解説します。

まずGASの新しいプロジェクトを開き、プロジェクトの設定からスクリプトプロパティに事前に用意したGemini APIのAPIキーをセットします。

Gemini APIをリクエストできるようスクリプトプロパティの追加でAPIキーを値にセットして保存

※のちのちのGemini APIのマルチモーダル実行のサンプルコードで呼び出すので、設定しないとエラーが発生します。

GASのスクリプトエディタに以下のGemini APIのマルチモーダルをリクエストするサンプルコードを貼り付けます。

function getGeminiApiImage(prompt, image) {
  //スクリプトプロパティからAPIキーを取得
  const apiKey = PropertiesService.getScriptProperties().getProperty('APIKEY');
  //GeminiのAPIのエンドポイントURLを設定
  const apiUrl = `https://generativelanguage.googleapis.com/v1beta/models/gemini-pro-vision:generateContent?key=${apiKey}`;
  //プロンプトに加え、Gemini APIリクエストに必要なペイロードを設定
  const payload = {
    "contents": [{
        "parts": [
          {"text": prompt },
          {
            "inlineData": {
              "mimeType": "image/jpeg",
              "data": Utilities.base64Encode(image.getBytes())
            }
          }
        ]
    }],
  };
  //payloadやHTTP通信種別、認証情報をoptionで設定
  const options = {
    'payload': JSON.stringify(payload),
    'method' : 'POST',
    'muteHttpExceptions': true,
    'contentType':'application/json'
  };
  //Gemini APIにAPIリクエストを送り、結果を変数に格納
  const response = JSON.parse(UrlFetchApp.fetch(apiUrl, options).getContentText()); 
  return response.candidates[0].content.parts[0].text; 
}
Google Apps Script(GAS)でGemini APIのマルチモーダルを実行してテキストプロンプトと画像を入力するサンプルコード

getGeminiApiImageはプロンプトの文字列とblob形式の画像を引数に指定する関数です。

まず、スクリプトプロパティからAPIキーを取得したあと、マルチモーダル入力用のエンドポイントURLを定義しています。

テキストプロンプトの設定は前述した記事と同様ですが、APIリクエストにinlineDataとして画像をセットしています。

画像についてはblob形式ではGemini APIはリクエストできないため、getBytes()でバイト形式に変換したものをBase64でエンコードして設定します。

このgetGeminiApiImage関数にプロンプトと画像を引数指定して実行すれば、Gemini APIのマルチモーダルを実行可能です。

そこで、Googleドライブに格納したお肉の画像データをGemini APIのマルチモーダル入力してみます。

Google Apps Script(GAS)でGemini APIのマルチモーダル実行するため、Googleドライブに格納した画像をマルチモーダル入力用に利用

画像ファイルの右上に「…」をクリックし、「共有>リンクをコピー」してURLにあるファイルIDを取得します。

Googleドライブに格納した画像をGoogle Apps Script(GAS)で読み込むため、ファイルIDをURLから取得

取得したファイルIDからGoogleドライブの画像を読み込み、getGeminiApiImage関数を実行するrunGemini関数を用意しました。

function runGemini(){
  const image = DriveApp.getFileById("画像ID").getBlob();
  console.log(getGeminiApiImage("この画像は何ですか?",image));
}

※画像IDの部分をGoogleドライブの画像のリンクに書かれたIDに書き換えます

runGemini関数をGASスクリプトエディタから実行すると、Gemini APIのマルチモーダル入力した結果が実行ログに出力されます。

Google Apps Script(GAS)で画像が何か質問するプロンプトと画像をGemini APIでマルチモーダル入力した実行結果

Gemini APIから呼び出したGemini Proは画像を認識して何の肉か回答してくれています。

このように上記のサンプルコードを使えば、GASを使ってGemini APIのマルチモーダル実行が可能です。

GAS×Gemini APIのマルチモーダルは色々活用可能

なおGoogle Apps Script(GAS)とGemini APIのマルチモーダルは色々な活用方法があります。

先ほどのお肉の画像についても下記のようにプロンプトを変更すれば、肉のおいしさを判定するAIを作成可能です。

function runGemini(){
  const image = DriveApp.getFileById("画像ID").getBlob();
  console.log(getGeminiApiImage("この牛肉のおいしそうか0~100点で判定して下さい。判定理由も説明をお願いします",image));
}

実際にGASを実行してみると、Gemini APIからお肉のおいしさを判定した点数とその理由の応答が返ってきました。

Google Apps Script(GAS)でGemini APIのマルチモーダルはお肉の画像を送っておいしさを判定するプロンプトをセットすれば、Gemini Proがお肉を判定してくれる活用が可能

このようにGemini Proを画像を評価・判定してもらうAIサービスをGASで作成することができます。

さらにGemini APIでマルチモーダル入力した画像をOCRしたい場合も、英語部分など指定箇所のみ翻訳した結果を返す活用も可能です。

Gemini APIのマルチモーダルは、写真に写った英語部分のみをOCRして翻訳依頼など可能

ポテトチップスのパッケージを撮影した写真をGASでGemini APIにマルチモーダル実行すると、英語部分のみOCRして翻訳した結果がGemini Proより得られます。

function runGemini(){
  const image = DriveApp.getFileById("画像ID").getBlob();
  console.log(getGeminiApiImage("写真に写った英文のみを読み取って日本語に翻訳して下さい。",image));
}
Google Apps Script(GAS)でパッケージ写真で英語部分のみをOCRして翻訳するようGemini APIにマルチモーダル入力した実行結果

Gemini APIのマルチモーダル入力をGASで試せるようになれば、生成AIの活用の幅が広がっていきます。

Gemini APIのマルチモーダル実行時の注意点

なお、Gemini APIのマルチモーダルを実行する際には1つ注意点があります。

Gemini APIにリクエストできる容量は4.0MBが上限となっている点です。

そのため、高解像度の画像をGoogle Apps Script(GAS)などでGemini APIにリクエストするとエラーします。

Gemini APIのリクエストできる容量は4.0MBまでのため、大きい画像をマルチモーダル入力するとエラーが発生

※Gemini APIの容量上限はAPI自体の仕様のため、PythonやGoのプログラミング言語でも発生します。

そのため、Gemini APIにマルチモーダル入力する際は容量の大きい画像は用いないようにしましょう。

Gemini APIにリクエストする前に容量確認して処理を中断するか、サイズを縮小する処理を追加するのがオススメです。

まとめ・終わりに

今回、Gemini APIのマルチモーダル実行をGoogle Apps Script(GAS)で試す方法を紹介しました。

GASでも用意した画像をblob形式からBase64にエンコードすれば、Gemini APIのリクエストが可能です。

Gemini APIにプロンプトと画像をマルチモーダル入力して実行するGASサンプルコードを使って仕組みを解説しました。

Gemini APIのマルチモーダルは画像の識別だけでなく、判定や特定部分のみのOCRなど色々な活用ができます。

ぜひ今回紹介したGASのサンプルコードをベースに、Gemini APIのマルチモーダルを活用してみてください。