برنامه نویسی

تولید تصاویر از متن با C# و Open AI DALL-E

با استفاده از دات نت سی شارپ، می توانیم یک POC (اثبات مفهوم) ایجاد کنیم که از آن استفاده می کند AI DALL-E را باز کنید مدلی برای تولید تصاویر از ورودی متن.

در این پست وبلاگ، مراحل توسعه C# را بررسی خواهیم کرد. Console Application با استفاده از مدل DALL-E Open AI برای تولید تصاویر از متن.

همچنین، وبلاگ من را با مقالات دیگر بررسی کنید –> https://rmauro.dev

💬 DALL-E از Open AI چیست

DALL-E می‌تواند تقریباً از هر چیزی، از یک زیردریایی زرد گرفته تا یک خوک با بال، تصویر ایجاد کند. این بر روی مجموعه داده عظیمی از تصاویر و توضیحات متنی آموزش داده شده است که به آن امکان می دهد یاد بگیرد که چگونه از ورودی زبان طبیعی تصاویر تولید کند. در این مقاله، نحوه ادغام C# با DALL-E برای تولید تصاویر با استفاده از کد را بررسی خواهیم کرد.

تولید تصاویر از متن با C# و Open AI DALL-E

DALL-E تولید شده است

🧵 توسعه با C

در این پروژه ما از ویژوال استودیو و سی شارپ با دات نت 6 برای ایجاد یک برنامه کنسول استفاده می کنیم.

💡 اگر قصد استفاده از آن را دارید، ممکن است نیاز به انجام برخی تغییرات داشته باشید یکی دیگرنسخه دات نت.

مرحله 1: برنامه های کنسول و وابستگی ها

بیایید برنامه کنسول خود را با سی شارپ و دات نت 6 ایجاد کنیم و وابستگی ها را نصب کنیم.

نام پروژه : ConsoleAppOpenAI.DALL_E

dotnet add Microsoft.Extensions.Http

👇 these are for loading configuration from JSON files
dotnet add Microsoft.Extensions.Configuration
dotnet add Microsoft.Extensions.Configuration.Json

👇 this is optional
dotnet add Microsoft.Extensions.Configuration.UserSecrets
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

دستورات نصب وابستگی ها

تولید تصاویر از متن با C# و Open AI DALL-E

وابستگی های نصب شده

مرحله 2: رابط IOpenAIProxy

در این رابط، ما فقط روش‌های تولید و دانلود تصاویر از Open AI را در معرض دید قرار می‌دهیم.

namespace ConsoleAppOpenAI.DALL_E.HttpServices;

public interface IOpenAIProxy
{
    //👇 Send the Prompt Text with and return a list of image URLs
    Task<GenerateImageResponse> GenerateImages(
        GenerateImageRequest prompt, 
        CancellationToken cancellation = default);

    //👇 Download the Image as byte array
    Task<byte[]> DownloadImage(string url);
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

فایل IOpenAIProxy.cs

مرحله 3: مدل های تصویر را تولید کنید

بیایید مدل های خود را با استفاده از رکوردها تعریف کنیم. رکوردها خواندن را ساده می کنند زیرا آنها فقط کلاس های POCO هستند.

namespace ConsoleAppOpenAI.DALL_E.HttpServices
{
    public record class GenerateImageRequest(
        string Prompt, 
        int N, 
        string Size);

    public record class GenerateImageResponse(
        long Created, 
        GeneratedImageData[] Data);

    public record class GeneratedImageData(string Url);
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تولید مدل های تصویری DTO

مرحله 4: یک حساب هوش مصنوعی باز ایجاد کنید

برای استفاده از OpenAI API، باید یک حساب کاربری در پلتفرم OpenAI ایجاد کنیم. مراحل ثبت نام ساده است و در چند دقیقه تکمیل می شود.

