• .NET Core如何接入DALL·E 3模型实现AI绘画功能
  • 发布于 2个月前
  • 254 热度
    0 评论
最近,OpenAI 发布了旗下最新绘图模型 DALL·E 3,它可以更加轻松地将用户的想法转化为非常准确的图像。今天我们通过程序接入的方式,体验一下构建在 ChatGPT 之上的 AI 绘画功能。

绘画相关API有三个,分别是 Create image(创建图像)、Create image edit(编辑图像)和 Create image variation(创建图像变体)。这些接口能够让我们用不同的方式来生成或编辑图像,满足不同的需求。下面我们分别上手体验一下这三个功能。


图像对象
The image object(图像对象)表示要生成图像的 URL 或内容,换句话说就是 AI 绘图的输出结果,仅有两个属性:

创建图像

Create image(创建图像)接口是基础绘画功能,它可以根据你提供的文字描述来生成一张图像。你只需要输入一句话或一段话,描述你想要的图像的内容、风格、颜色等特征,就可以得到多张符合要求的图像。Create image 接口的功能是通过调用 v1/images/generations 来实现的。这个 API需要提供以下参数:


调用成功后,API 会返回图像对象。为了演示我们使用 Betalgo.OpenAI 来调用这个接口,Demo 如下:
[HttpPost(nameof(Create))]
public async Task<string> Create([FromForm] string message)
{
    var imageResult = await _openAiService.Image.CreateImage(
        new ImageCreateRequest
        {
            // 堆代码 duidaima.com
            //字符串 必填 所需图像的文本描述。最大长度为 1000 个字符
            Prompt = message,
            //整数或空 自选 默认值为 1 要生成的图像数。必须介于 1 和 10 之间
            N = 1,
            //字符串或空值  自选 默认值为 1024x1024 生成的图像的大小。必须是 256x256、512x512、1024x1024 之一
            Size = StaticValues.ImageStatics.Size.Size256,
            //字符串或空值 自选 默认为 url,必须是 url b64_json  之一
            ResponseFormat = StaticValues.ImageStatics.ResponseFormat.Url,
            //字符串 自选 代表最终用户的唯一标识符,可帮助 OpenAI 监控和检测滥用行为
            //User = "TestUser"
        });

    if (!imageResult.Successful)
        return $"{imageResult.Error.Code}: {imageResult.Error.Message}";

    return imageResult.Results.Select(r => r.Url).First();
}

F5 启动,我们来看一下效果:

可以看到,Create image 接口根据我们提供的文字描述生成了一张图像。但是生成的图像可能不是完美的,这时候,我们可以使用编辑图像接口来对生成的图像进行修改或优化。

编辑图像
Create image edit(编辑图像)接口是进阶绘画功能,它可以根据你提供的修改指令来对已有的图像进行编辑。你只需上传要编辑的图像文件,然后描述你想要对图像进行哪些修改,就可以得到多张经过编辑后的新图像。Create image edit 接口的功能是通过调用 v1/images/edits 来实现的。这个 API 需要提供以下参数:

调用成功后,API 会返回图像对象,Demo 如下:
[HttpPost(nameof(Edit))]
public async Task<string> Edit([FromForm] string message, [FromForm] IFormFile file)
{
    using var memoryStream = new MemoryStream();
    await file.CopyToAsync(memoryStream);

    var imageResult = await _openAiService.Image.CreateImageEdit(
        new ImageEditCreateRequest
        {
            //字符串 必填 要编辑的图像。必须是有效的 PNG 文件,小于 4MB,并且是正方形。如果未提供蒙版,则图像必须具有透明度,该透明度将用作蒙版。
            Image = memoryStream.ToArray(),
            ImageName = file.Name,
            //字符串 必填 所需图像的文本描述。最大长度为 1000 个字符
            Prompt = message,
            //整数或空 自选 默认值为 1 要生成的图像数。必须介于 1 和 10 之间
            N = 1,
            //字符串或空值  自选 默认值为 1024x1024 生成的图像的大小。必须是 256x256、512x512、1024x1024 之一
            Size = StaticValues.ImageStatics.Size.Size256,
            //字符串或空值 自选 默认为 url,必须是 url b64_json  之一
            ResponseFormat = StaticValues.ImageStatics.ResponseFormat.Url,
            //字符串 自选 代表最终用户的唯一标识符,可帮助 OpenAI 监控和检测滥用行为
            //User = "TestUser"
        });

    if (!imageResult.Successful)
        return $"{imageResult.Error.Code}: {imageResult.Error.Message}";

    return imageResult.Results.Select(r => r.Url).First();
}
F5 启动,我们来看一下效果:

可以看到,Create image edit 接口根据我们提供的修改指令编辑了原始图像,生成了一张符合要求的新图像,效果不错。当然,编辑的图像可能不是完全符合我们的预期,这时我们可以使用创建图像变体接口来对编辑后的图像进行变化或优化。

创建图像变体
Create image variation(创建图像变体)接口可以根据你提供的变体指令来对已有的图像进行变化。你只需上传要变体的基础图像,就可以得到多张经过变化后的新图像。

Create image variation 接口的功能是通过调用 v1/images/variations 来实现的。这个 API 需要提供以下参数:

调用成功后,API 会返回图像对象,Demo 如下:
[HttpPost(nameof(Variation))]
public async Task<string> Variation([FromForm] IFormFile file)
{
    using var memoryStream = new MemoryStream();
    await file.CopyToAsync(memoryStream);

    var imageResult = await _openAiService.Image.CreateImageVariation(
        new ImageVariationCreateRequest
        {
            //字符串 必填 要编辑的图像。必须是有效的 PNG 文件,小于 4MB,并且是正方形。如果未提供蒙版,则图像必须具有透明度,该透明度将用作蒙版。
            Image = memoryStream.ToArray(),
            ImageName = file.Name,
            //整数或空 自选 默认值为 1 要生成的图像数。必须介于 1 和 10 之间
            N = 1,
            //字符串或空值  自选 默认值为 1024x1024 生成的图像的大小。必须是 256x256、512x512、1024x1024 之一
            Size = StaticValues.ImageStatics.Size.Size256,
            //字符串或空值 自选 默认为 url,必须是 url b64_json  之一
            ResponseFormat = StaticValues.ImageStatics.ResponseFormat.Url,
            //字符串 自选 代表最终用户的唯一标识符,可帮助 OpenAI 监控和检测滥用行为
            //User = "TestUser"
        });

    if (!imageResult.Successful)
        return $"{imageResult.Error.Code}: {imageResult.Error.Message}";

    return imageResult.Results.Select(r => r.Url).First();
}
F5 启动,我们来看一下效果:

可以看到,Create image variation 接口根据我们提供的原始图像,生成了一张新的图像,效果也不错。如果变体后的图像还有问题,我们可以再次使用 Create image edit 和 Create image variation 接口来对结果进行进一步的调整或优化。
//ChatGPT Image API文档地址
https://platform.openai.com/docs/api-reference/images
//demo源码地址
https://github.com/ynanech/ChatGPT.Demo

用户评论