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

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

Gemini API จะเรียกใช้การอนุมานในรูปภาพและวิดีโอที่ส่งมาได้ เมื่อผ่าน รูปภาพ ชุดรูปภาพ หรือวิดีโอ Gemini จะทำสิ่งต่อไปนี้ได้

  • อธิบายหรือตอบคำถามเกี่ยวกับเนื้อหา
  • สรุปเนื้อหา
  • คาดการณ์จากเนื้อหา

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

ก่อนเริ่มต้น: ตั้งค่าโปรเจ็กต์และคีย์ API

ก่อนที่จะเรียกใช้ Gemini API คุณต้องตั้งค่าโปรเจ็กต์และกำหนดค่า คีย์ API

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

ในบทแนะนำนี้ คุณจะอัปโหลดรูปภาพโดยใช้ File API หรือเป็นข้อมูลในบรรทัด และสร้างเนื้อหาจากรูปภาพเหล่านั้น

รายละเอียดทางเทคนิค (รูปภาพ)

Gemini 1.5 Pro และ Flash 1.5 รองรับไฟล์ภาพสูงสุด 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 เพื่ออัปโหลดรูปภาพทุกขนาด (ใช้ File API เสมอเมื่อ ชุดค่าผสมของไฟล์และคำแนะนำของระบบที่คุณตั้งใจจะส่ง ใหญ่กว่า 20 MB)

เริ่มด้วยการดาวน์โหลดไฟล์นี้ ภาพร่างของ Jetpack

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

อัปโหลดรูปภาพโดยใช้ media.upload และพิมพ์ URI ซึ่งใช้เป็นข้อมูลอ้างอิงในการเรียก Gemini API

# 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 ผ่าน SDK เฉพาะ 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 ที่อ้างอิงถึงได้ URI ของ File API เลือกโมเดล Generative แล้วระบุพร้อมพรอมต์ข้อความ และรูปภาพที่อัปโหลด

# 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 ไฟล์

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

เมื่อไฟล์และคำแนะนำของระบบที่คุณต้องการส่งรวมกัน มีขนาดใหญ่กว่า 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 เช่น การรับข้อมูลเมตาของไฟล์ ข้อมูล หรือ การลบไฟล์

พรอมต์ที่มีรูปภาพหลายรูป

คุณสามารถจัดเตรียม 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] ซึ่งปรับขนาดตาม 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 ชั่วโมง

วิดีโอต้องอยู่ในรูปแบบวิดีโอใดรูปแบบหนึ่งต่อไปนี้

  • 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 โดย ตัวเลขสองหลักแรกเป็นนาที และตัวเลขสองหลักสุดท้ายแทน วินาที

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

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

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

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

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

เริ่มด้วยการดึงวิดีโอสั้นต่อไปนี้

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

อัปโหลดวิดีโอโดยใช้ 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 ซึ่งระบุ URI ของ File API สำหรับวิดีโอนั้น เลือก Generative 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 และ 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 รองรับพรอมต์ที่มีข้อมูลข้อความ รูปภาพ เสียง และวิดีโอ หรือที่เรียกกันว่าพรอมต์แบบหลายโมดัล
  • วิธีการของระบบ: ระบบ ช่วยให้คุณสามารถควบคุมลักษณะการทำงานของโมเดลตาม และกรณีการใช้งาน
  • คำแนะนำด้านความปลอดภัย: บางครั้ง Generative AI โมเดลจะสร้างเอาต์พุตที่ไม่คาดคิด เช่น เอาต์พุตที่ไม่ถูกต้อง มีอคติ หรือไม่เหมาะสม การประมวลผลหลังการประมวลผลและการประเมินโดยเจ้าหน้าที่เป็นสิ่งจำเป็นเพื่อ ลดความเสี่ยงที่จะเกิดอันตรายจากผลลัพธ์เหล่านั้น