函数计算部署AI艺术字应用,生成新春文字头像

简介: 基于 Stable Diffusion Serverless API 解决方案搭建 AI 文字生成应用,支持并发出图。

1.场景介绍


AIGC 热度居高不下,为开发者带来了更多想象力和创业机会。AI 绘画通过人工智能算法和计算机视觉技术,创作出颇具艺术性的绘画作品,在过去的一年里为人们带来了很多惊喜。越来越多的人开始关注 AI 绘画的商业价值,并探索如何通过 AI 绘画开启创业之路。

目前,大多数开发者使用的 AI 绘画项目 Stable Diffusion WebUI 难以适应企业多用户、多场景的复杂需求,用户急需一套成熟解决方案去进行基于 Stable Diffusion 的AI绘画创业,本实验基于函数计算团队开发者的基于 Stable Diffusion Serverless API 解决方案搭建的 AI 文字生成应用,作为一个实验Demo 开放体验,期待为广大开发者 AI 绘画创业及变现提供一些有益思考。


2.实现步骤


2.1 AI艺术字头像应用

借助于 Stable Diffusion Serverless API 的并发能力,生成 AI 艺术字,支持并发出图,生成自己姓氏,名字的头像春节期间“秀”遍朋友圈!

image.png


2.2 准备资源

本场景需要试用产品


2.3 部署应用1: Stable Diffusion 应用

首先需要一个拥有如下内容的 Stable Diffusion 用于提供 API 接口

进入函数计算FC 3.0 控制台,点击左侧应用进行应用中心。如果老用户曾经创建过应用,点击创建应用”也可直达应用中心。注意:一定要确保左上角是“函数计算 FC 3.0” 如果不是可以查看右上角找到“进入函数计算3.0”

image.png



点击“人工智能分类,选择 fc-stable-diffusion-v3 模版,点击立即创建

image.png


确定详细参数进行应用创建,您可以重点注意三个信息的填写,其他使用默认值即可。

image.png


首次使用需要额外的权限,可以根据提示“前往授权

image.png

image.png


点击“创建应用,勾选了解内容,点击同意并继续部署,等待大约1分钟。

image.png

image.png


生成 WebUI 域名(注意保护此链接不外传以免耗费您账户的费用),不要点击链接直接切换到右侧"Serverless API "

image.png


点击"Serverless API" 点击初始化 Serverless API”,再次确认已经开通FC、OSS、OTS 三款产品,勾选已阅读点击下一步

image.png

image.png


进行“角色名的授权,勾选启用 Serverless API”,OTS实例创建方式可以默认自动创建,确认后等待大约 30秒。

image.png


复制“ Serverless API 域名备用,第一个应用创建完毕,开始创建第二个应用。

image.png

2.4 部署应用2: 艺术字应用

返回应用中心,在“人工智能分类选择 fc-ai-character模版,点击立即创建

image.png


填写参数,并创建应用,等待大约

image.png


部署成功后,点击“访问域名开始生成头像。

image.png


2.5 开始生成艺术字头像

进入页面后,选择上方提供的内置样式,点击生成即可开始出图。首次出图需要先启动程序,由于大模型较大,需要一定时间的冷启动,因此第一张图会比较慢,第二张之后速度会明显变快。

image.png

借助函数计算的调度能力,在多个请求同时到来时,会拉起多个实例并发出图,已提升效率(预估的进度和时间仅供参考)

image.png

默认一次会出 4 张图,可以在下方切换查看每张图的细节

image.png


由于 AIGC 出图存在不确定性,通常需要您通过多次尝试已达到最好的效果。页面最下方提供了最近的出图历史,方便进行挑选,鼠标悬浮在上方时,可以看到相关的部分参数。

image.png


2.6 使用Tips

