利用Streamlit前端框架开发Stable Diffusion模型图像生成网页应用(下篇)

本文主要是介绍利用Streamlit前端框架开发Stable Diffusion模型图像生成网页应用(下篇),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天介绍亚马逊云科技推出的国际前沿人工智能模型平台Amazon Bedrock上的Stability Diffusion模型开发生成式AI图像生成应用!本系列共有3篇,在上篇中我们学习了如何在亚马逊云科技控制台上体验该模型的每个特色功能,如文生图、图生图、图像修复等。中篇我们介绍了如何通过API代码实现以上功能。

接下来在下篇中我将带大家沉浸式实操,通过Stability Difussion模型API和Streamlit网页前端框架,沉浸式开发一个属于自己的图片生成式AI应用。大家可以通过本博客中的实操项目自己学习AI技能,并应用到日常工作中。

方案所需基础知识 

什么是Amazon Bedrock

Amazon Bedrock 是一项完全托管的服务,通过统一的 API 提供来自 AI21 Labs、Anthropic、Cohere、Meta、Mistral AI、Stability AI 和 Amazon 等领先 AI 公司的高性能基础模型(FMs),同时提供广泛的功能,让开发者能够在确保安全、隐私和负责任 AI 的前提下构建生成式 AI 应用。使用 Amazon Bedrock,开发者们可以:

轻松地测试、评估开发者的用例在不同基础模型下的表现;

  1. 使用微调和检索增强生成(RAG)等技术定制化开发应用程序;
  2. 构建可以使用开发者的企业系统和数据源自动执行任务的智能 Agents。
  3. 由于 Amazon Bedrock 是 Serverless 的服务,开发者无需管理任何基础设施,并且可以使用开发者已经熟悉其它的亚马逊云科技服务安全地集成和部署生成式 AI 功能到开发者的应用中。

什么是 Stability AI 模型? 

Stability AI 是一家致力于开发和提供生成式人工智能模型的公司,其模型被广泛应用于图像生成领域。Stability AI 的模型中最著名的莫非是 Stable Diffusion 生成模型,能够根据用户输入的描述,自动生成高度逼真的图像和文本。这些模型以其卓越的生成能力和灵活性,在应用开发中管饭应用和认可。

本实践包括的内容 

1. 学习Streamlit前端框架以及常用API、服务器启动命令等

2. 利用Streamlit前端框架和Stability Diffusion AI模型开发生成式AI图像生成网页应用。

功能实践具体步骤

模型参数

我们可以在访问Stability Diffusion API时配置如下参数,调整图片生成提示词、风格等配置生成多样化图片:

参数解释
height生成图像的高度
width生成图像的宽度
text_prompts数组形式的文本提示
cfg_scale控制扩散过程对提示文本的遵循程度
clip_guidance_preset采样的预设模式
sampler用于选择扩散过程使用的算法
seed随机噪声种子
steps扩散过程的运行次数
style_preset引导图像模型走向特定风格的预设
extras传递给引擎的其他实验性功能

接下来我们定义在我们的图像生成网页开发过程中会用到的Stable Diffusion模型参数:

DEBUG = os.getenv("DEBUG", False)
DEFAULT_SEED = os.getenv("DEFAULT_SEED", 12345)
MAX_SEED = 4294967295
MODEL_ID = "stability.stable-diffusion-xl-v1"
NEGATIVE_PROMPTS = ["bad anatomy", "distorted", "blurry","pixelated", "dull", "unclear","poorly rendered","poorly Rendered face","poorly drawn face","poor facial details","poorly drawn hands","poorly rendered hands","low resolution","Images cut out at the top, left, right, bottom.","bad composition","mutated body parts","blurry image","disfigured","oversaturated","bad anatomy","deformed body features",
]
STYLES_MAP = {"电影感(Cinematic)": "cinematic","摄影(Photographic)": "photographic","漫画(Comic Book)": "comic-book","折纸(Origami)": "origami","模拟胶片(Analog Film)": "analog-film","幻想艺术(Fantasy Art)": "fantasy-art","线条艺术(Line Art)": "line-art","霓虹朋克粉(Neon Punk)": "neon-punk","三维模型(3D Model)": "3d-model","数码艺术(Digital Art)": "digital-art","增强(Enhance)": "enhance","像素艺术(Pixel Art)": "pixel-art","瓷砖纹理(Tile Texture)": "tile-texture","无(None)": "None",
}

 图片生成API调用函数代码段

