داشبورد توسعه‌دهنده
پرسش از هوش مصنوعی
پرسش از هوش مصنوعی

تولید تصاویر با Imagen از طریق API بومی

نحوه تولید تصاویر با کیفیت بالا با استفاده از مدل‌های Imagen گوگل را از طریق اندپوینت بومی Gemini v1beta در AvalAI بیاموزید.

توجه

این راهنما بر اساس مستندات رسمی Imagen گوگل با تغییرات برای اندپوینت API AvalAI تهیه شده است. این محتوا نحوه استفاده از قابلیت‌های قدرتمند تولید تصویر Imagen را از طریق زیرساخت AvalAI نشان می‌دهد.

نکته مهم

برای بهترین نتایج، توصیه می‌شود از پرامپت‌های انگلیسی استفاده کنید زیرا مدل‌های تولید تصویر معمولا برای زبان انگلیسی بهینه‌سازی شده‌اند. برای پشتیبانی فنی یا سوالات، با t.me/AvalAISupport تماس بگیرید.

مقدمه

Imagen مدل تولید تصویر با وفاداری بالای گوگل است که قادر به تولید تصاویر واقع‌گرایانه و با کیفیت بالا از پرامپت‌های متنی است. از طریق اندپوینت بومی Gemini v1beta AvalAI، می‌توانید به سه نوع مختلف Imagen 4 دسترسی داشته باشید:

  • imagen-4.0-generate-001 - کیفیت استاندارد، عملکرد متعادل
  • imagen-4.0-ultra-generate-001 - بالاترین کیفیت خروجی
  • imagen-4.0-fast-generate-001 - بهینه شده برای سرعت

تمام تصاویر تولید شده شامل واترمارک SynthID برای تایید اصالت هستند.

مدل‌های Imagen موجود

مدل‌های Imagen 4.0

مدلکیفیتسرعتمورد استفاده
imagen-4.0-generate-001استانداردمتوسطتولید تصویر عمومی
imagen-4.0-ultra-generate-001فوق‌العاده بالاکندترخروجی‌های حرفه‌ای و با کیفیت بالا
imagen-4.0-fast-generate-001خوبسریعنمونه‌سازی سریع، تولید انبوه

مدل Imagen 3.0

مدلکیفیتسرعتمورد استفاده
imagen-3.0-generate-002استانداردمتوسطپشتیبانی قدیمی، تولید پایدار

تولید ساده تصویر

در اینجا مثال ساده‌ای از تولید تصویر با Imagen از طریق اندپوینت v1beta AvalAI آورده شده است:

bash
# تولید تصویر با استفاده از Imagen 4.0 Fast
curl -X POST \
  "https://api.avalai.ir/v1beta/models/imagen-4.0-fast-generate-001:predict" \
  -H "Authorization: Bearer $AVALAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "instances": [
      {
        "prompt": "Robot holding a red skateboard"
      }
    ],
    "parameters": {
      "sampleCount": 1
    }
  }'
python
import requests
import base64
import json

# پیکربندی
API_KEY = "your-avalai-api-key"
API_URL = "https://api.avalai.ir/v1beta/models/imagen-4.0-fast-generate-001:predict"

# آماده‌سازی درخواست
headers = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}

payload = {
    "instances": [{"prompt": "Robot holding a red skateboard"}],
    "parameters": {"sampleCount": 1},
}

# تولید تصویر
response = requests.post(API_URL, headers=headers, json=payload)
result = response.json()

# ذخیره تصویر تولید شده
if "predictions" in result:
    for idx, prediction in enumerate(result["predictions"]):
        # رمزگشایی تصویر base64
        image_data = base64.b64decode(prediction["bytesBase64Encoded"])

        # ذخیره در فایل
        with open(f"generated_image_{idx}.png", "wb") as f:
            f.write(image_data)

        print(f"تصویر به عنوان generated_image_{idx}.png ذخیره شد")

    # چاپ اطلاعات استفاده
    if "usageMetadata" in result:
        print(f"\nاستفاده: {result['usageMetadata']}")
