สำรวจความสามารถในการมองเห็นด้วย Gemini API

ดูใน ai.google.dev ลองใช้ Colab Notebook ดูสมุดบันทึกใน GitHub

โมเดล Gemini สามารถประมวลผลรูปภาพและวิดีโอได้ ซึ่งช่วยให้นักพัฒนาซอฟต์แวร์ใช้กรณีการใช้งานใหม่ๆ มากมายได้ ซึ่งในอดีตต้องใช้โมเดลเฉพาะโดเมน ความสามารถบางอย่างของภาพจากกล้องของ Gemini ได้แก่

  • ใส่คำบรรยายและตอบคำถามเกี่ยวกับรูปภาพ
  • ถอดเสียงและหาเหตุผลใน PDF รวมถึงโทเค็นสูงสุด 2 ล้านรายการ
  • อธิบาย แบ่งกลุ่ม และดึงข้อมูลจากวิดีโอที่มีความยาวไม่เกิน 90 นาที
  • ตรวจหาวัตถุในรูปภาพและแสดงพิกัดของกรอบล้อมรอบ

Gemini สร้างขึ้นใหม่ทั้งหมดให้ทำงานได้กับข้อมูลหลายรูปแบบ และเราจะพัฒนาต่อไปเพื่อขยายขอบเขตสิ่งที่เป็นไปได้

อินพุตรูปภาพ

สำหรับขนาดเพย์โหลดรูปภาพทั้งหมดที่น้อยกว่า 20 MB เราขอแนะนำให้อัปโหลดรูปภาพที่เข้ารหัส Base64 หรืออัปโหลดไฟล์รูปภาพที่จัดเก็บไว้ในเครื่องโดยตรง

การทำงานกับรูปภาพในเครื่อง

หากใช้ไลบรารีภาพ Python (Pillow ) คุณจะใช้ออบเจ็กต์รูปภาพ PIL ได้ด้วย

from google import genai
from google.genai import types

import PIL.Image

image = PIL.Image.open('/path/to/image.png')

client = genai.Client(api_key="GEMINI_API_KEY")
response = client.models.generate_content(
    model="gemini-2.0-flash",
    contents=["What is this image?", image])

print(response.text)

รูปภาพที่เข้ารหัส Base64

คุณสามารถอัปโหลด URL รูปภาพสาธารณะได้โดยการเข้ารหัสเป็นเพย์โหลด Base64 ตัวอย่างโค้ดต่อไปนี้แสดงวิธีดำเนินการโดยใช้เครื่องมือมาตรฐานของไลบรารีเท่านั้น

from google import genai
from google.genai import types

import requests

image_path = "https://goo.gle/instrument-img"
image = requests.get(image_path)

client = genai.Client(api_key="GEMINI_API_KEY")
response = client.models.generate_content(
    model="gemini-2.0-flash-exp",
    contents=["What is this image?",
              types.Part.from_bytes(image.content, "image/jpeg")])

print(response.text)

รูปภาพหลายรูป

หากต้องการแสดงข้อความแจ้งพร้อมรูปภาพหลายรูป ให้ระบุรูปภาพหลายรูปในคอลให้กับ generate_content โดยอาจเป็นรูปแบบใดก็ได้ที่รองรับ ซึ่งรวมถึง base64 หรือ PIL

from google import genai
from google.genai import types

import pathlib
import PIL.Image

image_path_1 = "path/to/your/image1.jpeg"  # Replace with the actual path to your first image
image_path_2 = "path/to/your/image2.jpeg" # Replace with the actual path to your second image

image_url_1 = "https://goo.gle/instrument-img" # Replace with the actual URL to your third image

pil_image = PIL.Image.open(image_path_1)

b64_image = types.Part.from_bytes(
    pathlib.Path(image_path_2).read_bytes(), "image/jpeg")

downloaded_image = requests.get(image_url_1)

