میتوانید از مدل Gemini بخواهید فایلهای تصویری را که ارائه میدهید بهصورت درونخطی (کدبندیشده با base64) یا ازطریق نشانی وب تجزیهوتحلیل کند. وقتی از Firebase AI Logic استفاده میکنید، میتوانید این درخواست را مستقیماً از برنامهتان انجام دهید.
با این قابلیت میتوانید کارهایی ازاینقبیل انجام دهید:
- ایجاد زیرنویس ناشنوایان یا پاسخ دادن به سؤالات درباره تصاویر
- نوشتن داستان کوتاه یا شعر درباره تصویر
- تشخیص اشیا در تصویر و برگرداندن مختصات جعبه مرزی برای آنها
- مجموعهای از تصاویر را براساس احساس، سبک، یا ویژگیهای دیگر برچسبگذاری یا دستهبندی کنید
این راهنما درباره تولید نوشتار از ورودی تصویر است، اما میتوانید تصاویر را از ورودی تصاویر تولید کنید.
پرش به نمونههای کد
پرش به کد برای پاسخهای جاریشده
|
برای گزینههای بیشتر برای کار با تصاویر، راهنماهای دیگر را ببینید تولید برونداد ساختاریافته گپ چندنوبتی تجزیهوتحلیل تصاویر در دستگاه تولید تصاویر |
قبل از شروع
|
روی ارائهدهنده Gemini API کلیک کنید تا محتوا و کد مختص ارائهدهنده را در این صفحه ببینید. |
اگر قبلاً این کار را نکردهاید،
راهنمای شروع به کار را تکمیل کنید که نحوه
راهاندازی پروژه Firebase، اتصال برنامه به Firebase، افزودن کیت توسعه نرمافزار،
مقداردهی اولیه سرویس پسبست برای ارائهدهنده Gemini API انتخابی، و
ایجاد نمونه GenerativeModel را شرح میدهد.
برای آزمایش و تکرار پیاموارههایتان، توصیه میکنیم از Google AI Studio استفاده کنید.
مدلهایی که از این قابلیت پشتیبانی میکنند
این راهنما درباره تولید نوشتار از ورودی تصویر است و برای مدلهای Gemini زیر کاربرد دارد:
gemini-4-argon-
gemini-3.8-flash(و مدلهای قدیمیترgemini-3.7-flash،gemini-3.6-flash، وgemini-3.5-flash) -
gemini-3.5-flash-lite(وgemini-3.1-flash-liteقدیمیتر)
مدلهای gemini-3.1-pro-preview و Gemini 2.5 با کاربرد عمومی (که
منسوخ شدهاند) نیز از این قابلیت پشتیبانی میکنند.
تولید نوشتار از فایلهای تصویری (کدگذاریشده با base64)
|
پیشاز امتحان کردن این نمونه، بخش
پیشاز شروع این راهنما را تکمیل کنید
تا پروژه و برنامهتان را راهاندازی کنید. در آن بخش، همچنین روی دکمهای برای ارائهدهنده Gemini API انتخابیتان کلیک خواهید کرد تا محتوای مختص ارائهدهنده را در این صفحه ببینید. |
میتوانید از مدل Gemini بخواهید که با پیامواره نوشتاری و تصویری، نوشتار تولید کند—mimeType هر فایل ورودی و خود فایل را ارائه دهید. در ادامه این صفحه، الزامات و توصیههای مربوط به فایلهای ورودی را مشاهده کنید.
Swift
میتوانید
generateContent()
تماس بگیرید تا از ورودی چندحالته نوشتار و تصویر، نوشتار تولید کنید.
ورودی تکفایلی
import FirebaseAILogic
// Initialize the Gemini Developer API backend service.
let ai = FirebaseAI.firebaseAI(backend: .googleAI())
// Create a `GenerativeModel` instance with a model that supports your use case.
let model = ai.generativeModel(modelName: "gemini-3.8-flash")
guard let image = UIImage(systemName: "bicycle") else { fatalError() }
// Provide a text prompt to include with the image
let prompt = "What's in this picture?"
// To generate text output, call generateContent and pass in the prompt
let response = try await model.generateContent(image, prompt)
print(response.text ?? "No text in response.")
ورودی چندفایلی
import FirebaseAILogic
// Initialize the Gemini Developer API backend service.
let ai = FirebaseAI.firebaseAI(backend: .googleAI())
// Create a `GenerativeModel` instance with a model that supports your use case.
let model = ai.generativeModel(modelName: "gemini-3.8-flash")
guard let image1 = UIImage(systemName: "car") else { fatalError() }
guard let image2 = UIImage(systemName: "car.2") else { fatalError() }
// Provide a text prompt to include with the images
let prompt = "What's different between these pictures?"
// To generate text output, call generateContent and pass in the prompt
let response = try await model.generateContent(image1, image2, prompt)
print(response.text ?? "No text in response.")
Kotlin
میتوانید
generateContent()
را فراخوانی کنید تا از ورودی چندحالتی نوشتار و تصویر، نوشتار تولید کنید.
ورودی فایل تکی
// Initialize the Gemini Developer API backend service.
// Create a `GenerativeModel` instance with a model that supports your use case.
val model = Firebase.ai(backend = GenerativeBackend.googleAI())
.generativeModel("gemini-3.8-flash")
// Loads an image from the app/res/drawable/ directory
val bitmap: Bitmap = BitmapFactory.decodeResource(resources, R.drawable.sparky)
// Provide a prompt that includes the image specified above and text
val prompt = content {
image(bitmap)
text("What developer tool is this mascot from?")
}
// To generate text output, call generateContent with the prompt
val response = model.generateContent(prompt)
print(response.text)
ورودی چندفایلی
برای Kotlin، روشهای موجود در این کیت توسعه نرمافزار توابع تعلیق هستند و باید از دامنه Coroutine فراخوانی شوند.
// Initialize the Gemini Developer API backend service.
// Create a `GenerativeModel` instance with a model that supports your use case.
val model = Firebase.ai(backend = GenerativeBackend.googleAI())
.generativeModel("gemini-3.8-flash")
// Loads an image from the app/res/drawable/ directory
val bitmap1: Bitmap = BitmapFactory.decodeResource(resources, R.drawable.sparky)
val bitmap2: Bitmap = BitmapFactory.decodeResource(resources, R.drawable.sparky_eats_pizza)
// Provide a prompt that includes the images specified above and text
val prompt = content {
image(bitmap1)
image(bitmap2)
text("What is different between these pictures?")
}
// To generate text output, call generateContent with the prompt
val response = model.generateContent(prompt)
print(response.text)
Java
میتوانید
generateContent()
تماس بگیرید تا از ورودی چندحالته نوشتار و تصویر، نوشتار تولید کنید.
ListenableFuture را برمیگرداند.
ورودی فایل تکی
// Initialize the Gemini Developer API backend service.
// Create a `GenerativeModel` instance with a model that supports your use case.
GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI())
.generativeModel("gemini-3.8-flash");
// Use the GenerativeModelFutures Java compatibility layer which offers
// support for ListenableFuture and Publisher APIs
GenerativeModelFutures model = GenerativeModelFutures.from(ai);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.sparky);
// Provide a prompt that includes the image specified above and text
Content content = new Content.Builder()
.addImage(bitmap)
.addText("What developer tool is this mascot from?")
.build();
// To generate text output, call generateContent with the prompt
ListenableFuture<GenerateContentResponse> response = model.generateContent(content);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
@Override
public void onSuccess(GenerateContentResponse result) {
String resultText = result.getText();
System.out.println(resultText);
}
@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
}, executor);
ورودی چندفایلی
// Initialize the Gemini Developer API backend service.
// Create a `GenerativeModel` instance with a model that supports your use case.
GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI())
.generativeModel("gemini-3.8-flash");
// Use the GenerativeModelFutures Java compatibility layer which offers
// support for ListenableFuture and Publisher APIs
GenerativeModelFutures model = GenerativeModelFutures.from(ai);
Bitmap bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.sparky);
Bitmap bitmap2 = BitmapFactory.decodeResource(getResources(), R.drawable.sparky_eats_pizza);
// Provide a prompt that includes the images specified above and text
Content prompt = new Content.Builder()
.addImage(bitmap1)
.addImage(bitmap2)
.addText("What's different between these pictures?")
.build();
// To generate text output, call generateContent with the prompt
ListenableFuture<GenerateContentResponse> response = model.generateContent(prompt);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
@Override
public void onSuccess(GenerateContentResponse result) {
String resultText = result.getText();
System.out.println(resultText);
}
@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
}, executor);
Web
میتوانید
generateContent()
تماس بگیرید تا از ورودی چندحالته نوشتار و تصویر، نوشتار تولید کنید.
ورودی فایل تکی
import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend } from "firebase/ai";
// TODO(developer): Replace the following with your app's Firebase configuration
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
// ...
};
// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);
// Initialize the Gemini Developer API backend service.
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
// Create a `GenerativeModel` instance with a model that supports your use case.
const model = getGenerativeModel(ai, { model: "gemini-3.8-flash" });
// Converts a File object to a Part object.
async function fileToGenerativePart(file) {
const base64EncodedDataPromise = new Promise((resolve) => {
const reader = new FileReader();
reader.onloadend = () => resolve(reader.result.split(',')[1]);
reader.readAsDataURL(file);
});
return {
type: "inlineData",
inlineData: { data: await base64EncodedDataPromise, mimeType: file.type },
};
}
async function run() {
// Provide a text prompt to include with the image
const prompt = "What do you see?";
const fileInputEl = document.querySelector("input[type=file]");
const imagePart = await fileToGenerativePart(fileInputEl.files[0]);
// To generate text output, call generateContent with the text and image
const result = await model.generateContent([prompt, imagePart]);
const response = result.response;
const text = response.text();
console.log(text);
}
run();
ورودی چندفایلی
import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend } from "firebase/ai";
// TODO(developer): Replace the following with your app's Firebase configuration
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
// ...
};
// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);
// Initialize the Gemini Developer API backend service.
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
// Create a `GenerativeModel` instance with a model that supports your use case.
const model = getGenerativeModel(ai, { model: "gemini-3.8-flash" });
// Converts a File object to a Part object.
async function fileToGenerativePart(file) {
const base64EncodedDataPromise = new Promise((resolve) => {
const reader = new FileReader();
reader.onloadend = () => resolve(reader.result.split(',')[1]);
reader.readAsDataURL(file);
});
return {
type: "inlineData",
inlineData: { data: await base64EncodedDataPromise, mimeType: file.type },
};
}
async function run() {
// Provide a text prompt to include with the images
const prompt = "What's different between these pictures?";
// Prepare images for input
const fileInputEl = document.querySelector("input[type=file]");
const imageParts = await Promise.all(
[...fileInputEl.files].map(fileToGenerativePart)
);
// To generate text output, call generateContent with the text and images
const result = await model.generateContent([prompt, ...imageParts]);
const response = result.response;
const text = response.text();
console.log(text);
}
run();
Dart
میتوانید
generateContent()
را فراخوانی کنید تا از ورودی چندحالتی نوشتار و تصویر، نوشتار تولید کنید.
ورودی تکفایلی
import 'package:firebase_ai/firebase_ai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';
// Initialize FirebaseApp
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
// Initialize the Gemini Developer API backend service.
// Create a `GenerativeModel` instance with a model that supports your use case.
final model =
FirebaseAI.googleAI().generativeModel(model: 'gemini-3.8-flash');
// Provide a text prompt to include with the image
final prompt = TextPart("What's in the picture?");
// Prepare images for input
final image = await File('image0.jpg').readAsBytes();
final imagePart = InlineDataPart('image/jpeg', image);
// To generate text output, call generateContent with the text and image
final response = await model.generateContent([
Content.multi([prompt,imagePart])
]);
print(response.text);
ورودی چند فایل
import 'package:firebase_ai/firebase_ai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';
// Initialize FirebaseApp
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
// Initialize the Gemini Developer API backend service.
// Create a `GenerativeModel` instance with a model that supports your use case.
final model =
FirebaseAI.googleAI().generativeModel(model: 'gemini-3.8-flash');
final (firstImage, secondImage) = await (
File('image0.jpg').readAsBytes(),
File('image1.jpg').readAsBytes()
).wait;
// Provide a text prompt to include with the images
final prompt = TextPart("What's different between these pictures?");
// Prepare images for input
final imageParts = [
InlineDataPart('image/jpeg', firstImage),
InlineDataPart('image/jpeg', secondImage),
];
// To generate text output, call generateContent with the text and images
final response = await model.generateContent([
Content.multi([prompt, ...imageParts])
]);
print(response.text);
Unity
میتوانید
GenerateContentAsync()
تماس بگیرید تا از ورودی چندحالته نوشتار و تصویر، نوشتار تولید کنید.
ورودی فایل تکی
using Firebase;
using Firebase.AI;
// Initialize the Gemini Developer API backend service.
var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());
// Create a `GenerativeModel` instance with a model that supports your use case.
var model = ai.GetGenerativeModel(modelName: "gemini-3.8-flash");
// Convert a Texture2D into InlineDataParts
var grayImage = ModelContent.InlineData("image/png",
UnityEngine.ImageConversion.EncodeToPNG(UnityEngine.Texture2D.grayTexture));
// Provide a text prompt to include with the image
var prompt = ModelContent.Text("What's in this picture?");
// To generate text output, call GenerateContentAsync and pass in the prompt
var response = await model.GenerateContentAsync(new [] { grayImage, prompt });
UnityEngine.Debug.Log(response.Text ?? "No text in response.");
ورودی چند فایل
using Firebase;
using Firebase.AI;
// Initialize the Gemini Developer API backend service.
var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());
// Create a `GenerativeModel` instance with a model that supports your use case.
var model = ai.GetGenerativeModel(modelName: "gemini-3.8-flash");
// Convert Texture2Ds into InlineDataParts
var blackImage = ModelContent.InlineData("image/png",
UnityEngine.ImageConversion.EncodeToPNG(UnityEngine.Texture2D.blackTexture));
var whiteImage = ModelContent.InlineData("image/png",
UnityEngine.ImageConversion.EncodeToPNG(UnityEngine.Texture2D.whiteTexture));
// Provide a text prompt to include with the images
var prompt = ModelContent.Text("What's different between these pictures?");
// To generate text output, call GenerateContentAsync and pass in the prompt
var response = await model.GenerateContentAsync(new [] { blackImage, whiteImage, prompt });
UnityEngine.Debug.Log(response.Text ?? "No text in response.");
با نحوه انتخاب مدل مناسب برای مورد استفاده و برنامه خود آشنا شوید.
جاریسازی پاسخ
|
قبلاز امتحان کردن این نمونه، بخش
قبلاز شروع این راهنما را تکمیل کنید
تا پروژه و برنامهتان را راهاندازی کنید. در آن بخش، روی دکمهای برای ارائهدهنده انتخابیتان Gemini API نیز کلیک خواهید کرد تا محتوای مختص ارائهدهنده را در این صفحه ببینید. |
با منتظر نماندن برای دریافت کل نتیجه از تولید مدل و درعوض استفاده از جاریسازی برای مدیریت نتایج جزئی، میتوانید تعاملهای سریعتری داشته باشید.
برای جاریسازی پاسخ، با generateContentStream تماس بگیرید.
الزامات و توصیههای مربوط به فایلهای تصویر ورودی
توجه داشته باشید که فایلی که بهعنوان دادههای بهخط ارائه میشود درحین انتقال به base64 کدبندی میشود که اندازه درخواست را افزایش میدهد. اگر درخواست خیلی بزرگ باشد، خطای HTTP 413 دریافت میکنید.
برای کسب اطلاعات دقیق درباره موارد زیر، به صفحه «فایلهای ورودی پشتیبانیشده و الزامات» مراجعه کنید:
- گزینههای مختلف برای ارائه فایل در درخواست (یا بهصورت درونخطی یا بااستفاده از نشانی وب فایل)
- الزامات و روالهای مطلوب برای فایلهای تصویری
انواع MIME تصویر پشتیبانیشده
Gemini مدل چندوجهی از انواع MIME تصویر زیر پشتیبانی میکند:
- PNG -
image/png - JPEG -
image/jpeg - WebP -
image/webp
محدودیتها برای هر درخواست
محدودیت خاصی برای تعداد پیکسلهای تصویر وجود ندارد. بااینحال، تصاویر بزرگتر کوچک میشوند و حاشیه اضافه میشود تا در حداکثر وضوح ۳۰۷۲ × ۳۰۷۲ جا بگیرند و نسبت ابعادی اصلیشان حفظ شود.
حداکثر تعداد فایل در هر درخواست: ۳٬۰۰۰ فایل تصویری
چه کارهای دیگری میتوانید انجام دهید؟
- پیشاز ارسال پیاموارههای طولانی به مدل، با نحوه شمارش نشانهها آشنا شوید.
- Cloud Storage for Firebase را راهاندازی کنید تا بتوانید فایلهای بزرگ را در درخواستهای چندحالتی خود بگنجانید و راهحل مدیریتشدهتری برای ارائه فایلها در پیاموارهها داشته باشید. فایلها میتوانند شامل تصاویر، فایلهای PDF، ویدیو، و صدا باشند.
-
به آماده شدن برای تولید فکر کنید (به
بازبینه تولید مراجعه کنید):
- Firebase App Check را در اسرع وقت اجرا کنید تا به محافظت از Gemini API دربرابر سوءاستفاده کارخواههای غیرمجاز کمک کنید.
- از Firebase Remote Config یا الگوهای پیامواره سرور استفاده کنید تا بتوانید تغییرات درخواستی را در پیکربندیهای ویژگی هوش مصنوعی خود (مانند نام مدل) بدون انتشار نسخه جدیدی از برنامهتان اعمال کنید.
امتحان کردن قابلیتهای دیگر
- مکالمههای چندنوبتی (گپ) بسازید.
- تولید نوشتار از پیاموارههای فقط نوشتاری.
- برونداد ساختاریافته (مثل JSON) از پیاموارههای نوشتاری و چندحالته تولید کنید.
- تصاویر را از پیاموارههای نوشتاری و چندحالته تولید و ویرایش کنید.
- تولید گفتار (هم تکگوینده و هم چندگوینده) بااستفاده از مدلهای Gemini نوشتار به گفتار (TTS).
-
از ابزارها (مثل فراخوانی تابع
و «پایهگذاری» با
Google Search یاGoogle Maps ) برای متصل کردن مدل Gemini به بخشهای دیگر برنامه و سیستمها و اطلاعات خارجی استفاده کنید.
با نحوه کنترل تولید محتوا آشنا شوید
- درک طراحی پیامواره، ازجمله روالهای مطلوب، استراتژیها، و پیاموارههای نمونه.
- پیکربندی پارامترهای مدل مانند حداکثر دادهواحدهای برونداد، احتمال تکرار دادهواحدهای برونداد، و غیره.
- از تنظیمات ایمنی استفاده کنید تا احتمال دریافت پاسخهایی را که ممکن است مضر تلقی شوند تنظیم کنید.
درباره مدلهای پشتیبانیشده بیشتر بدانید
درباره مدلهای دردسترس برای موارد استفاده مختلف و سهمیهها و قیمتگذاری آنها بیشتر بدانید.بازخورد دادن درباره تجربهتان با Firebase AI Logic