1.编写调用 API 的等函数

bedrock_runtime = boto3.client('bedrock-runtime')@st.cache_data(show_spinner=False)
def gen_img_from_bedrock(prompt, style, seed=DEFAULT_SEED,width=512,height=512):body = json.dumps({"text_prompts": [{"text": prompt}],"cfg_scale": 10,"seed": seed,"steps": 50,"style_preset": style,"negative_prompts": NEGATIVE_PROMPTS,"width":width,"height":height})accept = "application/json"contentType = "application/json"response = bedrock_runtime.invoke_model(body=body, modelId=MODEL_ID, accept=accept, contentType=contentType)response_body = json.loads(response.get("body").read())image_bytes = response_body.get("artifacts")[0].get("base64")image_data = base64.b64decode(image_bytes.encode())st.session_state['image_data'] = image_datareturn image_data

其他Streamlit应用相关函数,主要用于管理用户界面组件(滑块、图片上传等)

def update_slider():st.session_state.slider = st.session_state.numericdef update_numin():st.session_state.numeric = st.session_state.slider@st.cache_data
def get_image(image_data):return Image.open(io.BytesIO(image_data))

 2. 主函数界面部分

if __name__ == '__main__':# Create the page titlest.set_page_config(page_title='Amazon Bedrock Stable Diffusion', page_icon='./bedrock.png')st.title('Stable Diffusion Image Generator with Amazon Bedrock')# Create a sidebar with text exampleswith st.sidebar:# Selectboxstyle_key = st.sidebar.selectbox("Choose image style",STYLES_MAP.keys(),index=0)seed_input = st.sidebar.number_input("Seed", value=DEFAULT_SEED, placeholder=DEFAULT_SEED, key="numeric", on_change=update_slider)seed_slider = st.sidebar.slider('Seed Slider', min_value=0, value=seed_input, max_value=MAX_SEED, step=1, key="slider",on_change=update_numin, label_visibility="hidden")seed = seed_input | seed_slider# 图片宽度width = st.sidebar.slider('Width', min_value=256, value=512, max_value=1024, step=64, key="width_slider")# 图片高度height = st.sidebar.slider('Height', min_value=256, value=512, max_value=1024, step=64, key="height_slider")

3.主函数调用Stable Diffusion API 部分 

    prompt = st.text_input('Input your prompt')if not prompt:st.warning("Please input a prompt")# Block the image generation if there is no input promptst.stop()if st.button("Generate", type="primary"):if len(prompt) > 0:st.markdown(f"""This will show an image using **Stable Diffusion** with your desired prompt entered : {prompt}""")# Create a spinner to show the image is being generatedwith st.spinner('Generating image based on prompt'):if not DEBUG:style = STYLES_MAP[style_key]print("Generate image with Style:{} with Seed:{} and Width:{} and Height:{} and Prompt: {}".format(style_key, seed, width , height  , prompt))# Send request to Bedrockimage_data = gen_img_from_bedrock(prompt=prompt, style=style, seed=seed,width=width,height=height)st.success('Generated stable diffusion image')if st.session_state.get("image_data", None):image = get_image(st.session_state.image_data)st.image(image)if DEBUG:st.write(st.session_state)

4. 启动streamlit服务器,加载网页应用

streamlit run intro_streaming.py --server.port 8080 

网页应用预览

5. 打开运行命令返回的"External URL"就可以进入到我们开发的网页应用前端了

6. 若想关停streamlit前端应用,在键盘点击Ctrl+C

以上就是沉浸式使用Amazon Bedrock上的Stability AI模型开发图像生成AI网页应用的下篇内容。欢迎大家关注小李哥的亚马逊云科技AI服务深入调研系列,未来获取更多国际前沿的AWS云开发/云架构方案。 

