Gemini API でビジョン機能を試す

<ph type="x-smartling-placeholder"></ph>

ai.google.dev で表示 Colab ノートブックを試す GitHub のノートブックを表示

Gemini API は、渡された画像や動画に対して推論を実行できます。合格時 画像、一連の画像、動画などのテキストを含む場合、Gemini は以下を行うことができます。

  • コンテンツについて説明または回答する
  • コンテンツを要約する
  • コンテンツから推定する

このチュートリアルでは、Gemini API にプロンプトを送信する方法をいくつか紹介します。 生成します。すべての出力はテキストのみです。

始める前に: プロジェクトと API キーを設定する

Gemini API を呼び出す前に、プロジェクトをセットアップして、 取得します。

画像を使用したプロンプト

このチュートリアルでは、File API を使用するか、インライン データとして画像をアップロードします その画像に基づいてコンテンツを生成できます

技術的な詳細(画像)

Gemini 1.5 Pro と 1.5 Flash は、最大 3,600 個の画像ファイルをサポートします。

画像は、次のいずれかの画像データ MIME タイプである必要があります。

  • PNG - image/png
  • JPEG - image/jpeg
  • WebP - image/webp
  • HEIC - image/heic
  • HEIF - image/heif

各画像は 258 個のトークンに相当します。

他に、画像のピクセル数に特定の制限はありませんが、 大きな画像は、最大サイズまで縮小されます。 解像度 3072x3072、元のアスペクト比を維持しつつ、 768x768 ピクセルに拡大されます。費用が削減されない (帯域幅、パフォーマンス向上を除く)の小さい画像用 高解像度の画像に対応できます

最良の結果を得るために、次のことを行います。

  • アップロードする前に、画像を正しい向きに回転してください。
  • ぼやけた画像は使用しないでください。
  • 1 つの画像を使用する場合は、画像の後にテキスト プロンプトを配置します。

File API を使用して画像ファイルをアップロードする

File API を使用して任意のサイズの画像をアップロードします。(常に File API を使用する: 送信しようとしているファイルとシステム指示の組み合わせが、 20 MB を超えることはありません)。

まずダウンロード ジェットパックのスケッチ

!curl -o jetpack.jpg https://storage.googleapis.com/generativeai-downloads/images/jetpack.jpg

次のコマンドを使用して、画像をアップロードします。 media.upload Gemini API 呼び出しで参照として使用される URI を出力します。

# Upload the file and print a confirmation.
sample_file = genai.upload_file(path="jetpack.jpg",
                            display_name="Jetpack drawing")

print(f"Uploaded file '{sample_file.display_name}' as: {sample_file.uri}")

画像ファイルのアップロードを確認してメタデータを取得する

アップロードされたファイルが API によって正常に保存されたことを確認し、 files.get を呼び出してメタデータを生成します 行うことができますname(さらには uri)のみが一意です。使用 display_name: 一意性をご自身で管理する場合にのみ、ファイルを識別します。

file = genai.get_file(name=sample_file.name)
print(f"Retrieved file '{file.display_name}' as: {sample_file.uri}")

ユースケースによっては、URI を dict またはデータベース。

アップロードされた画像とテキストを使用するプロンプト

ファイルのアップロード後、参照ファイルを参照する GenerateContent リクエストを File API URI です。生成モデルを選択し、テキスト プロンプトを提供する そしてアップロードされた画像です。

# Choose a Gemini model.
model = genai.GenerativeModel(model_name="gemini-1.5-pro")

# Prompt the model with text and the previously uploaded image.
response = model.generate_content([sample_file, "Describe how this product might be manufactured."])

Markdown(">" + response.text)

ローカルに保存されている 1 つ以上の画像ファイルをアップロードする

または、独自のファイルをアップロードすることもできます。Google スケッチ ピラニアが蔓延する水 および 消防士と猫

送信しようとしているファイルとシステム指示の組み合わせ サイズが 20 MB を超える場合は、File API を使用して 表示されます。サイズの小さいファイルは、Cloud Shell からローカルに呼び出すことができます。 Gemini API:

import PIL.Image

sample_file_2 = PIL.Image.open('piranha.jpg')
sample_file_3 = PIL.Image.open('firefighter.jpg')

なお、これらのインライン データ呼び出しには、利用可能な機能の多くが含まれていません たとえば、File API を介して、ファイルのメタデータの取得、リスティングファイルの削除

複数の画像を使用したプロンプト

Gemini API には、テキスト、画像、音声の任意の組み合わせを コンテキスト ウィンドウ内に収まるようにしなければなりません。この例では、1 つの短いテキストが アップロード済みの 3 つの画像が表示されます。

# Choose a Gemini model.
model = genai.GenerativeModel(model_name="gemini-1.5-pro")

prompt = "Write an advertising jingle showing how the product in the first image could solve the problems shown in the second two images."

response = model.generate_content([prompt, sample_file, sample_file_2, sample_file_3])

Markdown(">" + response.text)

オブジェクトの境界ボックスを取得する

オブジェクトの境界ボックスの座標をモデルに尋ねることができる 説明します。オブジェクト検出については、Gemini モデルは これらの座標は、範囲 [0,1] 内の相対的な幅または高さで、比率になります。 1,000 で整数に変換されます。実質的には、指定された座標は 1000x1000 のサイズで変換し、元の画像の サイズ変更されます。

# Choose a Gemini model.
model = genai.GenerativeModel(model_name="gemini-1.5-pro")

prompt = "Return a bounding box for the piranha. \n [ymin, xmin, ymax, xmax]"
response = model.generate_content([piranha, prompt])

print(response.text)

これらの座標を元の画像の寸法に変換するには:

  1. 各出力座標を 1,000 で割ります。
  2. x 座標に元の画像の幅を乗算します。
  3. y 座標に元の画像の高さを掛けます。