javascript
const fs = require('fs');

// پیکربندی
const API_KEY = 'your-avalai-api-key';
const API_URL = 'https://api.avalai.ir/v1beta/models/imagen-4.0-fast-generate-001:predict';

async function generateImage() {
  try {
    const response = await fetch(API_URL, {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${API_KEY}`,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        instances: [
          {
            prompt: 'Robot holding a red skateboard'
          }
        ],
        parameters: {
          sampleCount: 1
        }
      })
    });

    const result = await response.json();

    // ذخیره تصاویر تولید شده
    if (result.predictions) {
      result.predictions.forEach((prediction, idx) => {
        // رمزگشایی تصویر base64
        const imageBuffer = Buffer.from(prediction.bytesBase64Encoded, 'base64');
        
        // ذخیره در فایل
        fs.writeFileSync(`generated_image_${idx}.png`, imageBuffer);
        console.log(`تصویر به عنوان generated_image_${idx}.png ذخیره شد`);
      });

      // چاپ اطلاعات استفاده
      if (result.usageMetadata) {
        console.log('\nاستفاده:', result.usageMetadata);
      }
    }
  } catch (error) {
    console.error('خطا:', error);
  }
}

generateImage();
go
package main

import (
	"bytes"
	"encoding/base64"
	"encoding/json"
	"fmt"
	"io"
	"net/http"
	"os"
)

type ImageRequest struct {
	Instances  []Instance `json:"instances"`
	Parameters Parameters `json:"parameters"`
}

type Instance struct {
	Prompt string `json:"prompt"`
}

type Parameters struct {
	SampleCount int `json:"sampleCount"`
}

type ImageResponse struct {
	Predictions   []Prediction  `json:"predictions"`
	UsageMetadata UsageMetadata `json:"usageMetadata"`
}

type Prediction struct {
	BytesBase64Encoded string `json:"bytesBase64Encoded"`
	MimeType           string `json:"mimeType"`
}

type UsageMetadata struct {
	GeneratedImages int     `json:"generatedImages"`
	Cost            float64 `json:"cost"`
}

func main() {
	apiKey := "your-avalai-api-key"
	apiURL := "https://api.avalai.ir/v1beta/models/imagen-4.0-fast-generate-001:predict"

	// آماده‌سازی درخواست
	reqBody := ImageRequest{
		Instances: []Instance{
			{Prompt: "Robot holding a red skateboard"},
		},
		Parameters: Parameters{
			SampleCount: 1,
		},
	}

	jsonData, err := json.Marshal(reqBody)
	if err != nil {
		fmt.Println("Error marshaling JSON:", err)
		return
	}

	// ایجاد درخواست
	req, err := http.NewRequest("POST", apiURL, bytes.NewBuffer(jsonData))
	if err != nil {
		fmt.Println("Error creating request:", err)
		return
	}

	req.Header.Set("Authorization", "Bearer "+apiKey)
	req.Header.Set("Content-Type", "application/json")

	// ارسال درخواست
	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		fmt.Println("Error sending request:", err)
		return
	}
	defer resp.Body.Close()

	// تجزیه پاسخ
	body, _ := io.ReadAll(resp.Body)
	var result ImageResponse
	json.Unmarshal(body, &result)

	// ذخیره تصاویر
	for idx, prediction := range result.Predictions {
		imageData, err := base64.StdEncoding.DecodeString(prediction.BytesBase64Encoded)
		if err != nil {
			fmt.Println("Error decoding image:", err)
			continue
		}

		filename := fmt.Sprintf("generated_image_%d.png", idx)
		err = os.WriteFile(filename, imageData, 0644)
		if err != nil {
			fmt.Println("Error saving image:", err)
			continue
		}

		fmt.Printf("تصویر به عنوان %s ذخیره شد\n", filename)
	}

	// چاپ استفاده
	fmt.Printf("\nاستفاده: %+v\n", result.UsageMetadata)
}
php
<?php

// پیکربندی
$apiKey = 'your-avalai-api-key';
$apiUrl = 'https://api.avalai.ir/v1beta/models/imagen-4.0-fast-generate-001:predict';

// آماده‌سازی درخواست
$data = [
    'instances' => [
        [
            'prompt' => 'Robot holding a red skateboard'
        ]
    ],
    'parameters' => [
        'sampleCount' => 1
    ]
];

// مقداردهی اولیه cURL
$ch = curl_init($apiUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Authorization: Bearer ' . $apiKey,
    'Content-Type: application/json'
]);

// اجرای درخواست
$response = curl_exec($ch);
curl_close($ch);

// تجزیه پاسخ
$result = json_decode($response, true);

// ذخیره تصاویر تولید شده
if (isset($result['predictions'])) {
    foreach ($result['predictions'] as $idx => $prediction) {
        // رمزگشایی تصویر base64
        $imageData = base64_decode($prediction['bytesBase64Encoded']);
        
        // ذخیره در فایل
        $filename = "generated_image_{$idx}.png";
        file_put_contents($filename, $imageData);
        echo "تصویر به عنوان {$filename} ذخیره شد\n";
    }
    
    // چاپ اطلاعات استفاده
    if (isset($result['usageMetadata'])) {
        echo "\nاستفاده: " . json_encode($result['usageMetadata']) . "\n";
    }
}

?>

فرمت پاسخ

API پاسخی با ساختار زیر برمی‌گرداند:

json
{
  "predictions": [
    {
      "bytesBase64Encoded": "BASE64_ENCODED_IMAGE_DATA...",
      "mimeType": "image/png"
    }
  ],
  "usageMetadata": {
    "generatedImages": 1,
    "cost": 0.02,
    "inputTokens": 0,
    "outputTokens": 1000
  }
}

پارامترهای پیکربندی

Imagen از پارامترهای پیکربندی زیر از طریق شیء parameters پشتیبانی می‌کند:

تعداد نمونه

کنترل تعداد تصاویری که باید تولید شوند (1-4):

bash
curl -X POST \
  "https://api.avalai.ir/v1beta/models/imagen-4.0-generate-001:predict" \
  -H "Authorization: Bearer $AVALAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "instances": [{"prompt": "A serene mountain landscape"}],
    "parameters": {
      "sampleCount": 4
    }
  }'
python
payload = {
    "instances": [{"prompt": "A serene mountain landscape"}],
    "parameters": {"sampleCount": 4},  # تولید 4 تصویر
}
javascript
const payload = {
  instances: [{ prompt: 'A serene mountain landscape' }],
  parameters: {
    sampleCount: 4  // تولید 4 تصویر
  }
};
go
reqBody := ImageRequest{
	Instances: []Instance{
		{Prompt: "A serene mountain landscape"},
	},
	Parameters: Parameters{
		SampleCount: 4, // تولید 4 تصویر
	},
}
php
$data = [
    'instances' => [
        ['prompt' => 'A serene mountain landscape']
    ],
    'parameters' => [
        'sampleCount' => 4  // تولید 4 تصویر
    ]
];

نسبت ابعاد

نسبت‌های ابعاد پشتیبانی شده: "1:1", "3:4", "4:3", "9:16", "16:9" (پیش‌فرض: "1:1"):

bash
curl -X POST \
  "https://api.avalai.ir/v1beta/models/imagen-4.0-generate-001:predict" \
  -H "Authorization: Bearer $AVALAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "instances": [{"prompt": "A widescreen cinematic landscape"}],
    "parameters": {
      "aspectRatio": "16:9",
      "sampleCount": 1
    }
  }'
python
payload = {
    "instances": [{"prompt": "A widescreen cinematic landscape"}],
    "parameters": {"aspectRatio": "16:9", "sampleCount": 1},  # فرمت عریض
}
javascript
const payload = {
  instances: [{ prompt: 'A widescreen cinematic landscape' }],
  parameters: {
    aspectRatio: '16:9',  // فرمت عریض
    sampleCount: 1
  }
};
go
type Parameters struct {
	SampleCount int    `json:"sampleCount"`
	AspectRatio string `json:"aspectRatio,omitempty"`
}

reqBody := ImageRequest{
	Instances: []Instance{
		{Prompt: "A widescreen cinematic landscape"},
	},
	Parameters: Parameters{
		SampleCount: 1,
		AspectRatio: "16:9", // فرمت عریض
	},
}
php
$data = [
    'instances' => [
        ['prompt' => 'A widescreen cinematic landscape']
    ],
    'parameters' => [
        'aspectRatio' => '16:9',  // فرمت عریض
        'sampleCount' => 1
    ]
];

تولید افراد

کنترل اینکه آیا تصاویر افراد تولید شوند یا نه:

  • "dont_allow" - مسدود کردن تولید تصاویر افراد
  • "allow_adult" - فقط تولید تصاویر بزرگسالان (پیش‌فرض)
  • "allow_all" - تولید تصاویر شامل کودکان

توجه

پارامتر "allow_all" در مناطق EU، UK، CH و MENA محدود است.

bash
curl -X POST \
  "https://api.avalai.ir/v1beta/models/imagen-4.0-generate-001:predict" \
  -H "Authorization: Bearer $AVALAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "instances": [{"prompt": "Portrait of a professional chef"}],
    "parameters": {
      "personGeneration": "allow_adult",
      "sampleCount": 1
    }
  }'
python
payload = {
    "instances": [{"prompt": "Portrait of a professional chef"}],
    "parameters": {"personGeneration": "allow_adult", "sampleCount": 1},
}
javascript
const payload = {
  instances: [{ prompt: 'Portrait of a professional chef' }],
  parameters: {
    personGeneration: 'allow_adult',
    sampleCount: 1
  }
};
go
type Parameters struct {
	SampleCount      int    `json:"sampleCount"`
	PersonGeneration string `json:"personGeneration,omitempty"`
}

reqBody := ImageRequest{
	Instances: []Instance{
		{Prompt: "Portrait of a professional chef"},
	},
	Parameters: Parameters{
		SampleCount:      1,
		PersonGeneration: "allow_adult",
	},
}
php
$data = [
    'instances' => [
        ['prompt' => 'Portrait of a professional chef']
    ],
    'parameters' => [
        'personGeneration' => 'allow_adult',
        'sampleCount' => 1
    ]
];

راهنمای پرامپت Imagen

منبع: راهنمای نوشتن پرامپت زیر از راهنمای رسمی پرامپت Imagen گوگل اقتباس شده است.

اصول پایه نوشتن پرامپت

حداکثر طول پرامپت: 480 توکن

یک پرامپت خوب توصیفی و واضح است و از کلمات کلیدی و تغییردهنده‌های معنادار استفاده می‌کند. به سه عنصر کلیدی فکر کنید:

  1. سوژه: شیء، شخص، حیوان یا منظره‌ای که می‌خواهید
  2. زمینه و پس‌زمینه: محیطی که سوژه در آن قرار دارد
  3. سبک: سبک هنری یا عکاسی که می‌خواهید

مثال ساختار پرامپت

مثال: یک طرح (سبک) از یک ساختمان آپارتمانی مدرن (سوژه) احاطه شده با آسمان‌خراش‌ها (زمینه)

اصلاح تکراری

ساده شروع کنید و به تدریج جزئیات اضافه کنید:

پرامپت کوتاه:

پارکی در بهار کنار دریاچه

پرامپت متوسط:

پارکی در بهار کنار دریاچه، خورشید روی دریاچه غروب می‌کند، ساعت طلایی

پرامپت تفصیلی:

پارکی در بهار کنار دریاچه، خورشید روی دریاچه غروب می‌کند، ساعت طلایی، گل‌های وحشی قرمز

نکات کلیدی

  • از زبان توصیفی استفاده کنید: از صفت‌ها و قیدهای دقیق استفاده کنید
  • زمینه ارائه دهید: اطلاعات پس‌زمینه را برای درک بهتر شامل کنید
  • به سبک‌های خاص اشاره کنید: در صورت تمایل به هنرمندان یا جنبش‌های هنری اشاره کنید
  • جزئیات چهره را بهبود دهید: از کلماتی مانند "پرتره" برای رندر بهتر چهره استفاده کنید
  • به آزمایش ادامه دهید: تا زمانی که به نتیجه دلخواه برسید تکرار کنید

تولید متن در تصاویر

Imagen می‌تواند متن را در تصاویر تولید شده ادغام کند. این دستورالعمل‌ها را دنبال کنید:

  • متن را کوتاه نگه دارید: به 25 کاراکتر یا کمتر محدود کنید
  • عبارات متعدد: از 2-3 عبارت متمایز استفاده کنید، از بیش از سه عبارت اجتناب کنید
  • محل قرارگیری را مشخص کنید: راهنمایی کنید که متن کجا باید ظاهر شود (اگرچه موقعیت دقیق ممکن است متفاوت باشد)
  • سبک فونت: ویژگی‌های کلی فونت را ذکر کنید
  • اندازه فونت: اندازه نسبی را مشخص کنید (کوچک، متوسط، بزرگ)

مثال پرامپت:

پوستری با متن "Summerland" با فونت پررنگ به عنوان عنوان، 
زیر این متن شعار "Summer never felt so good" قرار دارد

پرامپت‌های عکاسی

برای تصاویر واقع‌گرایانه، با "A photo of..." شروع کنید و تغییردهنده‌ها اضافه کنید:

فاصله دوربین

  • نمای نزدیک
  • زوم کرده
  • ماکرو
  • از فاصله دور گرفته شده

موقعیت دوربین

  • عکس هوایی
  • از پایین
  • سطح چشم
  • نمای پرنده

نورپردازی

  • نورپردازی طبیعی
  • نورپردازی دراماتیک
  • تن‌های گرم
  • تن‌های سرد
  • ساعت طلایی
  • نورپردازی استودیو

تنظیمات دوربین

  • تاری حرکت
  • فوکوس نرم
  • افکت بوکه
  • حالت پرتره
  • فوکوس تیز

انواع لنز

  • 35mm
  • 50mm
  • چشم ماهی
  • زاویه عریض
  • لنز ماکرو
  • تله‌فوتو

انواع فیلم

  • سیاه و سفید
  • پولاروید
  • فیلم قدیمی
  • کداکروم

سبک‌های نقاشی و هنر

از عبارات "A painting of..." یا "A sketch of..." استفاده کنید و توصیف‌گرهای سبک اضافه کنید:

سبک‌های هنری

  • طراحی مدادی فنی
  • طراحی زغالی
  • طراحی مدادرنگی
  • نقاشی آبرنگ
  • نقاشی رنگ روغن
  • هنر دیجیتال
  • آرت دکو
  • مینیمالیست
  • انتزاعی

ارجاعات هنری تاریخی

  • نقاشی امپرسیونیست
  • نقاشی رنسانس
  • هنر پاپ
  • سبک کوبیست
  • سبک سورئالیست

تکنیک‌های پیشرفته

اشکال و مواد

تصاویر منحصر به فرد با مشخص کردن مواد ایجاد کنید:

کیف ورزشی ساخته شده از پنیر
لوله‌های نئون به شکل پرنده
صندلی راحتی ساخته شده از کاغذ، سبک اوریگامی

تغییردهنده‌های کیفیت تصویر

کیفیت خروجی را با این کلمات کلیدی بهبود دهید:

  • عمومی: با کیفیت بالا، زیبا، سبک‌دار، دقیق
  • عکس‌ها: 4K، HDR، عکس استودیو، عکاس حرفه‌ای
  • هنر: توسط یک حرفه‌ای، بسیار دقیق، شاهکار

موارد استفاده واقع‌گرایانه

مورد استفادهنوع لنزفاصله کانونیجزئیات اضافی
پرترهپرایم، زوم24-35mmفیلم سیاه و سفید، عمق میدان
اشیاء/طبیعت بی‌جانماکرو60-105mmجزئیات بالا، نورپردازی کنترل شده
ورزش/حیات وحشتله‌فوتو100-400mmسرعت شاتر سریع، ردیابی حرکت
مناظرزاویه عریض10-24mmنوردهی طولانی، فوکوس تیز

بهترین شیوه‌ها

  1. ساده شروع کنید، سپس اصلاح کنید

    • با یک مفهوم پایه شروع کنید
    • به صورت تکراری جزئیات اضافه کنید
    • تنوع‌ها را تست کنید تا بهترین رویکرد را پیدا کنید
  2. با اصطلاحات فنی خاص باشید

    • در صورت مرتبط بودن از اصطلاحات عکاسی استفاده کنید
    • سبک‌های هنری را به وضوح مشخص کنید
    • برای نتایج حرفه‌ای، تغییردهنده‌های کیفیت را شامل کنید
  3. از چندین تصویر استفاده کنید

    • 2-4 تنوع با sampleCount تولید کنید
    • نتایج را مقایسه کنید تا بهترین خروجی را پیدا کنید
    • از پرامپت‌های مختلف برای تنوع استفاده کنید
  4. برای مورد استفاده خود بهینه‌سازی کنید

    • نسبت‌های ابعاد مناسب را برای پلتفرم خود انتخاب کنید
    • نوع مناسب مدل Imagen را انتخاب کنید (استاندارد/اولترا/سریع)
    • نیازهای کیفیت را با سرعت تولید متعادل کنید
  5. به سیاست‌های محتوا احترام بگذارید

    • از پرامپت‌هایی که محتوای صریح درخواست می‌کنند اجتناب کنید
    • کاراکترها یا برندهای دارای حق نشر را درخواست نکنید
    • پارامتر personGeneration را به درستی استفاده کنید

رفع مشکلات

مشکلات کیفیت تصویر

مشکل: تصاویر تولید شده فاقد جزئیات هستند یا تار به نظر می‌رسند

راه‌حل‌ها:

  • تغییردهنده‌های کیفیت اضافه کنید (4K، HDR، با کیفیت بالا، دقیق)
  • از زبان توصیفی خاص‌تر استفاده کنید
  • برای بالاترین کیفیت، مدل Ultra را امتحان کنید
  • اصطلاحات فنی عکاسی را شامل کنید

مشکلات تولید متن

مشکل: متن در تصاویر نادرست یا ضعیف رندر می‌شود

راه‌حل‌ها:

  • متن را زیر 25 کاراکتر نگه دارید
  • از عبارات واضح و ساده استفاده کنید
  • سبک و اندازه فونت را مشخص کنید
  • چندین بار تولید را امتحان کنید
  • توضیح متن را در ابتدای پرامپت قرار دهید

نتایج غیرمنتظره

مشکل: تصاویر با پرامپت مورد نظر مطابقت ندارند

راه‌حل‌ها:

  • ساختار پرامپت (سوژه، زمینه، سبک) را بررسی کنید
  • جزئیات خاص‌تری اضافه کنید
  • از سبک‌ها یا هنرمندان مرجع استفاده کنید
  • عبارات جایگزین را امتحان کنید
  • چندین نمونه برای مقایسه تولید کنید

خطاهای API

مشکل: درخواست شکست می‌خورد یا خطا برمی‌گرداند

راه‌حل‌ها:

  • تایید کنید که کلید API صحیح است
  • طول پرامپت را بررسی کنید (حداکثر 480 توکن)
  • اطمینان حاصل کنید sampleCount بین 1-4 است
  • مقادیر نسبت ابعاد را تایید کنید

منابع مرتبط


این راهنما بر اساس مستندات رسمی Imagen گوگل با تغییرات برای زیرساخت API AvalAI تهیه شده است. برای اطلاعات بیشتر درباره قابلیت‌های Imagen از مستندات رسمی گوگل دیدن کنید.