# Semantic Kernel: 文転図


SK には文生図機能も対応しています。本記事では、GPT の DALL·E 2 と DALL·E 3 を使って画像を生成しました。専門の文生図ツールほどではありませんが、適切なプロンプトを使用すれば、いくつかのシーンで有用です。

現在最新の SK パッケージ、1.18.0-rc をプロジェクトに引用しています：

```xml
<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

```cs
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生成図例一](https://mmbiz.qpic.cn/sz_mmbiz_png/4CAA63nvHRBsSYW8ibNaic4Hs3pF8OchUUT5U5hWgU27r7via35zrsKeiaEXpbcbSqJf9wdCKx0ywpApqXyKSbmzfw/640?wx_fmt=png&from=appmsg)

*（DALL·E 2生成図例一）*

![DALL·E 2生成図例二](https://mmbiz.qpic.cn/sz_mmbiz_png/4CAA63nvHRBsSYW8ibNaic4Hs3pF8OchUU3X7Rjiafkus4HZPsGXTaaV9WjVicOib7pYJ7ewdasRaXE2cBMIt2DuY7A/640?wx_fmt=png&from=appmsg)

*（DALL·E 2生成図例二）*

![DALL·E 2生成図例三](https://mmbiz.qpic.cn/sz_mmbiz_png/4CAA63nvHRBsSYW8ibNaic4Hs3pF8OchUUibVIGbHgiaIGQgHYzXsw33dI2ia8EibOESs6TmzYTVlEQJDS1yOZSm8GxQ/640?wx_fmt=png&from=appmsg)

*（DALL·E 2生成図例三）*

次に、上記コードの第10行を DALL·E 3 に変更して、その効果を見てみましょう：

```cs
.AddOpenAITextToImage(key, modelId: "dall-e-3")
```

![DALL·E 3生成図例一](https://mmbiz.qpic.cn/sz_mmbiz_png/4CAA63nvHRBsSYW8ibNaic4Hs3pF8OchUUlMOMtZJf8kbn0D7y2NvXB3wLuwz87nsmOpMp3e42epM9pIKvibNf3Tw/640?wx_fmt=png&from=appmsg)

*（DALL·E 3生成図例一）*

![DALL·E 3生成図例二](https://mmbiz.qpic.cn/sz_mmbiz_png/4CAA63nvHRBsSYW8ibNaic4Hs3pF8OchUUbcw180nwoshky2cZoJrYZUSQKNEuLWEy1VX0fG7DZKqvkziaAPVaNyQ/640?wx_fmt=png&from=appmsg)

*（DALL·E 3生成図例二）*

![DALL·E 3生成図例三](https://mmbiz.qpic.cn/sz_mmbiz_png/4CAA63nvHRBsSYW8ibNaic4Hs3pF8OchUUo8htbHve6mNuIpibibpSGAAH3aoX8QFBhEFtze1DSJL3hYW11ichJrbwQ/640?wx_fmt=png&from=appmsg)

*（DALL·E 3生成図例三）*

(Translated by GPT)

元のリンク：https://mp.weixin.qq.com/s?__biz=MzA3NDM1MzIyMQ==&mid=2247488352&idx=1&sn=89891d9ce5daa591824dc99c1acf58b4&chksm=9f004c4aa877c55c4d459ecd087e42fcceb2323bb75f6664eb6eabe4097c46a9bf40592b4451&token=211600531&lang=zh_CN#rd&wt.mc_id=MVP_325642