動画を使用したプロンプト

このチュートリアルでは、File API を使用して動画をアップロードし、 コンテンツを作成します。

詳細な技術情報(動画)

Gemini 1.5 Pro と Flash は、最大約 1 時間の動画データをサポートします。

動画は、次のいずれかの動画形式の MIME タイプである必要があります。

  • video/mp4
  • video/mpeg
  • video/mov
  • video/avi
  • video/x-flv
  • video/mpg
  • video/webm
  • video/wmv
  • video/3gpp

File API サービスは、1 フレーム/秒で動画から画像フレームを抽出します (FPS)と 1 Kbps の音声、単一チャンネル、1 秒ごとにタイムスタンプを追加します。 これらのレートは、推論の改善のため、将来変更される可能性があります。

個々のフレームは 258 トークンで、音声は 1 秒あたり 32 トークンです。あり 1 秒ごとに最大 300 トークンになり、100 万個のコンテキストを 動画の長さは 1 時間弱に収まります。

タイムスタンプ付きのビジネス情報について質問するには、MM:SS の形式を使用します。 最初の 2 桁は分を表し、最後の 2 桁は 秒です。

最良の結果を得るために、次のことを行います。

  • プロンプトごとに 1 つの動画を使用します。
  • 単一の動画を使用する場合は、動画の後にテキスト プロンプトを配置します。

File API を使用して動画ファイルをアップロードする

File API は、動画ファイル形式を直接受け入れます。この例では、 NASA の短編映画 「Jupiter's Great Red Spot Shrinks and Grows」。 クレジット: ゴダード宇宙飛行センター(GSFC)/ David Ladd(2018 年)。

「木星の大赤斑は小さくなり、大きくなる」パブリック ドメインであり、 個人を特定できる情報を含めないでください。 (NASA の画像とメディアの使用ガイドライン)。

まず、ショート動画を取得します。

!wget https://storage.googleapis.com/generativeai-downloads/images/GreatRedSpot.mp4

File API を使用して動画をアップロードし、URI を出力します。

# Upload the video and print a confirmation.
video_file_name = "GreatRedSpot.mp4"

print(f"Uploading file...")
video_file = genai.upload_file(path=video_file_name)
print(f"Completed upload: {video_file.uri}")

ファイルのアップロードと状態の確認

次のコマンドを呼び出して、API がファイルを正常に受信したことを確認します。 files.get メソッドを使用します。

import time

# Check whether the file is ready to be used.
while video_file.state.name == "PROCESSING":
    print('.', end='')
    time.sleep(10)
    video_file = genai.get_file(video_file.name)

if video_file.state.name == "FAILED":
  raise ValueError(video_file.state.name)

動画とテキストを使用したプロンプト

アップロードした動画が ACTIVE ステータスになったら、GenerateContent を作成できます。 その動画の File API URI を指定するリクエストです。生成 AI モデルを アップロード済みの動画とテキスト プロンプトを渡します。

# Create the prompt.
prompt = "Summarize this video. Then create a quiz with answer key based on the information in the video."

# Choose a Gemini model.
model = genai.GenerativeModel(model_name="gemini-1.5-pro")

# Make the LLM request.
print("Making LLM inference request...")
response = model.generate_content([video_file, prompt],
                                  request_options={"timeout": 600})

# Print the response, rendering any Markdown
Markdown(response.text)

内容のタイムスタンプを参照

MM:SS という形式のタイムスタンプを使用して、特定の時点、 動画をご覧ください。

# Create the prompt.
prompt = "What are the examples given at 01:05 and 01:19 supposed to show us?"

# Choose a Gemini model.
model = genai.GenerativeModel(model_name="gemini-1.5-pro")

# Make the LLM request.
print("Making LLM inference request...")
response = model.generate_content([prompt, video_file],
                                  request_options={"timeout": 600})
print(response.text)

動画の文字起こしと視覚的な説明の提供

動画が高速ペースでない場合(サンプリングされるのが 1 秒あたり 1 フレームのみ)は、 ショットごとに視覚的な説明を付けて動画を文字起こしできます。

# Create the prompt.
prompt = "Transcribe the audio, giving timestamps. Also provide visual descriptions."

# Choose a Gemini model.
model = genai.GenerativeModel(model_name="gemini-1.5-pro")

# Make the LLM request.
print("Making LLM inference request...")
response = model.generate_content([prompt, video_file],
                                  request_options={"timeout": 600})
print(response.text)

ファイルの一覧表示

File API を使用してアップロードしたすべてのファイルとその URI のリストを表示するには、 files.list_files()

# List all files
for file in genai.list_files():
    print(f"{file.display_name}, URI: {file.uri}")

ファイルを削除

File API を使用してアップロードしたファイルは、2 日後に自動的に削除されます。マイページ files.delete() を使用して手動で削除することもできます。

# Delete file
genai.delete_file(video_file.name)
print(f'Deleted file {video_file.uri}')

次のステップ

このガイドでは、Terraform を使用して generateContent、 画像と動画の入力からテキスト出力を生成します。詳しくは 次のリソースをご覧ください。

  • メディア ファイルを使用したプロンプト: Gemini API は、テキスト、画像、音声、動画データを使用したプロンプトをサポートしています。 マルチモーダル プロンプトと呼ばれます。
  • システム指示: システム 使用することで、特定の状況に基づいてモデルの動作を サポートします。
  • 安全に関するガイダンス: 場合によって生成 AI モデルは、不正確な出力など、予期しない出力を生成する 偏見がある、または不適切であるといったことを判断できます。事後処理と人間による評価が、 そのような出力による害が及ぶリスクを制限します。