تولید تصاویر از متن با 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 برای تولید تصاویر با استفاده از کد را بررسی خواهیم کرد.
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
دستورات نصب وابستگی ها
وابستگی های نصب شده
مرحله 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 را برای برنامه خود تنظیم کنیم.
آنها را از این منوها جمع آوری کنید:
را به روز کنید 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 تولید شده است نگاه کنید.
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/