client = genai.Client(api_key="GEMINI_API_KEY")
response = client.models.generate_content(
    model="gemini-2.0-flash-exp",
    contents=["What do these images have in common?",
              pil_image, b64_image, downloaded_image])

print(response.text)

โปรดทราบว่าการเรียกข้อมูลในบรรทัดเหล่านี้ไม่มีฟีเจอร์มากมายที่พร้อมใช้งานผ่าน File API เช่น การเรียกข้อมูลเมตาของไฟล์ การแสดงรายการ หรือการลบไฟล์

เพย์โหลดรูปภาพขนาดใหญ่

เมื่อไฟล์และวิธีการของระบบที่คุณตั้งใจจะส่งมีขนาดใหญ่กว่า 20 MB ให้ใช้ File API เพื่ออัปโหลดไฟล์เหล่านั้น

ใช้เมธอด media.upload ของ File API เพื่ออัปโหลดรูปภาพได้ทุกขนาด

หลังจากอัปโหลดไฟล์แล้ว คุณจะส่งGenerateContentคำขอที่อ้างอิง URI ของ File API ได้ เลือกโมเดล Generative แล้วป้อนพรอมต์ข้อความและรูปภาพที่อัปโหลด

from google import genai

client = genai.Client(api_key="GEMINI_API_KEY")

img_path = "/path/to/Cajun_instruments.jpg"
file_ref = client.files.upload(path=img_path)
print(f'{file_ref=}')

client = genai.Client(api_key="GEMINI_API_KEY")
response = client.models.generate_content(
    model="gemini-2.0-flash-exp",
    contents=["What can you tell me about these instruments?",
              file_ref])

print(response.text)

ความเข้ากันได้กับ OpenAI

คุณเข้าถึงความสามารถในการทำความเข้าใจรูปภาพของ Gemini ได้โดยใช้คลัง OpenAI ซึ่งจะช่วยให้คุณผสานรวม Gemini เข้ากับเวิร์กโฟลว์ OpenAI ที่มีอยู่ได้โดยการอัปเดตโค้ด 3 บรรทัดและใช้คีย์ API ของ Gemini ดูตัวอย่างการทำความเข้าใจรูปภาพเพื่อดูโค้ดที่แสดงวิธีส่งรูปภาพที่เข้ารหัสเป็นเพย์โหลด Base64

พรอมต์ด้วยรูปภาพ

ในบทแนะนํานี้ คุณจะอัปโหลดรูปภาพโดยใช้ 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

โทเค็น

ต่อไปนี้คือวิธีคำนวณโทเค็นสำหรับรูปภาพ

  • Gemini 1.0 Pro Vision: รูปภาพแต่ละรูปใช้โทเค็น 258 รายการ
  • Gemini 1.5 Flash และ Gemini 1.5 Pro: หากรูปภาพมีขนาดทั้ง 2 ด้านไม่เกิน 384 พิกเซล ระบบจะใช้โทเค็น 258 รายการ หากรูปภาพมีขนาดด้านใดด้านหนึ่งเกิน 384 พิกเซล ระบบจะครอบตัดรูปภาพเป็นไทล์ ขนาดการ์ดแต่ละขนาดจะมีค่าเริ่มต้นเป็นมิติข้อมูลขนาดเล็กที่สุด (ความกว้างหรือความสูง) หารด้วย 1.5 หากจำเป็น ระบบจะปรับแต่ละการ์ดให้มีขนาดใหญ่กว่า 256 พิกเซลแต่ไม่เกิน 768 พิกเซล จากนั้นระบบจะปรับขนาดแต่ละการ์ดเป็น 768x768 และใช้โทเค็น 258 รายการ
  • Gemini 2.0 Flash: อินพุตรูปภาพที่มีทั้ง 2 มิติไม่เกิน 384 พิกเซลจะนับเป็น 258 โทเค็น ระบบจะครอบตัดและปรับขนาดรูปภาพที่มีขนาดใหญ่กว่าใน 1 หรือทั้ง 2 มิติเป็นไทล์ขนาด 768x768 พิกเซลตามต้องการ โดยแต่ละรูปภาพจะนับเป็นโทเค็น 258 รายการ

