運用 Gemini API 探索視覺功能

前往 ai.google.dev 查看 試用 Colab 筆記本 在 GitHub 中查看筆記本

Gemini API 可以對傳遞的圖片和影片進行推論。通過時 圖片、一組圖片或影片,Gemini 就能:

  • 說明或回答內容相關問題
  • 提供內容的摘要
  • 從內容推斷

本教學課程示範了使用以下程式碼來提示 Gemini API 的一些方法: 圖片與影片輸入內容所有輸出內容皆為純文字。

事前準備:設定專案和 API 金鑰

呼叫 Gemini API 前,請先設定專案並設定 您的 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 像素。無法降低成本 適用於較低尺寸、頻寬或效能提升以外的圖片 顯示解析度較高的圖片

為確保最佳成效:

  • 上傳之前,請將圖片旋轉至正確的方向。
  • 避免使用模糊不清的圖片。
  • 如果使用的是一張圖片,請將文字提示放在圖片下方。

使用 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 來修正中繼資料 導入這個 API只有 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)

上傳一或多個儲存在本機的圖片檔

或者,你也可以上傳自己的檔案。您可以下載並使用 繪圖 攝取海域的水與貓一起消防員

您想傳送的檔案和系統指示組合時 超過 20 MB,請使用 File API 上傳這些檔案, 。您可以改為從本機呼叫較小的檔案 Gemini API:

import PIL.Image

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

請注意,這些內嵌資料呼叫並未包含許多可用功能 使用 File API 例如取得檔案中繼資料、列出清單刪除檔案

使用多張圖片提示

凡是在 Google Gemini 中 會套用在模型的背景區間內這個範例提供一則簡短文字 提示和先前上傳的三張圖片

# 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] 範圍內的相對寬度或高度,並按 1000,並轉換為整數。實際上,提供的座標是 原始圖片的 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. 將每個輸出座標除以 1000。
  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 的音訊,單一聲道,每秒新增時間戳記。 這些費率日後可能會變動,以利提升推論能力。

個別影格為 258 個符記,音訊為每秒 32 個符記。取代為 中繼資料,影片每秒約 300 個符記,這代表 100 萬個詞元 時間可能稍微少於一小時的影片。

如要詢問具有時間戳記的地點相關問題,請使用 MM:SS 格式,其中 前兩位數代表分鐘,最後兩位數代表 秒內請求驗證碼。

為確保最佳成效:

  • 每個提示只使用一部影片。
  • 如果只有一部影片,請將文字提示放在影片後方。

使用 File API 上傳影片檔案

File API 會直接接受影片檔案格式。本範例使用 NASA 短片 「Jupiter's Great Red Spot Shrinks and Grows」。 圖片:Goddard Space Flight Center (GSFC)/David Ladd (2018)。

「Jupiter's Great Red Spot Shrinks and Grows」屬於公共領域資源,同時 而且無法從中辨識出可識別身分的人物 (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}")

驗證檔案上傳並檢查狀態

透過呼叫 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 個影格), 系統可以為影片提供內含視覺說明的語音說明。

# 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 列出透過 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}')

後續步驟

本指南說明 generateContent 和 根據圖片和影片輸入內容生成文字輸出內容如要瞭解詳情 請參閱下列資源:

  • 使用媒體檔案發出提示: Gemini API 支援透過文字、圖片、音訊和影片資料提示使用者 稱為「多模態提示」
  • 系統操作說明:系統 指示能讓您根據具體的 需求和用途
  • 安全指南:生成式 AI 有時 模型會產生非預期的輸出內容 任何偏見或令人反感的內容後續處理和人工評估 以降低這類輸出的傷害風險