ดูใน 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)
หากต้องการแปลงพิกัดเหล่านี้เป็นขนาดของภาพต้นฉบับ ให้ทำดังนี้
- หารค่าพิกัดเอาต์พุตแต่ละรายการด้วย 1000
- คูณพิกัด x ด้วยความกว้างของภาพต้นฉบับ
- คูณพิกัด 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 โมเดลจะสร้างเอาต์พุตที่ไม่คาดคิด เช่น เอาต์พุตที่ไม่ถูกต้อง มีอคติ หรือไม่เหมาะสม การประมวลผลหลังการประมวลผลและการประเมินโดยเจ้าหน้าที่เป็นสิ่งจำเป็นเพื่อ ลดความเสี่ยงที่จะเกิดอันตรายจากผลลัพธ์เหล่านั้น