العرض على ai.google.dev | تجربة ورقة ملاحظات Colab | الاطّلاع على ورقة الملاحظات على GitHub |
يمكن أن تستنتج Gemini API الصور والفيديوهات التي يتم نقلها إليها. عند اجتياز الاختبار صورة أو سلسلة صور أو فيديو، يمكن لـ Gemini تنفيذ ما يلي:
- وضّح أسئلة حول المحتوى أو أجِب عنها
- تلخيص المحتوى
- الاستنتاج من المحتوى
يوضّح هذا الدليل التعليمي بعض الطرق المحتملة لطلب واجهة برمجة التطبيقات Gemini API باستخدام الصور وإدخال الفيديو. تكون جميع النتائج نصية فقط.
قبل البدء: عليك إعداد مشروعك ومفتاح واجهة برمجة التطبيقات.
قبل طلب Gemini API، عليك إعداد مشروعك وإعداده. مفتاح واجهة برمجة التطبيقات الخاص بك.
الطلب الذي يتضمّن صورًا
في هذا البرنامج التعليمي، ستتمكّن من تحميل الصور باستخدام واجهة برمجة تطبيقات الملفات أو كبيانات مضمّنة وإنشاء المحتوى استنادًا إلى هذه الصور.
التفاصيل الفنية (الصور)
يمكن تحميل 3,600 ملف صورة كحدّ أقصى في الإصدارَين Gemini 1.5 Pro و1.5 Flash.
يجب أن تكون الصور في أحد أنواع MIME التالية لبيانات الصور:
- PNG -
image/png
- JPEG - "
image/jpeg
" - تنسيق WebP - "
image/webp
" - HEIC -
image/heic
- HEIF -
image/heif
تساوي كل صورة 258 رمزًا مميّزًا.
بينما لا توجد حدود محددة لعدد البكسل في صورة غير نافذة سياق النموذج، يتم تصغير الصور الأكبر حجمًا إلى الحد الأقصى بدقة 3072x3072 مع الحفاظ على نسبة العرض إلى الارتفاع الأصلية، بينما يتم تغيير حجم الصور الأصغر إلى 768×768 بكسل. لا يوجد تخفيض في التكلفة للصور ذات الأحجام الأقل، غير معدل نقل البيانات أو تحسين الأداء للصور ذات الدقة الأعلى.
للحصول على أفضل النتائج:
- عليك تدوير الصور إلى الاتجاه الصحيح قبل التحميل.
- تجنَّب استخدام الصور المموّهة.
- في حال استخدام صورة واحدة، ضَع الطلب النصي بعد الصورة.
تحميل ملف صورة باستخدام File API
استخدِم File API لتحميل صورة بأيّ حجم. (استخدِم واجهة File API دائمًا عندما مجموعة الملفات وإرشادات النظام التي تنوي إرسالها أكبر من 20 ميغابايت).
البدء بتنزيل هذا رسم لحقيبة نفّاثة
!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}")
التحقق من تحميل ملف الصورة والحصول على البيانات الوصفية
يمكنك التحقّق من أنّ واجهة برمجة التطبيقات قد خزّنت الملف الذي تم تحميله بنجاح والحصول على
البيانات الوصفية من خلال طلب 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) لواجهة برمجة تطبيقات الملف. اختَر النموذج التوليدي وقدِّمه طلبًا نصيًا.
والصورة التي تم تحميلها.
# 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)
حمِّل ملفًا أو أكثر من ملفات الصور المخزّنة محليًا
ويمكنك بدلاً من ذلك تحميل ملفاتك الخاصة. يمكنك تنزيل واستخدام رسومات عن في المياه التي تنتشر فيها أسماك البيرانا و رجل إطفاء لديه قطة
عند تجميع الملفات وتعليمات النظام التي تنوي إرسالها يتجاوز حجمه 20 ميغابايت، استخدِم File API لتحميل هذه الملفات، حيث كما هو موضح سابقًا. وبدلاً من ذلك، يمكن استدعاء الملفات الأصغر محليًا من واجهة برمجة تطبيقات Gemini:
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)
الحصول على مربع إحاطة لكائن
يمكنك أن تسأل النموذج عن إحداثيات المربعات الإحاطة بالكائنات
في الصور. لرصد الأجسام، تم تدريب نموذج Gemini على توفير
هذه الإحداثيات كعرض أو ارتفاعات نسبية في النطاق [0,1]
، وقياسها باستخدام
1000 وتم تحويله إلى عدد صحيح. فعالية الإحداثيات المقدمة هي
النسخة 1000×1000 من الصورة الأصلية، ويجب تحويلها مرة أخرى إلى
أبعاد الصورة الأصلية.
# 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 بعرض الصورة الأصلية.
- اضرب الإحداثيات ص في ارتفاع الصورة الأصلي.
المطالبة مع فيديو
ستقوم في هذا البرنامج التعليمي بتحميل فيديو باستخدام 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 إطارات الصور من الفيديوهات بمعدّل لقطة واحدة في الثانية. (لقطات في الثانية) والصوت بسرعة 1 كيلوبت في الثانية لقناة واحدة، مع إضافة الطوابع الزمنية كل ثانية. هذه الأسعار عرضة للتغيير في المستقبل للتحسينات في الاستنتاج.
وتبلغ اللقطات الفردية 258 رمزًا مميّزًا، بينما يكون الصوت 32 رمزًا مميّزًا في الثانية. مع بيانات وصفية، تصبح كل ثانية من الفيديو حوالى 300 رمز مميز، مما يعني مليون سياق تناسب أقل من ساعة فيديو بقليل.
لطرح أسئلة حول المواقع الجغرافية ذات الطابع الزمني، يُرجى استخدام التنسيق MM:SS
، حيث يتم
يمثل أول رقمين الدقائق ويمثل آخر رقمين
ثوانٍ.
للحصول على أفضل النتائج:
- استخدِم فيديو واحدًا لكل طلب.
- وفي حال استخدام فيديو واحد، ضَع الطلب النصي بعد الفيديو.
تحميل ملف فيديو باستخدام File API
تقبل واجهة برمجة التطبيقات File API تنسيقات ملفات الفيديو مباشرةً. يستخدم هذا المثال دالة فيلم قصير من وكالة ناسا "تقلص البقعة الحمراء العظيمة على كوكب جوبيتر". المصدر: مركز غودارد لرحلات الفضاء (GSFC)/"ديفيد لاد" (2018).
"تقلص البقعة الحمراء العظيمة وتنمو على جوبيتر" في المجال العام عدم إظهار أشخاص يمكن التعرف عليهم. (إرشادات استخدام الصور والوسائط من وكالة ناسا)
ابدأ باسترداد الفيديو القصير:
!wget https://storage.googleapis.com/generativeai-downloads/images/GreatRedSpot.mp4
حمِّل الفيديو باستخدام File API واطبع عنوان URL.
# 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}")
التأكّد من تحميل الملف والتحقّق من حالته
تأكَّد من استلام واجهة برمجة التطبيقات للملفات بنجاح من خلال استدعاء
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) لواجهة برمجة تطبيقات الملف لهذا الفيديو. اختيار أداة إنشاء الذكاء الاصطناعي التوليدي
وتقديمه مع الفيديو الذي تم تحميله ومطالبة نصية.
# 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 أيضًا إرسال الطلبات باستخدام بيانات النصوص والصور والصوت والفيديوهات. المعروف باسم المطالبة متعددة الوسائط.
- تعليمات النظام: النظام توجيه سلوك النموذج بناءً على احتياجاتهم وحالات الاستخدام الخاصة بهم.
- إرشادات حول الأمان: يستخدم الذكاء الاصطناعي التوليدي أحيانًا مخرجات غير متوقعة، مثل المخرجات غير الدقيقة، أو متحيزة أو مسيئة. تعد مرحلة ما بعد المعالجة والتقييم البشري ضروريين الحد من مخاطر الضرر الناجم عن هذه المخرجات.