您可以直接使用默认的参数生成头像,如果您对风格有特殊需要,也可以点击高级设置,进行精细配置。复杂的文字结构会影响生成图像的效果,您可以根据高级设置来反复调试图像质量。

  • 文字内容高级设置
  • 文字内容:要展示的文字,建议不要太长
  • 字体:使用的文字字体,您可以选择您本地的一些字体,也可以选择我们为您提供的内置字体。如果有需要也可以贴入网络上的字体文件,加载对应的字体到页面中
  • 前景色/背景色:文字及背景的颜色,将会影响页面的整体色调
  •  x/y:文字位置
  • 体大小:文字大小
  • 边缘发光:部分字体棱角过于分明,渲染时不够自然,通过边缘发光可以尽可能柔化边缘
  •  Stable Diffusion 参数
  • 每次出图数量:并发出图数
  • 提示词:希望图片中出现什么
  • 反向提示词:不希望图片出现什么
  • 模型:使用的基础模型
  • 迭代步数:模型渲染的步数(通常步数越多,图片会越精细,但也会花费更久的时间)
  • 文字生成步骤:控制在什么时候文字介入到生成过程,介入的范围越大,文字越明显,但图片也会更不自然
  • 文字权重:文字模型(ControlNet Tile)的权重
  • 人脸修复:是否开启 Adetailer 进行脸部修复
  • 高清放大倍数:出图结果要放大多少倍(默认是 512 * 512 的图片,比较糊,建议放大 2 倍到 1024 * 1024
  • 高清放大步骤:放大过程中需要执行多少步迭代(也会影响画面内容,适当调高会更加自然、好看)

image.png

页面会缓存之前填写的参数已经Serverless API 地址,如果希望重新部署或清空图片列表,可以点击页面右上角的清空缓存后刷新页面。


2.7 删除应用

如果您后续不再使用,您可以对创建的内容进行删除。删除函数计算应用,进入函数计算应用中心,删除创建的两个应用

image.png


删除oss 对象存储资源,进入 OSS 控制台Bucket列表进行删除

image.png

image.png


删除ots 文件存储资源,进入 ots 控制台Bucket列表进行删除

image.png

如果您有更高阶的开发需求可参考下面的文档。


2.8开发指南

Serverless API 可以提供更好的出图体验,使用时不需要关心 并发”,只需要提交出图任务,等待出图结束即可与标准的接口类似,Serverless API 参数完全兼容,只需要额外增加 stable_diffusion_model 字段,确保不同模型的出图任务打到不同的函数,避免同一个函数由于反复切换模型造成的时间浪费。可以参考下面的代码,在同步模式和异步模式进行切换。


export async function txt2image(
  params: SdParams,
  asyncCallback?: (progress: any) => any
) {
  if (!!asyncCallback) asyncCallback({ progress: 0, etaRelative: 0 });

  const sdParams = {
    prompt: params?.prompt,
    negative_prompt: params?.negativePrompt,
    steps: params.steps,
    n_iter: 1, // 迭代步数
    height: 512,
    width: 512,
    sampler_index: 'DPM++ 2M Karras',
    sampler_name: 'DPM++ 2M Karras',
    batch_size: 1,
    denoising_strength: 0.7, // 噪声抑制强度
    enable_hr: params.hr > 1,
    hr_scale: params.hr,
    hr_upscaler: 'Latent',
    hr_second_pass_steps: params.hrSteps,
    override_settings: {
      sd_model_checkpoint: params.model,
    },
    alwayson_scripts: {
      ...(params.weight > 0 && params.end - params.start > 0
        ? {
            controlnet: {
              args: [
                {
                  control_mode: 0,
                  enabled: true,
                  guidance_start:
                    Math.round((params?.start / params.steps) * 100) / 100, // 起始步数
                  guidance_end:
                    Math.round((params?.end / params.steps) * 100) / 100, // 结束步数
                  input_image: params?.mask,
                  model: 'control_v11f1e_sd15_tile', // 模型
                  // module: 'softedge_pidinet', // 预处理器
                  pixel_perfect: true,
                  resize_mode: 1, // 0 Just Resize; 1 Scale to Fit (Inner Fit); 2 Envelope (Outer Fit)
                  lowvram: false,
                  processor_res: 64, // 预处理器分辨率
                  weight: params?.weight / 100, // 权重
                },
              ],
            },
          }
        : {}),
      ...(params.face
        ? {
            ADetailer: {
              args: [
                {
                  ad_model: 'mediapipe_face_full',
                  ad_use_inpaint_width_height: true,
                  ad_denoising_strength: 0.4,
                },
              ],
            },
          }
        : {}),
    },
  };

  let retryTimes = MaxRetryTimes;
  while (!!retryTimes) {
    const resp = await axios.post(
      `${params?.endpoint}/txt2img`,
      {
        stable_diffusion_model: params.model,
        ...sdParams,
      },
      {
        headers: { 'Request-Type': asyncCallback ? 'async' : 'sync' },
      }
    );

    if (!!resp?.data) {
      if (!!asyncCallback) {
        const taskId = resp?.data?.taskId;

        while (true) {
          const res = await getProgress(params.endpoint, taskId);
          asyncCallback(res?.data);
          if (res?.data?.progress >= 1) {
            break;
          }

          await new Promise((resolve) => setTimeout(resolve, 500));
        }

        while (true) {
          const res = await getResult(params.endpoint, taskId);
          if (res?.data?.status === 'succeeded') {
            return res;
          }
          await new Promise((resolve) => setTimeout(resolve, 500));
        }
      } else {
        // 同步模式可以直接返回
        return resp;
      }
    }
  }

  throw new Error(`重试 ${MaxRetryTimes} 次后,失败`);
}


2.9附录

如果选择了其他风格的 Stable Diffusion,可以通过开启模型管理功能,手动传输模型到云端(需要开通文件存储 NAS)。

在模型库下载 revAnimatedV1.2.2。

image.png


安装并启用 adetailer、controlnet 插件。

image.png


在模型库安装 controlnet 的 tile 模型。

image.png

上传 Lora 模型。


3.总结


基于函数计算3.0 Stable Diffusion Serverless API 解决方案搭建的 AI 文字生成应用,适应企业多用户、多场景的复杂需求,帮助开发者,去进行基于 Stable Diffusion 的AI绘画创业。函数计算 FC 3.0 是事件驱动的全托管计算服务,轻量灵活,更易集成,点击了解更多

作者介绍
目录

相关产品

  • 函数计算