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 艺术字,支持并发出图,生成自己姓氏,名字的头像春节期间“秀”遍朋友圈!
2.2 准备资源
2.3 部署应用1: Stable Diffusion 应用
首先需要一个拥有如下内容的 Stable Diffusion 用于提供 API 接口
进入函数计算FC 3.0 控制台,点击左侧“应用”进行应用中心。如果老用户曾经创建过应用,点击“创建应用”也可直达应用中心。注意:一定要确保左上角是“函数计算 FC 3.0” 如果不是可以查看右上角找到“进入函数计算3.0”
点击“人工智能”分类,选择 fc-stable-diffusion-v3 模版,点击“立即创建”
确定详细参数进行应用创建,您可以重点注意三个信息的填写,其他使用默认值即可。
- 地域:选择距离您较近的地区,如果后续有更多出图需要,可以考虑选择海外地区,以方便 hugging face 等网站的连接。
- 命名空间:如果您部署已经部署多个 SD,请在这里进行区分,新用户可使用默认值。
- 绘图类型:选择艺术字。
首次使用需要额外的权限,可以根据提示“前往授权”
点击“创建应用”,勾选了解内容,点击“同意并继续部署”,等待大约1分钟。
生成 WebUI 域名(注意保护此链接不外传以免耗费您账户的费用),不要点击链接,直接切换到右侧"Serverless API "
点击"Serverless API" 点击“初始化 Serverless API”,再次确认已经开通“FC、OSS、OTS” 三款产品,勾选“已阅读”点击“下一步”
进行“角色名”的授权,勾选“启用 Serverless API”,OTS实例创建方式可以默认“自动创建”,确认后等待大约 30秒。
复制“ Serverless API 域名”备用,第一个应用创建完毕,开始创建第二个应用。
2.4 部署应用2: 艺术字应用
返回应用中心,在“人工智能”分类选择 fc-ai-character模版,点击“立即创建”
填写参数,并创建应用,等待大约
部署成功后,点击“访问域名”开始生成头像。
2.5 开始生成艺术字头像
进入页面后,选择上方提供的内置样式,点击“生成”即可开始出图。首次出图需要先启动程序,由于大模型较大,需要一定时间的冷启动,因此第一张图会比较慢,第二张之后速度会明显变快。
借助函数计算的调度能力,在多个请求同时到来时,会拉起多个实例并发出图,已提升效率(预估的进度和时间仅供参考)
由于 AIGC 出图存在不确定性,通常需要您通过多次尝试已达到最好的效果。页面最下方提供了最近的出图历史,方便进行挑选,鼠标悬浮在上方时,可以看到相关的部分参数。
2.6 使用Tips
您可以直接使用默认的参数生成头像,如果您对风格有特殊需要,也可以点击高级设置,进行精细配置。复杂的文字结构会影响生成图像的效果,您可以根据高级设置来反复调试图像质量。
- 文字内容高级设置
- 文字内容:要展示的文字,建议不要太长
- 字体:使用的文字字体,您可以选择您本地的一些字体,也可以选择我们为您提供的内置字体。如果有需要也可以贴入网络上的字体文件,加载对应的字体到页面中
- 前景色/背景色:文字及背景的颜色,将会影响页面的整体色调
- x/y:文字位置
- 体大小:文字大小
- 边缘发光:部分字体棱角过于分明,渲染时不够自然,通过边缘发光可以尽可能柔化边缘
- Stable Diffusion 参数
- 每次出图数量:并发出图数
- 提示词:希望图片中出现什么
- 反向提示词:不希望图片出现什么
- 模型:使用的基础模型
- 迭代步数:模型渲染的步数(通常步数越多,图片会越精细,但也会花费更久的时间)
- 文字生成步骤:控制在什么时候文字介入到生成过程,介入的范围越大,文字越明显,但图片也会更不自然
- 文字权重:文字模型(ControlNet Tile)的权重
- 人脸修复:是否开启 Adetailer 进行脸部修复
- 高清放大倍数:出图结果要放大多少倍(默认是 512 * 512 的图片,比较糊,建议放大 2 倍到 1024 * 1024)
- 高清放大步骤:放大过程中需要执行多少步迭代(也会影响画面内容,适当调高会更加自然、好看)
页面会缓存之前填写的参数已经Serverless API 地址,如果希望重新部署或清空图片列表,可以点击页面右上角的清空缓存后刷新页面。
2.7 删除应用
如果您后续不再使用,您可以对创建的内容进行删除。删除函数计算应用,进入函数计算应用中心,删除创建的两个应用
删除oss 对象存储资源,进入 OSS 控制台,Bucket列表进行删除
删除ots 文件存储资源,进入 ots 控制台,Bucket列表进行删除
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。
安装并启用 adetailer、controlnet 插件。
在模型库安装 controlnet 的 tile 模型。
上传 Lora 模型。
3.总结
基于函数计算3.0 Stable Diffusion Serverless API 解决方案搭建的 AI 文字生成应用,适应企业多用户、多场景的复杂需求,帮助开发者,去进行基于 Stable Diffusion 的AI绘画创业。函数计算 FC 3.0 是事件驱动的全托管计算服务,轻量灵活,更易集成,点击了解更多。