はじめに
先日の記事では、Gemini API
を利用した画像処理について取り扱いました。しかし、その中の、「File API
を用いた画像のアップロード」の部分を私の勉強不足のせいで触れることができなかったので、今回はまず始めにGCS(Google Cloud Storage)
の概要などについて軽く触れた後に実際に使ってみようと思います。
では、始めていきます。
GCS(Google Cloud Storage)とは?
概要
GCS
は、構造化されていないデータを保存するためのマネージドサービスで、名前の通りGoogle
が提供しています。
保存できるデータの量に制限はなく、保存したデータを必要に応じて何度でも取得できます。
「構造化されていないデータ」とはその名の通り構造定義されていないデータのことを表します。一定の組織化された原則を持たないため、データベース化できず、検索や集計、解析に不向きです。
具体的には、画像・音声ファイルや文書ファイルなどが該当します。
使い方(初回)
まずは、以下のページに行き、Googleアカウントでログインした後、ページ右上の「無料で利用開始」に進みます。
次にユーザー情報と支払い用のクレジットカードの情報を入力します。
File APiの利用にあたって、以下のように公式から説明があります。
File API では、プロジェクトごとに最大 20 GB のファイルを保存できます。ファイルあたりの最大サイズは 2 GB です。ファイルは 48 時間保存されます。この期間中は API キーを使用してアクセスできますが、API からダウンロードすることはできません。Gemini API を利用できるすべてのリージョンで、追加料金なしでご利用いただけます。
登録が終わったら、Google Cloud Console
にアクセスし、左側メニューから「ストレージ」、「バケット」と進んでいき、バケットを作成します。
バケットにはオリジナルの名前をつけることが可能ですが、グローバルに一意(他人とかぶってはいけない)などの規則があります。詳しくは以下のページを参照してください。
また、バケット作成時にリージョン(データを保存する物理的な場所)やストレージクラス(保存タイプ)などを選択します。これは各自の必要に応じて選択してください。
今回、私はデフォルトの設定のまま進みました。
最後に、作成したバケットのページから任意のファイルなどをアップロードします。
これでアップロードは完了しました。
つかってみる
今回は冒頭で述べたようにGemini API
に、GCS
でアップロードしたファイルを読み込ませていきます。なお、用いたファイルは前回に引き続いて以下のスクリーンショットです。
本来、この方法はGemini API
にアップロードするファイルのサイズが大きい(20Mb以上)の場合に用いる手段であるので、今回のように小さなデータの場合はこの方法を採用する必要はありません。
実行の前に、Gemini API
が画像を参照できるようにするため、バケットから「権限」のページに移り、公開アクセスを許可しておきます。そして、「プリンシパルの追加」からallUsers
を入力します。
これで、準備は一通り完了したと思います。では、コードを書いていきましょう。
import google.generativeai as genai
genai.configure(api_key="(ここにAPIキーを入力)")
image_url = f"https://storage.googleapis.com/(作成したバケット名)/(アップロードしたファイル名)"
model = genai.GenerativeModel("gemini-1.5-flash")
prompt = "この画像の内容を詳しく説明してください。"
response = model.generate_content([image_url, "\n\n", prompt])
print(f"Result: {response.text}")
すると、以下のように返ってきました。
Result: 画像には、スマートフォン画面と思われるものが写っており、日本語で書かれた複数のメッセージが表示されています。メッセ ージの内容は特定できませんが、会話の一部であると推測されます。画面上部には時刻表示のようなものも確認できます。
ここで、レスポンスは来るのにその内容があまり適切でない場合は先ほど紹介した画像の公開設定などに問題があると考えられます。
おわりに
今回はGCS
とGemini API
を用いて画像処理を行ってみました。
何回もつまづきながらの実行だったので、もしかすると誤った情報も含まれているかもしれません。その点は申し訳ないです。
あと、感じたのはレスポンスの内容が間違ってはないが直接画像をアップロードしたときの方が精度が高かったということです。途中で述べたようにこれは大容量ファイルを用いる際の方法なのでなんとなくデータ不足?によるものかなと思いましたが、これまた確証です。余裕があるときに調べてみようと思います。
では、今回の記事はこれで終わりです。最後までお読みいただきありがとうございました。
参考