SK には文生図機能も対応しています。本記事では、GPT の DALL·E 2 と DALL·E 3 を使って画像を生成しました。専門の文生図ツールほどではありませんが、適切なプロンプトを使用すれば、いくつかのシーンで有用です。
現在最新の SK パッケージ、1.18.0-rc をプロジェクトに引用しています:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net9.0</TargetFramework>
<RootNamespace>Demo07_TextToPicture</RootNamespace>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.SemanticKernel" Version="1.18.0-rc" />
</ItemGroup>
</Project>
以下は最も簡単な文生図のコード実装で、TextToImage サービスを使用して画像を生成します。GPT で生成する画像のサイズ要件は次の通りです:256x256, 512x512, 1024x1024, 1024x1792, 1792x1024
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.TextToImage;
using System.Diagnostics;
using System.Xml.Linq;
Console.WriteLine("開始生成……");
#pragma warning disable SKEXP0010
var key = File.ReadAllText(@"C:\GPT\key.txt");
var kernel = Kernel.CreateBuilder()
.AddOpenAITextToImage(key,modelId: "dall-e-2")
.Build();
var prompt1 = $"背景は白色、墨で、一匹の騎馬が飛び上がっている場面を描く。馬は画像の中央に配置し、全体が見えるようにする。";
await CreateImageAsync(prompt1);
async Task CreateImageAsync(string prompt)
{
#pragma warning disable SKEXP0001
var dallE = kernel.GetRequiredService<ITextToImageService>();
var imageUrl = await dallE.GenerateImageAsync(prompt, 1024, 1024);
await DownLoadImageAsync(imageUrl);
}
async Task DownLoadImageAsync(string imageUrl)
{
var localPath = "downloaded_image.jpg";
using (var client = new HttpClient())
{
var response = await client.GetAsync(imageUrl);
response.EnsureSuccessStatusCode();
var imageBytes = await response.Content.ReadAsByteArrayAsync();
await File.WriteAllBytesAsync(localPath, imageBytes);
Console.WriteLine("画像ダウンロード成功、保存先:" + localPath);
}
Process.Start(new ProcessStartInfo(localPath) { UseShellExecute = true });
}
DALL·E 2 と DALL·E 3 それぞれで生成された画像の例は以下の通りです。良し悪しは自分で判断してください:
(DALL·E 2生成図例一)
(DALL·E 2生成図例二)
(DALL·E 2生成図例三)
次に、上記コードの第10行を DALL·E 3 に変更して、その効果を見てみましょう:
.AddOpenAITextToImage(key, modelId: "dall-e-3")
(DALL·E 3生成図例一)
(DALL·E 3生成図例二)
(DALL·E 3生成図例三)
(Translated by GPT)