Gemini API מאפשר לבחון יכולות של ראייה ממוחשבת

להצגה ב-ai.google.dev כדאי לנסות notebook של 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 כאשר השילוב של הקבצים והוראות המערכת שאתם מתכוונים לשלוח הוא גדול מ-20MB).

כדי להתחיל, צריך להוריד את הקובץ שרטוט של תרמיל ריחוף.

!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. בוחרים את המודל הגנרטיבי ושולחים אותו עם הנחיית טקסט לבין התמונה שהועלתה.

# 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)

יש להעלות קובץ תמונה אחד או יותר המאוחסנים באופן מקומי

לחלופין, אתם יכולים להעלות קבצים משלכם. אפשר להוריד ולהשתמש שרטוטים של מים ששורפים בפירנה וגם כבאי עם חתול.

כשמשלבים את הקבצים והוראות המערכת שמתכוונים לשלוח גדול מ-20MB, השתמשו ב-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 כל שילוב של תמונות וטקסט שמתאימות לחלון ההקשר של המודל. בדוגמה הזו מופיע טקסט קצר ואת שלוש התמונות שהועלו קודם לכן.

# 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)

אחזור של תיבה תוחמת (bounding box) לאובייקט

אפשר לבקש מהמודל את הקואורדינטות של תיבות תוחמות לאובייקטים בתמונות. לזיהוי אובייקטים, מודל Gemini אומן לספק את הקואורדינטות האלה כרוחב או גובה יחסיים בטווח [0,1], בקנה מידה נרחב לפי 1000 וממירים אותו למספר שלם. בפועל, הקואורדינטות שניתנות הן גרסה 1,000x1,000 של התמונה המקורית, ויש להמיר אותה בחזרה של התמונה המקורית.

# 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. צריך לחלק כל קואורדינטות פלט ב-1,000.
  2. אפשר להכפיל את קואורדינטות ה-x ברוחב התמונה המקורי.
  3. אפשר להכפיל את קווי ה-y בגובה התמונה המקורי.

הנחיות עם סרטון

במדריך הזה תעלה סרטון באמצעות File API ותייצר שמבוסס על התמונות האלה.

פרטים טכניים (סרטון)

Gemini 1.5 Pro ו-Flash תומכים בכמות של עד שעה לנתוני וידאו.

הסרטון חייב להיות באחד מסוגי ה-MIME הבאים של פורמט וידאו:

  • video/mp4
  • video/mpeg
  • video/mov
  • video/avi
  • video/x-flv
  • video/mpg
  • video/webm
  • video/wmv
  • video/3gpp

שירות File API מחלץ פריימים של תמונות מסרטונים בקצב של פריים אחד לשנייה (FPS) ואודיו בקצב של 1Kbps, לערוץ אחד, עם חותמות זמן כל שנייה. התעריפים האלה עשויים להשתנות בעתיד לצורך שיפורי ההסקה.

פריימים בודדים הם 258 אסימונים, והאודיו הוא 32 אסימונים לשנייה. ב- מטא-נתונים, כל שנייה בסרטון הופכת לכ-300 אסימונים, כלומר הקשר של מיליון החלון הזה יכול להכיל פחות משעה של וידאו.

כדי לשאול שאלות על מיקומים עם חותמת זמן, צריך להשתמש בפורמט MM:SS, שבו שתי הספרות הראשונות מייצגות דקות ושתי הספרות האחרונות מייצגות. שניות.

לקבלת התוצאות הטובות ביותר:

  • צריך להשתמש בסרטון אחד לכל הנחיה.
  • אם אתם משתמשים בסרטון אחד, מציבים את הנחיית הטקסט אחרי הסרטון.

העלאת קובץ וידאו באמצעות File API

ה-File API מקבל פורמטים של קובצי וידאו באופן ישיר. בדוגמה הזאת נשתמש סרט קצר של נאס"א "Jupiter's Great Spot Reds Rrings and Grows" קרדיט: Goddard Space Flight Center (GSFC)/David Ladd (2018).

"Jupiter's Great Spot Reds Rrins 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}")

אימות ההעלאה של קובץ ובדיקת המצב

מוודאים שה-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 עבור הסרטון הזה. לבחור את האפשרות מודל ולספק לו את הסרטון שהעליתם ובקשת טקסט.

# 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)

תמלול סרטונים והוספת תיאורים ויזואליים

אם הסרטון לא בקצב מהיר (נדגם רק פריים אחד לשנייה בסרטון), ניתן לתמלל את הסרטון עם תיאורים חזותיים לכל צילום.

# 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 נמחקים באופן אוטומטי לאחר יומיים. שלך יכול גם למחוק אותם באופן ידני באמצעות files.delete().

# Delete file
genai.delete_file(video_file.name)
print(f'Deleted file {video_file.uri}')

המאמרים הבאים

במדריך הזה מוסבר איך משתמשים generateContent ו- כדי לייצר פלטי טקסט מערכי קלט של תמונה ווידאו. למידע נוסף, אפשר להיעזר במקורות המידע הבאים:

  • הצגת הנחיות עם קובצי מדיה: Gemini API תומך בהנחיות באמצעות נתונים של טקסט, תמונה, אודיו ווידאו, שנקרא 'הנחיות מרובות מצבים'.
  • הוראות מערכת: מערכת מאפשרות לכם להשפיע על אופן הפעולה של המודל לצרכים ולתרחישים לדוגמה.
  • הנחיות בטיחות: לפעמים, AI גנרטיבי מודלים שמקורם בפלט לא צפוי, כמו פלט לא מדויק, מוטה או פוגעני. חשוב מאוד לבצע הערכה לאחר עיבוד והערכה אנושית להגביל את הסיכון לנזק מפלט כזה.