เพื่อผลลัพธ์ที่ดีที่สุด

  • หมุนรูปภาพให้อยู่ในแนวที่ถูกต้องก่อนอัปโหลด
  • หลีกเลี่ยงรูปภาพที่เบลอ
  • หากใช้รูปภาพเดียว ให้วางพรอมต์ข้อความไว้หลังรูปภาพ

ความสามารถ

ส่วนนี้จะกล่าวถึงความสามารถด้านวิสัยทัศน์ที่เฉพาะเจาะจงของโมเดล Gemini ซึ่งรวมถึงการตรวจหาวัตถุและพิกัดของกรอบล้อมรอบ

รับกล่องขอบเขตของวัตถุ

โมเดล Gemini ได้รับการฝึกให้แสดงผลพิกัดของกรอบล้อมรอบเป็นความกว้างหรือความสูงแบบสัมพัทธ์ในช่วง [0, 1] จากนั้นระบบจะปรับขนาดค่าเหล่านี้เป็น 1,000 และแปลงเป็นจํานวนเต็ม พิกัดจะแสดงถึงกล่องขอบเขตในรูปภาพขนาด 1,000x1,000 พิกเซล คุณจึงต้องแปลงพิกัดเหล่านี้กลับเป็นขนาดของรูปภาพต้นฉบับเพื่อจับคู่กล่องขอบเขตอย่างถูกต้อง

from google import genai

client = genai.Client(api_key="GEMINI_API_KEY")

prompt = (
  "Return a bounding box for each of the objects in this image "
  "in [ymin, xmin, ymax, xmax] format.")

response = client.models.generate_content(
  model="gemini-1.5-pro",
  contents=[sample_file_1, prompt])

print(response.text)

คุณสามารถใช้กรอบล้อมรอบเพื่อตรวจจับวัตถุและระบุตำแหน่งภายในรูปภาพและวิดีโอ การระบุและแบ่งเขตวัตถุด้วยกล่องขอบเขตที่แม่นยำจะช่วยให้คุณปลดล็อกแอปพลิเคชันต่างๆ มากมายและเพิ่มความอัจฉริยะของโปรเจ็กต์ได้

ประโยชน์ที่สำคัญ

  • ใช้งานง่าย: ผสานรวมความสามารถในการตรวจจับวัตถุเข้ากับแอปพลิเคชันได้อย่างง่ายดาย ไม่ว่าคุณจะมีความเชี่ยวชาญด้านคอมพิวเตอร์วิทัศน์มากน้อยเพียงใด
  • ปรับแต่งได้: สร้างกรอบที่ล้อมรอบตามวิธีการที่กำหนดเอง (เช่น "ฉันต้องการดูกรอบที่ล้อมรอบของวัตถุสีเขียวทั้งหมดในรูปภาพนี้") โดยไม่ต้องฝึกโมเดลที่กำหนดเอง

รายละเอียดทางเทคนิค

  • อินพุต: พรอมต์และรูปภาพหรือเฟรมวิดีโอที่เกี่ยวข้อง
  • เอาต์พุต: กล่องขอบเขตในรูปแบบ [y_min, x_min, y_max, x_max] มุมซ้ายบนคือจุดเริ่มต้น โดยแกน x และ y จะแสดงในแนวนอนและแนวตั้งตามลำดับ ระบบจะทําให้ค่าพิกัดเป็น 0-1000 สําหรับรูปภาพทุกรูป
  • การแสดงภาพ: ผู้ใช้ AI Studio จะเห็นกล่องขอบเขตที่ผังไว้ใน UI

สําหรับนักพัฒนาซอฟต์แวร์ Python ให้ลองใช้โน้ตบุ๊กการทำความเข้าใจเชิงพื้นที่ 2 มิติ หรือโน้ตบุ๊กการชี้แบบ 3 มิติเวอร์ชันทดลอง

