当前位置:   article > 正文

[腾讯云 HAI 域探秘] AI 应用 DIY 设计_/sdapi/v1/txt2img

/sdapi/v1/txt2img

在这里插入图片描述

背景

AIGC是目前计算机领域最热门的话题之一,AI绘画、AI写作、AI聊天等场景都属于AIGC的具体形式,这些应用通常使基于机器学习和深度学习技术,以及自然语言处理、计算机视觉等领域的方法,生成人工智能产生的内容,从而模拟人类的创造性和沟通能力,提高人员的生产效率。

如何DIY一个自己的AI应用?

本文将以创建AI绘画应用为例,介绍如何DIY一个自己的AI应用。这里主要利用腾讯云高性能应用服务 HAI 提供的基于StableDiffusion 的开源模型创建AI绘画应用。AI绘画是一种利用深度学习算法进行创作的绘图方式,广泛应用于动画设计、游戏、电影、插画等领域。

HAI 是什么?

腾讯云高性能应用服务 HAI 是为开发者量身打造的澎湃算力平台,一站式、即开即用的GPU云服务。在 HAI 中,根据应用智能匹配并推选出最适合的GPU算力资源,以确保您在数据科学、LLM、AI作画等高性能应用中获得最佳性价比。

HAI 提供多种高性能应用部署场景:

  • AI作画:视觉设计、游戏;
  • AI对话/写作:Agent、企业知识库;
  • AI开发/测试:学术研究、论文;

为什么选择 HAI ?

自己训练并部署AI大模型,通常面临算力成本高、模型调试困难、服务不稳定、部署不方便等问题。另外,自己训练并部署AI大模型通常很难及时更新迭代。但依托HAI平台则不需要担心这些问题,我们可以更加专注于自定义AI应用的搭建。

HAI 服务优势:

  • 高性价比:根据应用匹配推选GPU算力资源,实现最高性价比,基础配置0.88/小时;
  • 模型丰富:提供多种预装模型环境,包含如StableDiffusion、ChatGLM等热门模型;
  • 部署简单:分钟级自动构建LLM、AI作画等应用环境;打通必备云服务组件,大幅简化云服务配置流程;
  • 调试简单:图形化界面,可以进行中英文切换,让AI调试更加简单;

HAI 使用

HAI 申请

1、内测资格申请

HAI目前还属于内测阶段,所以,需要在官网申请之后内测资格并通过审核之后才能使用。审核速度也比较快,24小时内处理完成,正常填写信息,一次性就能通过。

内测资格申请地址:https://cloud.tencent.com/act/pro/hai

2、创建实例

申请通过之后,进入内测申请,选择体验HAI;
在这里插入图片描述
点击新建,进入创建算力实例;这里可以选择AI框架:Pytorch或者TensorFlow;也可以选择AI模型:Stable Diffusion、Llama2 7B、Llama2 13B、ChatGLM2 6B等;
在这里插入图片描述
AI框架
AI模型
选择自己要创建的模型以及配置,我这里选择的是StableDiffusion模型基础配置类型,0.88/小时(记得预先充值),点击购买之后,等待5-8分钟创建完成;
在这里插入图片描述
点击实例可以查看实例详情信息;
在这里插入图片描述
3、启动模型

选择以图形化界面的方式启动我们创建的实例,建议新手选择这种方式先体验一下HAI;
在这里插入图片描述
4、插件配置

如果不适应英文界面,可以选择中文扩展插件,修改为中文配置;安装中文插件,耗时较长,也可以不安装,这个看自己选择;
在这里插入图片描述
在这里插入图片描述
接下来,分为两个部分介绍HAI搭建AI绘画应用。第一种方式是HAI的基础使用,直接在HAI平台创建自己的AI绘画应用,然后直接通过图形化界面操作;第二种方式是使用HAI提供的API接口,搭建自己的在线AI绘画应用平台;

HAI 图形化界面AI应用——StableDiffusionWebUI

通过图形化方式进入StableDiffusionWebUI之后,就可以进行AI绘画了;

AI绘画应用提供文本生成图片、图片风格转换、图片识别、图像融合等主要功能,还可以修改参数优化图像效果;
在这里插入图片描述
这里选用了最基本的参数进行演示,如果需要更加定制化的绘画,可以进一步对可调参数进行设置,形成自己的绘画风格;