这篇关于利用Streamlit前端框架开发Stable Diffusion模型图像生成网页应用(下篇)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1127406

相关文章

Java使用Spire.Barcode for Java实现条形码生成与识别

《Java使用Spire.BarcodeforJava实现条形码生成与识别》在现代商业和技术领域,条形码无处不在,本教程将引导您深入了解如何在您的Java项目中利用Spire.Barcodefor... 目录1. Spire.Barcode for Java 简介与环境配置2. 使用 Spire.Barco

SpringBoot返回文件让前端下载的几种方式

《SpringBoot返回文件让前端下载的几种方式》文章介绍了开发中文件下载的两种常见解决方案,并详细描述了通过后端进行下载的原理和步骤,包括一次性读取到内存和分块写入响应输出流两种方法,此外,还提供... 目录01 背景02 一次性读取到内存,通过响应输出流输出到前端02 将文件流通过循环写入到响应输出流

Python + Streamlit项目部署方案超详细教程(非Docker版)

《Python+Streamlit项目部署方案超详细教程(非Docker版)》Streamlit是一款强大的Python框架,专为机器学习及数据可视化打造,:本文主要介绍Python+St... 目录一、针对 Alibaba Cloud linux/Centos 系统的完整部署方案1. 服务器基础配置(阿里

SpringBoot+Vue3整合SSE实现实时消息推送功能

《SpringBoot+Vue3整合SSE实现实时消息推送功能》在日常开发中,我们经常需要实现实时消息推送的功能,这篇文章将基于SpringBoot和Vue3来简单实现一个入门级的例子,下面小编就和大... 目录前言先大概介绍下SSE后端实现(SpringBoot)前端实现(vue3)1. 数据类型定义2.

Python+wxPython开发一个文件属性比对工具

《Python+wxPython开发一个文件属性比对工具》在日常的文件管理工作中,我们经常会遇到同一个文件存在多个版本,或者需要验证备份文件与源文件是否一致,下面我们就来看看如何使用wxPython模... 目录引言项目背景与需求应用场景核心需求运行结果技术选型程序设计界面布局核心功能模块关键代码解析文件大

C++多线程开发环境配置方法

《C++多线程开发环境配置方法》文章详细介绍了如何在Windows上安装MinGW-w64和VSCode,并配置环境变量和编译任务,使用VSCode创建一个C++多线程测试项目,并通过配置tasks.... 目录下载安装 MinGW-w64下载安装VS code创建测试项目配置编译任务创建 tasks.js

SpringBoot集成iText快速生成PDF教程

《SpringBoot集成iText快速生成PDF教程》本文介绍了如何在SpringBoot项目中集成iText9.4.0生成PDF文档,包括新特性的介绍、环境准备、Service层实现、Contro... 目录SpringBoot集成iText 9.4.0生成PDF一、iText 9新特性与架构变革二、环

Nginx内置变量应用场景分析

《Nginx内置变量应用场景分析》Nginx内置变量速查表,涵盖请求URI、客户端信息、服务器信息、文件路径、响应与性能等类别,这篇文章给大家介绍Nginx内置变量应用场景分析,感兴趣的朋友跟随小编一... 目录1. Nginx 内置变量速查表2. 核心变量详解与应用场景3. 实际应用举例4. 注意事项Ng

前端Visual Studio Code安装配置教程之下载、汉化、常用组件及基本操作

《前端VisualStudioCode安装配置教程之下载、汉化、常用组件及基本操作》VisualStudioCode是微软推出的一个强大的代码编辑器,功能强大,操作简单便捷,还有着良好的用户界面,... 目录一、Visual Studio Code下载二、汉化三、常用组件1、Auto Rename Tag2

idea-java序列化serialversionUID自动生成方式

《idea-java序列化serialversionUID自动生成方式》Java的Serializable接口用于实现对象的序列化和反序列化,通过将对象转换为字节流来存储或传输,实现Serializa... 目录简介实现序列化serialVersionUID配置使用总结简介Java.io.Seripyth