ปรับพิกัดให้เป็นมาตรฐาน

โมเดลจะแสดงผลพิกัดของกล่องขอบเขตในรูปแบบ [y_min, x_min, y_max, x_max] หากต้องการแปลงพิกัดที่ปรับมาตรฐานเหล่านี้เป็นพิกัดพิกเซลของรูปภาพต้นฉบับ ให้ทำตามขั้นตอนต่อไปนี้

  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 แบบช่องทางเดียว โดยเพิ่มการประทับเวลาทุกวินาที อัตราเหล่านี้อาจมีการเปลี่ยนแปลงในอนาคตเพื่อปรับปรุงการอนุมาน

แต่ละเฟรมมีโทเค็น 258 รายการ และเสียงมีโทเค็น 32 รายการต่อวินาที เมื่อใช้ข้อมูลเมตา วินาทีของวิดีโอแต่ละวินาทีจะกลายเป็นโทเค็นประมาณ 300 รายการ ซึ่งหมายความว่าหน้าต่างบริบทขนาด 1 ล้านโทเค็นจะรองรับวิดีโอได้น้อยกว่า 1 ชั่วโมงเล็กน้อย

หากต้องการถามคำถามเกี่ยวกับสถานที่ที่มีการประทับเวลา ให้ใช้รูปแบบ MM:SS โดยตัวเลข 2 หลักแรกแสดงนาทีและตัวเลข 2 หลักสุดท้ายแสดงวินาที

เพื่อผลลัพธ์ที่ดีที่สุด ให้ทำดังนี้

  • ใช้วิดีโอ 1 รายการต่อพรอมต์
  • หากใช้วิดีโอรายการเดียว ให้วางพรอมต์ข้อความไว้หลังวิดีโอ

อัปโหลดไฟล์วิดีโอโดยใช้ File API

File API ยอมรับรูปแบบไฟล์วิดีโอโดยตรง ตัวอย่างนี้ใช้ภาพยนตร์สั้นของ NASA เรื่อง"จุดแดงใหญ่ของดาวพฤหัสบดีหดเล็กและขยายใหญ่ขึ้น" เครดิต: ศูนย์การบินอวกาศก็อดดาร์ด (GSFC)/David Ladd (2018)

"Great Red Spot Shrinks and Grows" เป็นสาธารณสมบัติและไม่ได้แสดงภาพบุคคลที่ระบุตัวตนได้ (หลักเกณฑ์การใช้รูปภาพและสื่อของ NASA)

เริ่มต้นด้วยการเรียกข้อมูลวิดีโอสั้นๆ โดยทำดังนี้

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

อัปโหลดวิดีโอโดยใช้ File API และพิมพ์ URI

from google import genai

client = genai.Client(api_key="GEMINI_API_KEY")

print("Uploading file...")
video_file = client.files.upload(path="GreatRedSpot.mp4")
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(1)
    video_file = client.files.get(name=video_file.name)

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

print('Done')

พรอมต์ที่มีวิดีโอและข้อความ

เมื่อวิดีโอที่อัปโหลดอยู่ในสถานะ ACTIVE คุณจะส่งGenerateContentคำขอที่ระบุ URI ของ File API สำหรับวิดีโอนั้นได้ เลือก Generative Model แล้วส่งวิดีโอที่อัปโหลดและพรอมต์ข้อความ

from IPython.display import Markdown

# Pass the video file reference like any other media part.
response = client.models.generate_content(
    model="gemini-1.5-pro",
    contents=[
        video_file,
        "Summarize this video. Then create a quiz with answer key "
        "based on the information in the video."])

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

อ้างอิงการประทับเวลาในเนื้อหา

คุณสามารถใช้การประทับเวลาในรูปแบบ HH:MM:SS เพื่ออ้างอิงถึงช่วงเวลาที่เฉพาะเจาะจงในวิดีโอ

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