主要参数及解释如下:

  • 提示词:主要描述图像,包括内容风格等信息,原始的webui会对这个地方有字数的限制,可以安装一些插件突破字数的限制;
  • 反向提示词:为了提供给模型,我们不需要的风格;
  • 提示词相关性(CFG scale):分类器自由引导尺度——图像与提示符的一致程度——越低的值产生的结果越有创意,数值越大成图越贴近描述文本。一般设置为7;
  • 采样方法(Sampling method):采样模式,即扩散算法的去噪声采样模式会影响其效果,不同的采样模式的结果会有很大差异,一般是默认选择euler,具体效果我也在逐步尝试中;
  • 采样迭代步数(Sampling steps):在使用扩散模型生成图片时所进行的迭代步骤。每经过一次迭代,AI就有更多的机会去比对prompt和当前结果,并作出相应的调整。需要注意的是,更高的迭代步数会消耗更多的计算时间和成本,但并不意味着一定会得到更好的结果。然而,如果迭代步数过少,一般不少于50,则图像质量肯定会下降;
  • 随机种子(Seed):随机数种子,生成每张图片时的随机种子,这个种子是用来作为确定扩散初始状态的基础。不懂的话,用随机的即可;

HAI StableDiffusion API服务——在线AI绘画平台搭建

HAI 也提供了StableDiffusion API服务,开发者可以调用API搭建自己的在线AI绘画平台;

1、进入终端,启动模型

首先进入jupyter_lab,然后进入终端;
在这里插入图片描述
在这里插入图片描述
2、启动 StableDiffusion 模型

启动模型,执行命令:

cd /root/stable-diffusion-webui
python launch.py --nowebui --xformers --opt-split-attention  --listen --port 7862
  • 1
  • 2

命令说明:

  • –nowebui:以 API 模式启动;
  • –xformers:使用xformers库,改善了内存消耗和速度;
  • –opt-split-attention Cross attention layer optimization:优化显着减少了内存使用,默认情况下torch.cuda,包括 NVidia 和 AMD 卡;
  • –listen:默认启动绑定的 ip 是 127.0.0.1,如果想让同个局域网的人都可以访问的话,可以配置该参数(会自动绑定 0.0.0.0 ip);
  • –port:默认端口是 7860,如果想换个端口,可以配置该参数,例如:–port 7862;
  • –gradio-auth username:password:如果你希望给 webui 设置登录密码,可以配置该参数,例如:–gradio-auth GitLqr:123456;在这里插入图片描述
    3、添加安全组规则

添加对外暴露的规则,并配置地址和端口;
在这里插入图片描述
在这里插入图片描述
4、接口示例

配置完成后输入 服务器IP地址:端口号/docs可查看相关的 API 接口;

swagger接口文档示例:
在这里插入图片描述
在这里插入图片描述

常用的API示例:

/sdapi/v1/txt2img 文字生图 POST

这个接口主要用于文本描述生成图像,POST请求在发送请求的时候会携带一个消息体,消息体中包含用于图像生成的参数,比如提示词、反向提示词、随机种子、采样迭代步数等主要参数;请求成功之后,接口返回生成的图片的base64编码,将对应的编码解析即可得到图片;

请求参数

