AIGC是目前计算机领域最热门的话题之一,AI绘画、AI写作、AI聊天等场景都属于AIGC的具体形式,这些应用通常使基于机器学习和深度学习技术,以及自然语言处理、计算机视觉等领域的方法,生成人工智能产生的内容,从而模拟人类的创造性和沟通能力,提高人员的生产效率。
如何DIY一个自己的AI应用?
本文将以创建AI绘画应用为例,介绍如何DIY一个自己的AI应用。这里主要利用腾讯云高性能应用服务 HAI 提供的基于StableDiffusion 的开源模型创建AI绘画应用。AI绘画是一种利用深度学习算法进行创作的绘图方式,广泛应用于动画设计、游戏、电影、插画等领域。
腾讯云高性能应用服务 HAI 是为开发者量身打造的澎湃算力平台,一站式、即开即用的GPU云服务。在 HAI 中,根据应用智能匹配并推选出最适合的GPU算力资源,以确保您在数据科学、LLM、AI作画等高性能应用中获得最佳性价比。
HAI 提供多种高性能应用部署场景:
自己训练并部署AI大模型,通常面临算力成本高、模型调试困难、服务不稳定、部署不方便等问题。另外,自己训练并部署AI大模型通常很难及时更新迭代。但依托HAI平台则不需要担心这些问题,我们可以更加专注于自定义AI应用的搭建。
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等;
选择自己要创建的模型以及配置,我这里选择的是StableDiffusion模型基础配置类型,0.88/小时(记得预先充值),点击购买之后,等待5-8分钟创建完成;
点击实例可以查看实例详情信息;
3、启动模型
选择以图形化界面的方式启动我们创建的实例,建议新手选择这种方式先体验一下HAI;
4、插件配置
如果不适应英文界面,可以选择中文扩展插件,修改为中文配置;安装中文插件,耗时较长,也可以不安装,这个看自己选择;
接下来,分为两个部分介绍HAI搭建AI绘画应用。第一种方式是HAI的基础使用,直接在HAI平台创建自己的AI绘画应用,然后直接通过图形化界面操作;第二种方式是使用HAI提供的API接口,搭建自己的在线AI绘画应用平台;
通过图形化方式进入StableDiffusionWebUI之后,就可以进行AI绘画了;
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
命令说明:
配置完成后输入 服务器IP地址:端口号/docs
可查看相关的 API 接口;
常用的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
}
注意:这里的参数并不完整,只列举了主要的参数信息,详细参数信息参考swagger生成的接口文档;
响应值:
{
"images": ["xxxxxxxxxxxxxx"],// 这里是一个base64格式的字符串数组,根据你请求的图片数量而定
"parameters": { ... },//此处为你输入的body
"info": "{...}"// 返回的图片的信息
}
② /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')
② 也可以利用接口调用工具,例如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
}
响应结果:
{
"images": [...],// 这里是一个base64格式的字符串数组,根据你请求的图片数量而定
"parameters": { ... },//此处为你输入的body
"info": "{...}"// 返回的图片的信息
}
可以复制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
}
}
}
})
然后,执行vite项目启动命令:
npm run dev
启动即可看到配置画面:
当然,这里我只给出了最基本的平台搭建方式,大家可以结合自己的创意带来更多的玩法,比如在自己的网站中添加文本生成图像的功能,或者根据用户的信息随机生成头像等功能;
最后,如果不需要实例运行,记得及时关闭,运行会一直收费的;
整体来说,HAI 提供的服务体验还是相当不错的,对于专业和非专业人员都适用,也给更多的人带来了体验AIGC产品的机会,如果使用得当,这也是提高效率的生产力工具。如果你也想试一试AIGC的产品,那HAI是一个不错的选择,诸多优势在前文也已经提到了。
另外,如果HAI可以进一步提供一个低代码平台,支持用户以拖拉拽的形式搭建应用,一站式部署、发布,那势必会是一个不错的选择。
遗憾的是,由于时间的关系无法一次性试用所有的模型,本次试用只进行了AI做画的应用,实际上还有AI Chat等其它功能,这些就交给大家来体验,欢迎评论区沟通交流。