  • ما فقط باید از وب سایت OpenAI در https://platform.openai.com/overview بازدید کنیم.
  • سپس بر روی دکمه “ثبت نام” در گوشه بالا سمت راست کلیک کنید.
  • برای شروع مراحل ثبت نام بر روی دکمه کلیک کنید.

مرحله 5: تنظیم فایل پیکربندی / appsettings.json

برای دسترسی به مدل DALL-E، باید شناسه اشتراک و کلید API را برای برنامه خود تنظیم کنیم.

آنها را از این منوها جمع آوری کنید:

تولید تصاویر از متن با C# و Open AI DALL-E

را به روز کنید appsettings.json یا secrets.json فایل با مقادیر

{
  "OpenAi": {

    "OrganizationId": "{Subscription Id goes here}",
    "ApiKey": "{API Key goes here}",

    "Url": "https://api.openai.com",
    "DALL-E": {
      "Size": "1024x1024",
      "N": 1
    }
  }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

فایل appsettings.json

💡 ست کردن را فراموش نکنید در فهرست خروجی کپی کنید مانند در صورت جدیدتر کپی کنید برای appsettings.json.

مرحله 6: اجرای سرویس HTTP AI را باز کنید

یک کلاس به نام ایجاد کنید OpenAIHttpService با دریافت سازنده واحد IConfiguration و پیکربندی را که به تازگی در جای خود قرار داده ایم بخوانید.

using ConsoleAppOpenAI.DALL_E.HttpServices;
using Microsoft.Extensions.Configuration;
using System.Net.Http.Headers;
using System.Net.Http.Json;
using System.Text.Json;

namespace ConsoleAppOpenAI.DALL_E.Services;

public class OpenAIHttpService : IOpenAIProxy
{
    readonly HttpClient _httpClient;

    readonly string _subscriptionId;

    readonly string _apiKey;

    public OpenAIHttpService(IConfiguration configuration)
    {
        //👇 reading settings from the configuration file
        var openApiUrl = configuration["OpenAi:Url"] ?? throw new ArgumentException(nameof(configuration));
        _httpClient = new HttpClient { BaseAddress = new Uri(openApiUrl) };

        _subscriptionId = configuration["OpenAi:SubscriptionId"];
        _apiKey = configuration["OpenAi:ApiKey"];
    }

    public async Task<GenerateImageResponse> GenerateImages(GenerateImageRequest prompt, CancellationToken cancellation = default)
    {
        throw new NotImplementedException();
    }

    public async Task<byte[]> DownloadImage(string url)
    {
        throw new NotImplementedException();
    }
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بعدی باید اجرای GenerateImages() روش:

public async Task<GenerateImageResponse> GenerateImages(GenerateImageRequest prompt, CancellationToken cancellation = default)
{
    using var rq = new HttpRequestMessage(HttpMethod.Post, "/v1/images/generations");

    var jsonRequest = JsonSerializer.Serialize(prompt, new JsonSerializerOptions
    {
        PropertyNamingPolicy = JsonNamingPolicy.CamelCase
    });

    //serialize the content to JSON and set the correct content type
    rq.Content = new StringContent(jsonRequest);
    rq.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");

    //👇 Including the Authorization Header with API Key
    var apiKey = _apiKey;
    rq.Headers.Authorization = new AuthenticationHeaderValue("Bearer", apiKey);

    //👇 Including the Subscription Id Header
    var subscriptionId = _subscriptionId;
    rq.Headers.TryAddWithoutValidation("OpenAI-Organization", subscriptionId);

    var response = await _httpClient.SendAsync(rq, HttpCompletionOption.ResponseHeadersRead, cancellation);

    response.EnsureSuccessStatusCode();

    var content = response.Content;

    var jsonResponse = await content.ReadFromJsonAsync<GenerateImageResponse>(cancellationToken: cancellation);

    return jsonResponse;
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

آخرین DownloadImage() پیاده سازی روش:

public async Task<byte[]> DownloadImage(string url)
{
    var buffer = await _httpClient.GetByteArrayAsync(url);

    return buffer;
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله 7: مصرف API ها

بازگشت به Program.cs بیایید همه چیز را به هم متصل کنیم و شروع به فراخوانی APIها برای تولید تصاویر کنیم.

using ConsoleAppOpenAI.DALL_E.HttpServices;
using ConsoleAppOpenAI.DALL_E.Services;
using Microsoft.Extensions.Configuration;
using System.Reflection;

Console.WriteLine("Starting commandline for DALL-E [Open AI]");

var config = BuildConfig();

IOpenAIProxy aiClient = new OpenAIHttpService(config);

Console.WriteLine("Type your first Prompt");
var msg = Console.ReadLine();

var nImages = int.Parse(config["OpenAi:DALL-E:N"]);
var imageSize = config["OpenAi:DALL-E:Size"];
var prompt = new GenerateImageRequest(msg, nImages, imageSize);

var result = await aiClient.GenerateImages(prompt);

foreach (var item in result.Data)
{
    Console.WriteLine(item.Url);

    var fullPath = Path.Combine(Directory.GetCurrentDirectory(), $"{Guid.NewGuid()}.png");
    var img = await aiClient.DownloadImage(item.Url);

    await File.WriteAllBytesAsync(fullPath, img);

    Console.WriteLine("New image saved at {0}", fullPath);
}

Console.WriteLine("Press any key to exit");
Console.ReadKey();

static IConfiguration BuildConfig()
{
    var dir = Directory.GetCurrentDirectory();
    var configBuilder = new ConfigurationBuilder()
        .AddJsonFile(Path.Combine(dir, "appsettings.json"), optional: false)
        .AddUserSecrets(Assembly.GetExecutingAssembly());

    return configBuilder.Build();
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

با همه اینها، ما باید یک POC در حال اجرا داشته باشیم که با مدل DALL-E ادغام شود.

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

در اینجا خروجی اولین تلاش من است.

Prompt: Wide and green garden with a lot of flowers, with sunflowers, and a small dog running around
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

به این تصویر زیبا که توسط اپلیکیشن ما و DALL-E تولید شده است نگاه کنید.

تولید تصاویر از متن با C# و Open AI DALL-E
DALL-E تولید شده است

نتیجه

ادغام C# با DALL-E یک فرآیند ساده است که به ما امکان می دهد تصاویر را به صورت برنامه ریزی شده تولید کنیم.

با استفاده از Open AI’s API، به راحتی می توانیم توضیحات متنی را ارسال کنیم و در پاسخ، تصاویر باکیفیت دریافت کنیم.

این ادغام امکانات زیادی مانند تولید تصاویر برای تجسم داده ها، ایجاد آثار هنری سفارشی یا خودکار کردن وظایف ایجاد تصویر را باز می کند. همانطور که DALL-E به پیشرفت خود ادامه می‌دهد، می‌توانیم انتظار برنامه‌های هیجان‌انگیزتری را در آینده داشته باشیم.

کد منبع در: https://github.com/ricardodemauro/OpenAILabs.Console

ارسال شده در: https://rmauro.dev/generating-images-from-text-with-csharp-and-open-ai-dall-e/

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا