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