response = client.models.generate_content(
    model="gemini-1.5-pro",
    contents=[video_file, prompt])

print(response.text)

ถอดเสียงวิดีโอและใส่คำอธิบายแทนเสียง

โมเดล Gemini สามารถถอดเสียงและแสดงคำอธิบายด้วยภาพสำหรับเนื้อหาวิดีโอได้ด้วยการประมวลผลทั้งแทร็กเสียงและเฟรมภาพ สำหรับคำอธิบายแบบภาพ โมเดลจะสุ่มตัวอย่างวิดีโอในอัตรา 1 เฟรมต่อการอ่าน 1 วินาที อัตราการสุ่มตัวอย่างนี้อาจส่งผลต่อระดับรายละเอียดในคำอธิบาย โดยเฉพาะอย่างยิ่งสำหรับวิดีโอที่มีภาพเคลื่อนไหวอย่างรวดเร็ว

prompt = (
    "Transcribe the audio from this video, giving timestamps for "
    "salient events in the video. Also provide visual descriptions.")

response = client.models.generate_content(
    model="gemini-1.5-pro",
    contents=[video_file, prompt])

print(response.text)

แสดงรายการไฟล์

คุณสามารถแสดงรายการไฟล์ทั้งหมดที่อัปโหลดโดยใช้ File API และ URI ของไฟล์ได้โดยใช้ files.list

from google import genai

client = genai.Client(api_key="GEMINI_API_KEY")

print('My files:')
for f in client.files.list():
  print(" ", f'{f.name}: {f.uri}')

ลบไฟล์

ระบบจะลบไฟล์ที่อัปโหลดโดยใช้ File API โดยอัตโนมัติหลังจากผ่านไป 2 วัน นอกจากนี้ คุณยังลบด้วยตนเองได้โดยใช้ files.delete

from google import genai

client = genai.Client(api_key="GEMINI_API_KEY")

# Upload a file
poem_file = client.files.upload(path="poem.txt")

# Files will auto-delete after a period.
print(poem_file.expiration_time)

# Or they can be deleted explicitly.
dr = client.files.delete(name=poem_file.name)

try:
  client.models.generate_content(
      model="gemini-2.0-flash-exp",
      contents=['Finish this poem:', poem_file])
except genai.errors.ClientError as e:
  print(e.code)  # 403
  print(e.status)  # PERMISSION_DENIED
  print(e.message)  # You do not have permission to access the File .. or it may not exist.

ขั้นตอนถัดไป

คู่มือนี้จะแสดงวิธีอัปโหลดไฟล์รูปภาพและวิดีโอโดยใช้ File API จากนั้นสร้างเอาต์พุตข้อความจากอินพุตรูปภาพและวิดีโอ ดูข้อมูลเพิ่มเติมได้ที่แหล่งข้อมูลต่อไปนี้

  • กลยุทธ์การแจ้งไฟล์: Gemini API รองรับการแจ้งด้วยข้อมูลข้อความ รูปภาพ เสียง และวิดีโอ หรือที่เรียกว่าการแจ้งแบบหลายรูปแบบ
  • คำสั่งของระบบ: คำสั่งของระบบช่วยให้คุณควบคุมลักษณะการทํางานของโมเดลตามความต้องการและกรณีการใช้งานที่เฉพาะเจาะจง
  • คำแนะนำด้านความปลอดภัย: บางครั้งโมเดล Generative AI จะสร้างเอาต์พุตที่ไม่คาดคิด เช่น เอาต์พุตที่ไม่ถูกต้อง มีอคติ หรือไม่เหมาะสม ขั้นตอนหลังการประมวลผลและการประเมินจากเจ้าหน้าที่เป็นขั้นตอนที่จำเป็นในการจำกัดความเสี่ยงจากอันตรายที่อาจเกิดขึ้นจากเอาต์พุตดังกล่าว