Files
dsProject/dsLightRag/Routes/WenShengTu.py
2025-09-04 13:36:00 +08:00

142 lines
4.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import json
import logging
import os
from typing import Optional, List
from fastapi import APIRouter, HTTPException
from pydantic import BaseModel
from Liblib.Kit.LibLibGenerator import LibLibGenerator
# 创建路由路由器
router = APIRouter(prefix="/api/wenShengTu", tags=["文生图"])
# 配置日志
logger = logging.getLogger(__name__)
class TextToImageRequest(BaseModel):
prompt: str
negative_prompt: Optional[str] = "ng_deepnegative_v1_75t,(badhandv4:1.2),EasyNegative,(worst quality:2),"
steps: Optional[int] = 20
width: Optional[int] = 768
height: Optional[int] = 1024
img_count: Optional[int] = 1
seed: Optional[int] = -1
restore_faces: Optional[int] = 0
sampler: Optional[int] = 15
cfg_scale: Optional[float] = 7
checkpoint_id: Optional[str] = "0ea388c7eb854be3ba3c6f65aac6bfd3" # Dream Tech XL | 筑梦工业XL v6.0 - 寄语星河
template_uuid: Optional[str] = "e10adc3949ba59abbe56e057f20f883e" # 1.5和XL文生图 - 自定义完整参数
hi_res_fix: Optional[bool] = False
hires_steps: Optional[int] = 20
hires_denoising_strength: Optional[float] = 0.75
upscaler: Optional[int] = 10
resized_width: Optional[int] = 1024
resized_height: Optional[int] = 1536
@router.post("/generate", response_model=dict)
async def generate_text_to_image(request: TextToImageRequest):
"""
根据提供的文本提示词生成图片
Args:
request: 包含生成参数的请求体
Returns:
包含生成图片OBS地址的字典
"""
try:
# 创建生成器实例
generator = LibLibGenerator()
# 设置高分辨率修复参数(如果启用)
hi_res_fix_info = None
if request.hi_res_fix:
hi_res_fix_info = {
"hiresSteps": request.hires_steps,
"hiresDenoisingStrength": request.hires_denoising_strength,
"upscaler": request.upscaler,
"resizedWidth": request.resized_width,
"resizedHeight": request.resized_height
}
# 调用自定义Checkpoint方法进行文生图
result = generator.generate_custom_checkpoint_text_to_image(
template_uuid=request.template_uuid,
checkpoint_id=request.checkpoint_id,
prompt=request.prompt,
negative_prompt=request.negative_prompt,
sampler=request.sampler,
steps=request.steps,
cfg_scale=request.cfg_scale,
width=request.width,
height=request.height,
img_count=request.img_count,
randn_source=0,
seed=request.seed,
restore_faces=request.restore_faces,
hi_res_fix_info=hi_res_fix_info
)
if result:
logger.info(f"文生图成功OBS地址: {result}")
return {
"status": "success",
"obs_url": result,
"message": "文生图生成成功"
}
else:
logger.error("文生图生成失败")
raise HTTPException(status_code=500, detail="文生图生成失败")
except HTTPException:
raise
except Exception as e:
logger.error(f"文生图请求处理失败: {str(e)}")
raise HTTPException(status_code=500, detail=f"文生图请求处理失败: {str(e)}")
@router.post("/generate/default", response_model=dict)
async def generate_text_to_image_default(request: TextToImageRequest):
"""
使用默认官方模型进行文生图
Args:
request: 包含生成参数的请求体
Returns:
包含生成图片OBS地址的字典
"""
try:
# 创建生成器实例
generator = LibLibGenerator()
# 调用默认模型方法进行文生图
result = generator.generate_default_text_to_image(
prompt=request.prompt,
steps=request.steps,
width=request.width,
height=request.height,
img_count=request.img_count,
seed=request.seed,
restore_faces=request.restore_faces
)
if result:
logger.info(f"默认模型文生图成功OBS地址: {result}")
return {
"status": "success",
"obs_url": result,
"message": "默认模型文生图生成成功"
}
else:
logger.error("默认模型文生图生成失败")
raise HTTPException(status_code=500, detail="默认模型文生图生成失败")
except HTTPException:
raise
except Exception as e:
logger.error(f"默认模型文生图请求处理失败: {str(e)}")
raise HTTPException(status_code=500, detail=f"默认模型文生图请求处理失败: {str(e)}")