6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RCC (立命館コンピュータークラブ)Advent Calendar 2024

Day 23

【Python】Gemini APIに画像を読みこませてみる

Last updated at Posted at 2024-12-22

はじめに

先日の記事ではGemini APIを利用したテキスト生成について紹介しました。
それに引き続き、今回は画像を読み込ませて、何らかの簡単な処理を行う方法をまとめてみました。
なお、Gemini APIを利用するにあたり始めに行うキーの取得などは前回の記事にまとめたので、もしよかったらどうぞ。

では、始めていきます。

概要

実行の前に、まずはGemini APIを利用して画像処理を行う際の概要についてまとめます。

Gemini 1.5 Pro1.5 Flash(今回用いるのはこちら)は、最大3,600個の画像ファイルをサポートしており、各画像は258個のトークンに相当します。
画像データは、下記のいずれかでなければなりません。

  1. PNG - image/png
  2. JPEG - image/jpeg
  3. WEBP - image/webp
  4. HEIC - image/heic
  5. HEIF - image/heif

画像の大きさ(ピクセル数)について特に制限はなく、大きすぎたり、小さすぎたりした場合はそのアスペクト比を維持したまま拡大、縮小されます。

渡す画像の合計サイズが20Mb未満になる場合は、base64でエンコードされた画像をアップロード、またはローカルにある画像フォルダを直接アップロードすることが推奨されています。(いずれも後述)
一方、それよりも大きな画像をアップロードする際はFile APImedia.uploadメソッドを使用します。(勉強不足によりこちらは今回省略させてもらいます、ごめんなさい)

加えて、最良の結果を得るために以下のことが公式から推奨されています。

  1. アップロードする前に画像を適切な向きにしておくこと(上下逆さまなどにしない)
  2. ぼやけた画像を使用しないこと
  3. 1つの画像を使用する場合は、テキスト プロンプトを画像の後に配置すること
特に最後はコードを記述するうえで大切そうだったので目立たせておきます。

実行してみる

では、実際に動かしてみます。

base64でエンコードされた画像をアップロードする

ウィキペディアで紹介されていた、ニューヨークの景色の画像をアップロードします。
以下のように記述してみます。

ewample.py
import httpx
import os
import base64
import google.generativeai as genai

genai.configure(api_key="(ここに自身のAPIキーを入力)")

model = genai.GenerativeModel("gemini-1.5-flash")
image_path = "https://upload.wikimedia.org/wikipedia/commons/8/8e/Downtown_Skyline_%2839960025320%29.jpg"

image = httpx.get(image_path)

prompt = "この画像はどこで撮影されたものだと考えられる?"
response = model.generate_content([{'mime_type':'image/jpeg', 'data': base64.b64encode(image.content).decode('utf-8')}, prompt])

print(response.text)

すると、以下のように返答がくると思います。

これはニューヨーク市のマンハッタンの夜景です。写真の中央に ある象徴的なビルは ワールドトレードセンターです。周りの 高層ビルと街の照明から、この画像はニューヨーク市で撮影され たものだと推測できます。

ローカルにある画像をアップロードする

ためしに、先日の投稿で使用した以下の画像をアップロードして、簡潔に説明させてみます。

スクリーンショット 2024-11-13 155312.png

以下のように記述してみます。

example.py
import PIL.Image
import os
import google.generativeai as genai

genai.configure(api_key="(ここに自身のAPIキーを入力)")

image_path = "(ここにアップロードする画像ファイルのパスを記述)"

image = PIL.Image.open(image_path)

model = genai.GenerativeModel("gemini-1.5-flash")

prompt = "この画像について2,3文で簡単に説明して。"

response = model.generate_content([prompt, image])

print(response.text)

アップロードする画像ファイルのパスについては、C:/Users/(ユーザー名)/Pictures/Screenshots/スクリーンショット 2024-11-13 155312.png(私の場合)のように、Cドライブからファイルまでのパスを書く必要があります。

ちなみに、今回は以下のように返答がきました。

これはGitHub Copilotのチャットインターフェースのスクリーンショットです。ユーザーはCopilotに雑談をしたいと尋 ねていますが、Copilotは雑談には対応 しておらず、GitHub関連の質問であれば対応できると答えています。

おわりに

今回の記事では、Gemini APIに画像を読み込ませ、その画像の説明を主にしてもらいました。ただ、File APIについての理解が全然できておらず、省略という形になってしまったので、今後勉強していくようにします。

では、今回の記事はこれで終わりです。最後までお読みいただきありがとうございました。

参考

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?