Z-Image-Turbo-rinaiqiao-huiyewunv实战教程:API封装(FastAPI)+WebUI双模式支持架构设计

news2026/3/16 7:17:42
Z-Image-Turbo-rinaiqiao-huiyewunv实战教程API封装FastAPIWebUI双模式支持架构设计1. 引言从单机工具到服务化架构如果你已经体验过Z-Image-Turbo-rinaiqiao-huiyewunv这个二次元人物绘图工具可能会发现一个问题它确实好用但只能在本地浏览器里操作。如果你想把它集成到自己的应用里或者让团队其他成员也能调用就得想别的办法了。这就是我们今天要解决的问题。我将带你把这个单机工具升级成双模式支持的架构——既保留原来的WebUI界面又增加一个FastAPI封装的接口服务。这样你就能继续用WebUI像以前一样在浏览器里点点鼠标就能生成图片通过API调用在自己的代码里直接调用绘图功能集成到其他系统团队共享使用部署在服务器上大家都能访问整个升级过程并不复杂我会手把手带你完成。即使你之前没怎么接触过FastAPI跟着教程走也能搞定。2. 架构设计思路为什么选择双模式在开始写代码之前我们先搞清楚为什么要这样设计。理解了这个后面的实现就顺理成章了。2.1 单机工具的局限性原来的工具是基于Streamlit的Web应用它有几个天生的限制只能通过浏览器交互每次生成图片都要打开网页、填写参数、点击按钮难以集成如果你想在后台自动批量生成图片或者把绘图功能嵌入到其他系统里几乎不可能并发能力弱Streamlit本身不适合处理高并发请求多人同时使用体验会变差2.2 双模式架构的优势我们设计的双模式架构解决了这些问题原始单机工具 ↓ 核心绘图引擎Z-Image Turbo模型 ├── WebUI模式Streamlit→ 保留原有交互体验 └── API模式FastAPI→ 提供编程接口这样设计的好处兼容性老用户继续用WebUI新需求通过API满足灵活性你可以根据场景选择最合适的使用方式可扩展性未来想加新功能只需要在核心引擎里实现两个模式都能受益2.3 技术选型为什么是FastAPI你可能想问为什么选FastAPI而不是Flask或者其他框架我选择FastAPI主要基于这几个考虑性能好基于Starlette和Pydantic速度很快适合API服务类型提示Python的类型提示能让代码更健壮减少错误自动文档Swagger UI和ReDoc自动生成不用自己写API文档异步支持原生支持async/await处理并发请求更高效学习曲线平缓如果你会用Python上手FastAPI很快最重要的是FastAPI和Streamlit可以很好地共存它们都是Python生态里的优秀工具。3. 环境准备与项目结构在开始写代码之前我们需要准备好开发环境并规划好项目结构。3.1 环境依赖确保你已经安装了Z-Image-Turbo-rinaiqiao-huiyewunv的基础环境。如果没有先按照原来的教程安装好。然后安装FastAPI相关的依赖# 基础依赖 pip install fastapi uvicorn # 可选但推荐的依赖 pip install python-multipart # 处理文件上传 pip install pydantic-settings # 配置管理 pip install loguru # 更好的日志 # 开发工具 pip install httpx # 测试API用3.2 项目结构规划这是我们的项目目录结构z-image-turbo-dual-mode/ ├── core/ # 核心绘图引擎 │ ├── __init__.py │ ├── engine.py # 绘图核心逻辑 │ └── config.py # 配置管理 ├── api/ # API服务 │ ├── __init__.py │ ├── main.py # FastAPI主应用 │ ├── routers/ # 路由模块 │ │ ├── __init__.py │ │ └── generate.py # 生成图片的路由 │ └── schemas.py # 数据模型定义 ├── webui/ # WebUI界面 │ ├── __init__.py │ └── app.py # Streamlit应用 ├── shared/ # 共享模块 │ ├── __init__.py │ └── utils.py # 工具函数 ├── weights/ # 模型权重文件 │ └── rinaiqiao.safetensors ├── requirements.txt # 依赖列表 ├── docker-compose.yml # Docker编排可选 └── README.md # 项目说明这样的结构清晰明了core/放核心绘图逻辑两个模式都共用api/和webui/分别对应两种使用方式shared/放一些公共的工具函数配置文件、权重文件单独存放4. 核心绘图引擎重构原来的绘图逻辑是直接写在Streamlit应用里的我们需要把它抽出来做成独立的模块。4.1 创建绘图引擎类在core/engine.py中我们创建一个DrawingEngine类import torch import gc from diffusers import StableDiffusionXLPipeline from safetensors.torch import load_file import logging logger logging.getLogger(__name__) class DrawingEngine: 二次元人物绘图引擎核心类 def __init__(self, model_path: str, weight_path: str): 初始化绘图引擎 Args: model_path: Z-Image Turbo模型路径 weight_path: 辉夜大小姐微调权重路径 self.model_path model_path self.weight_path weight_path self.pipeline None self.device cuda if torch.cuda.is_available() else cpu # 默认参数针对Turbo模型优化 self.default_steps 20 self.default_cfg_scale 2.0 self.default_width 1024 self.default_height 1024 logger.info(f绘图引擎初始化设备: {self.device}) def load_model(self): 加载模型和权重 try: logger.info(开始加载Z-Image Turbo模型...) # 加载基础模型 self.pipeline StableDiffusionXLPipeline.from_pretrained( self.model_path, torch_dtypetorch.bfloat16, use_safetensorsTrue ) # 启用CPU卸载节省显存 self.pipeline.enable_model_cpu_offload() # 加载微调权重 self._load_lora_weights() # 优化CUDA内存分配 if self.device cuda: torch.cuda.set_per_process_memory_fraction(0.9) torch.cuda.empty_cache() logger.info(模型加载完成) return True except Exception as e: logger.error(f模型加载失败: {e}) return False def _load_lora_weights(self): 加载LoRA微调权重 try: logger.info(开始注入辉夜大小姐微调权重...) # 加载权重文件 lora_weights load_file(self.weight_path) # 清理权重键名移除transformer./model.前缀 cleaned_weights {} for key, value in lora_weights.items(): # 移除常见的前缀 new_key key.replace(transformer., ).replace(model., ) cleaned_weights[new_key] value # 加载到pipeline self.pipeline.load_lora_weights( pretrained_model_name_or_path_or_dictcleaned_weights, adapter_namerinaiqiao ) # 设置适配器 self.pipeline.set_adapters([rinaiqiao]) logger.info(权重注入成功) except Exception as e: logger.error(f权重加载失败: {e}) # 即使权重加载失败也继续使用基础模型 logger.warning(将使用基础模型继续运行) def generate_image( self, prompt: str, negative_prompt: str None, steps: int None, cfg_scale: float None, width: int None, height: int None, seed: int None ): 生成图片 Args: prompt: 正面提示词 negative_prompt: 负面提示词 steps: 生成步数 cfg_scale: CFG缩放系数 width: 图片宽度 height: 图片高度 seed: 随机种子 Returns: PIL.Image对象或错误信息 # 使用默认值或传入值 steps steps or self.default_steps cfg_scale cfg_scale or self.default_cfg_scale width width or self.default_width height height or self.default_height # 设置负面提示词默认值 if negative_prompt is None: negative_prompt ( low quality, worst quality, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, jpeg artifacts, signature, watermark, username, blurry ) # 设置随机种子 if seed is not None: generator torch.Generator(deviceself.device).manual_seed(seed) else: generator None try: logger.info(f开始生成图片: {prompt[:50]}...) # 清理内存 gc.collect() if self.device cuda: torch.cuda.empty_cache() # 生成图片 image self.pipeline( promptprompt, negative_promptnegative_prompt, num_inference_stepssteps, guidance_scalecfg_scale, widthwidth, heightheight, generatorgenerator ).images[0] logger.info(图片生成成功) return image except Exception as e: logger.error(f图片生成失败: {e}) raise def cleanup(self): 清理资源 if self.pipeline: del self.pipeline gc.collect() if self.device cuda: torch.cuda.empty_cache() logger.info(资源清理完成)这个类做了几件重要的事封装绘图逻辑把原来的代码整理成类的方法错误处理加了try-except避免程序崩溃资源管理生成前后自动清理内存配置分离参数可以灵活设置4.2 配置管理在core/config.py中我们管理配置from pydantic_settings import BaseSettings from typing import Optional class Settings(BaseSettings): 应用配置 # 模型路径配置 model_path: str stabilityai/sdxl-turbo weight_path: str ./weights/rinaiqiao.safetensors # API配置 api_host: str 0.0.0.0 api_port: int 8000 api_reload: bool True # WebUI配置 webui_host: str 0.0.0.0 webui_port: int 8501 # 生成参数默认值 default_steps: int 20 default_cfg_scale: float 2.0 default_width: int 1024 default_height: int 1024 # 日志配置 log_level: str INFO class Config: env_file .env settings Settings()用Pydantic管理配置的好处是类型检查确保配置值类型正确环境变量支持可以从.env文件或系统环境变量读取默认值有合理的默认值开箱即用5. FastAPI接口服务实现现在我们来创建API服务。这是整个架构的关键部分。5.1 定义数据模型在api/schemas.py中定义API的请求和响应模型from pydantic import BaseModel, Field from typing import Optional class GenerateRequest(BaseModel): 生成图片的请求模型 prompt: str Field( ..., description正面提示词描述你想生成的画面, example辉夜大小姐红色瞳孔黑色长发校服教室背景二次元风格高清细节丰富 ) negative_prompt: Optional[str] Field( None, description负面提示词描述你不想要的内容, examplelow quality, worst quality, bad anatomy ) steps: Optional[int] Field( 20, description生成步数Turbo模型推荐20步左右, ge4, le30 ) cfg_scale: Optional[float] Field( 2.0, descriptionCFG缩放系数控制提示词约束强度, ge1.0, le5.0 ) width: Optional[int] Field( 1024, description图片宽度, ge512, le2048 ) height: Optional[int] Field( 1024, description图片高度, ge512, le2048 ) seed: Optional[int] Field( None, description随机种子用于复现相同结果 ) class GenerateResponse(BaseModel): 生成图片的响应模型 success: bool Field(..., description是否成功) message: str Field(..., description结果消息) image_url: Optional[str] Field(None, description图片访问URL) image_base64: Optional[str] Field(None, descriptionBase64编码的图片数据) seed: Optional[int] Field(None, description使用的随机种子) class HealthResponse(BaseModel): 健康检查响应 status: str Field(..., description服务状态) model_loaded: bool Field(..., description模型是否已加载) device: str Field(..., description运行设备)Pydantic模型会自动验证输入数据是否合法生成API文档提供清晰的错误信息5.2 实现API路由在api/routers/generate.py中实现生成图片的接口from fastapi import APIRouter, HTTPException, BackgroundTasks from fastapi.responses import JSONResponse, FileResponse import base64 from io import BytesIO import uuid import os from datetime import datetime from api.schemas import GenerateRequest, GenerateResponse from core.engine import DrawingEngine from core.config import settings router APIRouter(prefix/api/v1, tags[生成]) # 全局绘图引擎实例 engine None def get_engine(): 获取或初始化绘图引擎 global engine if engine is None: engine DrawingEngine( model_pathsettings.model_path, weight_pathsettings.weight_path ) if not engine.load_model(): raise RuntimeError(模型加载失败) return engine router.get(/health, response_modelHealthResponse) async def health_check(): 健康检查接口 try: engine get_engine() return { status: healthy, model_loaded: True, device: engine.device } except Exception as e: return { status: unhealthy, model_loaded: False, device: unknown } router.post(/generate, response_modelGenerateResponse) async def generate_image(request: GenerateRequest): 生成二次元人物图片 根据提示词生成辉夜大小姐风格的二次元图片 try: # 获取绘图引擎 engine get_engine() # 生成图片 image engine.generate_image( promptrequest.prompt, negative_promptrequest.negative_prompt, stepsrequest.steps, cfg_scalerequest.cfg_scale, widthrequest.width, heightrequest.height, seedrequest.seed ) # 生成唯一文件名 timestamp datetime.now().strftime(%Y%m%d_%H%M%S) filename fgenerated_{timestamp}_{uuid.uuid4().hex[:8]}.png # 保存图片到临时目录 temp_dir temp_images os.makedirs(temp_dir, exist_okTrue) filepath os.path.join(temp_dir, filename) image.save(filepath, formatPNG) # 转换为Base64可选用于直接返回 buffered BytesIO() image.save(buffered, formatPNG) img_str base64.b64encode(buffered.getvalue()).decode() # 返回结果 return GenerateResponse( successTrue, message图片生成成功, image_urlf/api/v1/image/{filename}, image_base64fdata:image/png;base64,{img_str}, seedrequest.seed ) except Exception as e: raise HTTPException( status_code500, detailf图片生成失败: {str(e)} ) router.get(/image/{filename}) async def get_image(filename: str): 获取生成的图片 filepath os.path.join(temp_images, filename) if not os.path.exists(filepath): raise HTTPException(status_code404, detail图片不存在) return FileResponse( filepath, media_typeimage/png, filenamefilename ) def cleanup_temp_files(): 清理临时图片文件可以定时任务调用 import glob import time temp_dir temp_images if os.path.exists(temp_dir): # 删除超过1小时的文件 for filepath in glob.glob(os.path.join(temp_dir, *.png)): if os.path.getmtime(filepath) time.time() - 3600: os.remove(filepath)这个路由模块提供了三个接口/health健康检查查看服务状态/generate生成图片支持所有参数/image/{filename}获取生成的图片文件5.3 创建FastAPI主应用在api/main.py中创建FastAPI应用from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware import uvicorn import logging from api.routers import generate from core.config import settings # 配置日志 logging.basicConfig( levelsettings.log_level, format%(asctime)s - %(name)s - %(levelname)s - %(message)s ) logger logging.getLogger(__name__) # 创建FastAPI应用 app FastAPI( titleZ-Image Turbo API, description辉夜大小姐二次元人物绘图API服务, version1.0.0, docs_url/docs, redoc_url/redoc ) # 添加CORS中间件允许跨域请求 app.add_middleware( CORSMiddleware, allow_origins[*], # 生产环境应该限制域名 allow_credentialsTrue, allow_methods[*], allow_headers[*], ) # 注册路由 app.include_router(generate.router) app.on_event(startup) async def startup_event(): 应用启动时执行 logger.info(Z-Image Turbo API服务启动中...) logger.info(f模型路径: {settings.model_path}) logger.info(f权重路径: {settings.weight_path}) app.on_event(shutdown) async def shutdown_event(): 应用关闭时执行 logger.info(清理资源...) # 这里可以添加资源清理代码 app.get(/) async def root(): 根路径 return { message: 欢迎使用Z-Image Turbo API服务, docs: /docs, redoc: /redoc, health_check: /api/v1/health } if __name__ __main__: uvicorn.run( api.main:app, hostsettings.api_host, portsettings.api_port, reloadsettings.api_reload )6. WebUI界面升级原来的Streamlit界面我们保留但要做一些调整让它能调用API服务。6.1 创建新的WebUI应用在webui/app.py中import streamlit as st import requests import base64 from io import BytesIO from PIL import Image import time # 页面配置 st.set_page_config( page_titleZ-Image Turbo 绘图工具, page_icon, layoutwide, initial_sidebar_stateexpanded ) # API配置 API_BASE_URL http://localhost:8000 # 默认地址可以根据需要修改 # 初始化session state if api_available not in st.session_state: st.session_state.api_available False if generated_images not in st.session_state: st.session_state.generated_images [] def check_api_health(): 检查API服务是否可用 try: response requests.get(f{API_BASE_URL}/api/v1/health, timeout5) if response.status_code 200: data response.json() st.session_state.api_available data.get(model_loaded, False) return data else: st.session_state.api_available False return None except: st.session_state.api_available False return None def generate_image_via_api(prompt, negative_prompt, steps, cfg_scale, width, height, seed): 通过API生成图片 try: # 构造请求数据 data { prompt: prompt, negative_prompt: negative_prompt, steps: steps, cfg_scale: cfg_scale, width: width, height: height, seed: seed if seed ! -1 else None } # 移除None值 data {k: v for k, v in data.items() if v is not None} # 发送请求 response requests.post( f{API_BASE_URL}/api/v1/generate, jsondata, timeout300 # 5分钟超时 ) if response.status_code 200: result response.json() if result.get(success): return result else: st.error(f生成失败: {result.get(message)}) return None else: st.error(fAPI请求失败: {response.status_code}) return None except requests.exceptions.Timeout: st.error(请求超时请稍后重试) return None except Exception as e: st.error(f生成过程中出错: {str(e)}) return None # 页面标题 st.title( Z-Image Turbo 二次元人物绘图工具) st.markdown(---) # 检查API状态 with st.spinner(检查API服务状态...): health_info check_api_health() # 侧边栏 - 模式选择 with st.sidebar: st.header(⚙️ 设置) mode st.radio( 选择运行模式, [API模式, 本地模式], helpAPI模式调用后端服务本地模式直接运行需要GPU ) if mode API模式: st.info(使用API服务生成图片) api_url st.text_input( API地址, valueAPI_BASE_URL, helpFastAPI服务的地址 ) API_BASE_URL api_url # 显示API状态 if health_info: st.success(✅ API服务可用) st.info(f设备: {health_info.get(device, 未知)}) else: st.error(❌ API服务不可用) st.warning(请确保API服务已启动) else: st.info(本地模式暂未实现请使用API模式) st.stop() # 主界面 - 参数配置 col1, col2 st.columns([1, 2]) with col1: st.header( 生成参数) # 提示词输入 default_prompt ( 辉夜大小姐红色瞳孔黑色长发校服教室背景 二次元风格高清细节丰富动漫插画 ) prompt st.text_area( 正面提示词, valuedefault_prompt, height150, help描述你想生成的画面 ) default_negative ( low quality, worst quality, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, jpeg artifacts, signature, watermark, username, blurry ) negative_prompt st.text_area( 负面提示词, valuedefault_negative, height100, help描述你不想要的内容 ) # 参数调节 col1_1, col1_2 st.columns(2) with col1_1: steps st.slider( 生成步数, min_value4, max_value30, value20, helpTurbo模型推荐20步左右 ) width st.selectbox( 图片宽度, options[512, 768, 1024, 1280, 1536, 2048], index2, help选择图片宽度 ) with col1_2: cfg_scale st.slider( CFG Scale, min_value1.0, max_value5.0, value2.0, step0.5, help控制提示词约束强度 ) height st.selectbox( 图片高度, options[512, 768, 1024, 1280, 1536, 2048], index2, help选择图片高度 ) # 随机种子 seed st.number_input( 随机种子, value-1, min_value-1, help-1表示随机生成其他值可复现相同结果 ) # 生成按钮 generate_button st.button( 生成人物写真, typeprimary, use_container_widthTrue ) with col2: st.header(️ 生成结果) if generate_button and prompt: if not st.session_state.api_available: st.error(API服务不可用请检查服务状态) else: with st.spinner(画师正在奋笔疾书中...): # 调用API生成图片 result generate_image_via_api( prompt, negative_prompt, steps, cfg_scale, width, height, seed ) if result: # 显示图片 if result.get(image_base64): # 从Base64解码图片 image_data result[image_base64].split(,)[1] image_bytes base64.b64decode(image_data) image Image.open(BytesIO(image_bytes)) # 显示图片 st.image(image, captionprompt[:50] ...) # 保存到session state st.session_state.generated_images.append({ image: image, prompt: prompt, seed: result.get(seed), time: time.strftime(%Y-%m-%d %H:%M:%S) }) # 显示成功信息 st.success(✅ 图片生成成功) # 显示图片信息 st.info(f**图片信息**\n\n f- 尺寸: {width}×{height}\n f- 步数: {steps}\n f- CFG Scale: {cfg_scale}\n f- 种子: {result.get(seed, 随机)}) # 下载按钮 buf BytesIO() image.save(buf, formatPNG) byte_im buf.getvalue() st.download_button( label 下载图片, databyte_im, file_namefgenerated_{int(time.time())}.png, mimeimage/png, use_container_widthTrue ) # 显示历史记录 if st.session_state.generated_images: st.markdown(---) st.subheader( 生成历史) for i, item in enumerate(reversed(st.session_state.generated_images[-5:])): with st.expander(f图片 {i1} - {item[time]}): st.image(item[image], use_column_widthTrue) st.caption(f提示词: {item[prompt][:100]}...) if item[seed]: st.caption(f种子: {item[seed]}) # 页脚 st.markdown(---) st.caption( 提示API模式需要先启动FastAPI服务本地模式需要GPU支持)这个新的WebUI界面支持双模式可以选择API模式或本地模式更好的用户体验有历史记录、图片下载、状态提示与API集成通过HTTP请求调用后端服务7. 双模式部署与使用现在我们已经有了完整的双模式架构接下来看看怎么部署和使用。7.1 启动API服务首先启动FastAPI服务# 方式1直接运行 cd z-image-turbo-dual-mode python -m api.main # 方式2使用uvicorn uvicorn api.main:app --host 0.0.0.0 --port 8000 --reload启动后你可以访问http://localhost:8000- API主页http://localhost:8000/docs- 交互式API文档http://localhost:8000/redoc- 另一种API文档7.2 启动WebUI服务然后启动Streamlit WebUIcd z-image-turbo-dual-mode streamlit run webui/app.py访问http://localhost:8501就能看到界面了。7.3 通过API调用除了用WebUI你还可以直接调用APIimport requests import base64 from PIL import Image from io import BytesIO # API地址 API_URL http://localhost:8000 # 1. 检查服务状态 response requests.get(f{API_URL}/api/v1/health) print(服务状态:, response.json()) # 2. 生成图片 generate_data { prompt: 辉夜大小姐红色瞳孔黑色长发校服教室背景二次元风格, steps: 20, cfg_scale: 2.0, width: 1024, height: 1024, seed: 42 # 固定种子可以复现相同结果 } response requests.post( f{API_URL}/api/v1/generate, jsongenerate_data ) if response.status_code 200: result response.json() if result[success]: # 从Base64解码图片 image_data result[image_base64].split(,)[1] image_bytes base64.b64decode(image_data) # 保存图片 with open(generated_image.png, wb) as f: f.write(image_bytes) print(图片生成成功已保存为 generated_image.png) # 或者直接使用PIL打开 image Image.open(BytesIO(image_bytes)) image.show() else: print(生成失败:, response.text)7.4 使用Docker部署可选如果你想要更简单的部署方式可以创建Docker配置Dockerfile:FROM python:3.10-slim WORKDIR /app # 安装系统依赖 RUN apt-get update apt-get install -y \ git \ gcc \ g \ rm -rf /var/lib/apt/lists/* # 复制依赖文件 COPY requirements.txt . # 安装Python依赖 RUN pip install --no-cache-dir -r requirements.txt # 复制应用代码 COPY . . # 创建非root用户 RUN useradd -m -u 1000 appuser chown -R appuser:appuser /app USER appuser # 暴露端口 EXPOSE 8000 8501 # 启动命令 CMD [sh, -c, uvicorn api.main:app --host 0.0.0.0 --port 8000 streamlit run webui/app.py --server.port 8501 --server.address 0.0.0.0]docker-compose.yml:version: 3.8 services: z-image-turbo: build: . ports: - 8000:8000 # API服务 - 8501:8501 # WebUI服务 volumes: - ./weights:/app/weights # 挂载权重文件 - ./temp_images:/app/temp_images # 挂载临时图片 environment: - MODEL_PATHstabilityai/sdxl-turbo - WEIGHT_PATH/app/weights/rinaiqiao.safetensors deploy: resources: reservations: devices: - driver: nvidia count: 1 capabilities: [gpu]然后一键启动docker-compose up -d8. 总结与进阶建议8.1 项目总结通过这个教程我们成功将单机的Z-Image-Turbo工具升级为双模式架构核心引擎重构把绘图逻辑封装成独立的类便于复用API服务实现用FastAPI提供了完整的RESTful接口WebUI升级Streamlit界面现在可以调用API体验更好双模式支持既保留了原有的交互方式又增加了编程接口这个架构的好处很明显灵活性你可以通过WebUI快速测试通过API集成到其他系统可扩展性未来加新功能只需要在核心引擎实现易维护代码结构清晰模块化设计8.2 性能优化建议如果你在实际使用中发现性能问题可以尝试这些优化模型缓存第一次加载模型后缓存起来避免重复加载请求队列处理并发请求时使用队列避免显存溢出图片压缩返回的图片可以适当压缩减少网络传输异步生成使用FastAPI的异步特性处理长时间任务8.3 安全考虑在生产环境使用时需要考虑安全问题API认证添加API密钥验证请求限制限制单个用户的请求频率输入验证严格验证用户输入的提示词文件清理定期清理临时图片文件8.4 下一步可以做什么这个双模式架构还有很多可以扩展的地方批量生成添加批量生成图片的接口风格混合支持多个LoRA权重的混合使用参数预设保存常用的参数组合用户管理添加用户系统保存生成历史模型管理支持动态加载不同的模型和权重最重要的是现在你有了一个坚实的基础架构可以基于这个架构快速开发新功能。无论是想集成到自己的产品里还是想搭建一个团队共享的绘图服务这个双模式架构都能很好地支持。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2415379.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…