{
    "prompt": "A galloping horse",
    "negative_prompt": "(deformed,distorted,disfigured:1.0),poorly drawn,bad anatomy,wrong anatomy,extra limb,missing limb,floating limbs,(mutated hands and fingers:1.5),disconnected limbs,mutation,mutated,ugly,disgusting,blurry,amputation,flowers,human,man,woman",
    "Steps": 50,
    "Seed'": 1791574510
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

注意:这里的参数并不完整,只列举了主要的参数信息,详细参数信息参考swagger生成的接口文档;

响应值:

{
   "images": ["xxxxxxxxxxxxxx"]// 这里是一个base64格式的字符串数组,根据你请求的图片数量而定
   "parameters": {  ... },//此处为你输入的body 
   "info": "{...}"// 返回的图片的信息
}
  • 1
  • 2
  • 3
  • 4
  • 5

/sdapi/v1/img2img图片生图 POST

这个接口主要用于图像生成图像,前端提供图片选择框让用户上传提示图片,然后将图片编码压缩之后发送给当前接口,接口解析消息内容,提取图片信息,然后生成相应的图像并返回响应值;

请求参数和响应值与/sdapi/v1/txt2img接口类似,不过多赘述;

5、接口的三种利用方式

① 可以直接利用Python中的requests包发送POST请求,调用接口获取响应数据;

代码示例:

import json
import base64
import requests

your_ip = '0.0.0.0' # HAI服务器IP地址
your_port = 7862  # SD api 监听的端口

def submit_post(url: str,data: dict):
  # 发送请求
  return requests.post(url,data=json.dumps(data))

def save_encoded_image(b64_image: str,output_path: str):
  # 保存图片
  with open(output_path,"wb") as image_file:
      image_file.write(base64.b64decode(b64_image))

if __name__ == '__main__':
  # /sdapi/v1/txt2img
  txt2img_url = f'http://{your_ip}:{your_port}/sdapi/v1/txt2img'
  data = {
     'prompt': 'a pretty cat,cyberpunk art,kerem beyit,very cute robot zen,Playful,Independent,beeple |',
     'negative_prompt':'(deformed,distorted,disfigured:1.0),poorly drawn,bad anatomy,wrong anatomy,extra limb,missing limb,floating limbs,(mutated hands and fingers:1.5),disconnected limbs,mutation,mutated,ugly,disgusting,blurry,amputation,flowers,human,man,woman',
     'Steps':50,
     'Seed':1791574510
  }
  response = submit_post(txt2img_url,data)
  save_encoded_image(response.json()['images'][0],'cat.png')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

② 也可以利用接口调用工具,例如postman或者Apifox工具调用接口,获取响应数据;
Apifox请求示例
地址示例:http://ip地址:port/sdapi/v1/txt2img
请求参数示例:

{
    "prompt": "A galloping horse",
    "negative_prompt": "(deformed,distorted,disfigured:1.0),poorly drawn,bad anatomy,wrong anatomy,extra limb,missing limb,floating limbs,(mutated hands and fingers:1.5),disconnected limbs,mutation,mutated,ugly,disgusting,blurry,amputation,flowers,human,man,woman",
    "Steps": 50,
    "Seed'": 1791574510
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

响应结果:

{
   "images": [...]// 这里是一个base64格式的字符串数组,根据你请求的图片数量而定
   "parameters": {  ... },//此处为你输入的body 
   "info": "{...}"// 返回的图片的信息
}
  • 1
  • 2
  • 3
  • 4
  • 5

可以复制images结果中的base64编码,转换即可得到图片,参考转换地址:https://tool.jisuapi.com/base642pic.html

③ 搭建在线AI应用平台(这也是本文采用的主要方式)

下载模板代码:https://gitee.com/mmliujc/tencent_gpu/raw/master/sd_api.zip
需要有一定的Vue开发基础,并且基于vite打包项目,vite.config.js内容如下:

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue()],
  // 服务端代理
  server: {
    // 监听主机 127.0.0.1,如果是 0.0.0.0 则代表所有ip都可以访问该前端项目
    host: "127.0.0.1", //这里可不用管
    // 将 /sdapi、 /controlnet 开头的请求都代理到服务端地址 http://127.0.0.1:7862
    proxy: {
      '/sdapi': {
        target: 'http://your_ip:7862', //这里配置为您的服务端地址+端口
        changeOrigin: true
      },
      '/controlnet': {
        target: 'http://your_ip:7862', //这里配置为您的服务端地址+端口
        changeOrigin: true
      }
    }
  }
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

然后,执行vite项目启动命令:

npm run dev
  • 1

启动即可看到配置画面:
在这里插入图片描述
当然,这里我只给出了最基本的平台搭建方式,大家可以结合自己的创意带来更多的玩法,比如在自己的网站中添加文本生成图像的功能,或者根据用户的信息随机生成头像等功能;

最后,如果不需要实例运行,记得及时关闭,运行会一直收费的;

总结

整体来说,HAI 提供的服务体验还是相当不错的,对于专业和非专业人员都适用,也给更多的人带来了体验AIGC产品的机会,如果使用得当,这也是提高效率的生产力工具。如果你也想试一试AIGC的产品,那HAI是一个不错的选择,诸多优势在前文也已经提到了。

另外,如果HAI可以进一步提供一个低代码平台,支持用户以拖拉拽的形式搭建应用,一站式部署、发布,那势必会是一个不错的选择。

遗憾的是,由于时间的关系无法一次性试用所有的模型,本次试用只进行了AI做画的应用,实际上还有AI Chat等其它功能,这些就交给大家来体验,欢迎评论区沟通交流。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/95546
推荐阅读
相关标签
  

闽ICP备14008679号