325 lines
7.1 KiB
Markdown
325 lines
7.1 KiB
Markdown
# AI海报生成系统 接口文档
|
||
|
||
## 概述
|
||
|
||
AI海报生成系统是一个基于FastAPI的Web服务,集成了多个AI模型和图像处理功能,能够一键生成Vue组件代码和PSD文件。
|
||
|
||
## 系统架构
|
||
|
||
```
|
||
前端 → FastAPI服务器(8000端口) → ComfyUI服务器(101.201.50.90:8188)
|
||
↓
|
||
Vue代码生成 + PSD文件合成
|
||
```
|
||
|
||
## API端点
|
||
|
||
### 1. 健康检查
|
||
|
||
**GET** `/health`
|
||
|
||
**功能**: 检查服务器状态
|
||
|
||
**响应**:
|
||
```json
|
||
{
|
||
"status": "healthy",
|
||
"timestamp": "2025-01-02T20:30:00"
|
||
}
|
||
```
|
||
|
||
### 2. 主要接口 - 生成海报
|
||
|
||
**POST** `/api/generate-poster`
|
||
|
||
**功能**: 一键生成完整海报(Vue代码 + PSD文件)
|
||
|
||
**请求体**:
|
||
```json
|
||
{
|
||
"user_input": "端午节海报,传统风格,包含荷花和龙舟",
|
||
"session_id": "可选-用于跟踪会话"
|
||
}
|
||
```
|
||
|
||
**响应**:
|
||
```json
|
||
{
|
||
"status": "success",
|
||
"message": "海报生成完成",
|
||
"data": {
|
||
"vue_code": "完整的Vue组件代码",
|
||
"suggestions": {
|
||
"layer5_logo_content": {
|
||
"text": "主办方",
|
||
"color": "#000000"
|
||
},
|
||
"layer6_title_content": {
|
||
"content": "端午节安康",
|
||
"font_name": "SimHei",
|
||
"color": "#7E0C6E"
|
||
},
|
||
"layer7_subtitle_content": {
|
||
"content": "粽叶飘香,龙舟竞渡",
|
||
"font_name": "Microsoft YaHei",
|
||
"color": "#000000"
|
||
}
|
||
},
|
||
"analysis_result": {
|
||
"analyzed_prompt": "端午节海报,传统风格",
|
||
"main_theme": "端午节祝福",
|
||
"width": 1080,
|
||
"height": 1920,
|
||
"keywords": ["端午节", "传统", "荷花", "龙舟"]
|
||
},
|
||
"psd_file_path": "生成的PSD文件路径",
|
||
"file_size_mb": 5.93,
|
||
"generated_images": 2,
|
||
"files": {
|
||
"vue_file": "Vue文件路径",
|
||
"psd_file": "PSD文件路径"
|
||
}
|
||
},
|
||
"session_id": "会话ID"
|
||
}
|
||
```
|
||
|
||
### 3. 文件下载
|
||
|
||
**GET** `/api/download/{file_type}?session_id={session_id}`
|
||
|
||
**功能**: 下载生成的文件
|
||
|
||
**参数**:
|
||
- `file_type`: 文件类型 (`vue` | `psd` | `json`)
|
||
- `session_id`: 会话ID(查询参数)
|
||
|
||
**响应**: 直接返回文件下载
|
||
|
||
### 4. 获取生成状态
|
||
|
||
**GET** `/api/status/{session_id}`
|
||
|
||
**功能**: 获取指定会话的生成状态和信息
|
||
|
||
**响应**:
|
||
```json
|
||
{
|
||
"status": "success",
|
||
"message": "状态获取成功",
|
||
"data": {
|
||
"user_input": "用户输入",
|
||
"analysis_result": "分析结果",
|
||
"suggestions": "文案建议",
|
||
"vue_path": "Vue文件路径",
|
||
"psd_path": "PSD文件路径",
|
||
"psd_size_mb": 5.93,
|
||
"created_at": "2025-01-02T20:30:00"
|
||
},
|
||
"session_id": "会话ID"
|
||
}
|
||
```
|
||
|
||
## 内部模块接口
|
||
|
||
### 1. prompt_analysis
|
||
|
||
**函数**: `llm_user_analysis(user_input)`
|
||
|
||
**功能**: 使用DeepSeek模型分析用户输入
|
||
|
||
**参数**:
|
||
- `user_input` (str): 用户输入的海报需求
|
||
|
||
**返回值**:
|
||
```json
|
||
{
|
||
"analyzed_prompt": "原始用户输入",
|
||
"keywords": ["关键词1", "关键词2"],
|
||
"width": 1080,
|
||
"height": 1920,
|
||
"batch_size": 2,
|
||
"poster_type": "海报类型",
|
||
"main_theme": "主要主题",
|
||
"style_preference": "风格偏好",
|
||
"color_preference": "颜色偏好"
|
||
}
|
||
```
|
||
|
||
### 2. flux_con
|
||
|
||
**函数**: `comfyui_img_info(user_input_analysis_result, system_prompt)`
|
||
|
||
**功能**: 调用ComfyUI生成图片
|
||
|
||
**参数**:
|
||
- `user_input_analysis_result`: 用户输入分析结果
|
||
- `system_prompt`: 系统提示词
|
||
|
||
**返回值**:
|
||
```json
|
||
[
|
||
{
|
||
"picture_name": "图片文件名",
|
||
"picture_type": "png",
|
||
"picture_description": "图片描述",
|
||
"picture_size": "1080x1920"
|
||
}
|
||
]
|
||
```
|
||
|
||
### 3. generate_text
|
||
|
||
**函数**: `get_poster_content_suggestions(analyzed_prompt)`
|
||
|
||
**功能**: 使用Kimi生成文案建议
|
||
|
||
**参数**:
|
||
- `analyzed_prompt` (str): 分析后的提示词
|
||
|
||
**返回值**:
|
||
```json
|
||
{
|
||
"layer5_logo_content": {
|
||
"text": "Logo文字",
|
||
"color": "#000000"
|
||
},
|
||
"layer6_title_content": {
|
||
"content": "主标题",
|
||
"font_name": "字体名称",
|
||
"color": "#颜色代码"
|
||
},
|
||
"layer7_subtitle_content": {
|
||
"content": "副标题",
|
||
"font_name": "字体名称",
|
||
"color": "#颜色代码"
|
||
}
|
||
}
|
||
```
|
||
|
||
### 4. generate_layout
|
||
|
||
**函数**: `generate_vue_code(prompt)`
|
||
|
||
**功能**: 使用DeepSeek生成Vue组件代码
|
||
|
||
**参数**:
|
||
- `prompt` (str): 包含布局要求的提示词
|
||
|
||
**返回值**: Vue组件代码字符串
|
||
|
||
### 5. export_psd_from_json
|
||
|
||
**函数**: `create_psd_from_images(image_paths, output_path, canvas_size, mode)`
|
||
|
||
**功能**: 创建PSD文件
|
||
|
||
**参数**:
|
||
- `image_paths` (List[str]): 图片路径列表
|
||
- `output_path` (str): 输出PSD文件路径
|
||
- `canvas_size` (Tuple[int, int]): 画布大小
|
||
- `mode` (str): 颜色模式
|
||
|
||
## 错误处理
|
||
|
||
**错误响应格式**:
|
||
```json
|
||
{
|
||
"detail": "错误描述信息"
|
||
}
|
||
```
|
||
|
||
**常见错误码**:
|
||
- `400`: 请求参数错误
|
||
- `404`: 资源不存在(会话不存在、文件不存在)
|
||
- `500`: 服务器内部错误
|
||
|
||
## 使用示例
|
||
|
||
### JavaScript调用示例
|
||
|
||
```javascript
|
||
// 生成海报
|
||
async function generatePoster(userInput) {
|
||
const response = await fetch('http://localhost:8000/api/generate-poster', {
|
||
method: 'POST',
|
||
headers: { 'Content-Type': 'application/json' },
|
||
body: JSON.stringify({ user_input: userInput })
|
||
});
|
||
|
||
const result = await response.json();
|
||
|
||
if (result.status === 'success') {
|
||
console.log('Vue代码:', result.data.vue_code);
|
||
console.log('文案建议:', result.data.suggestions);
|
||
|
||
// 下载文件
|
||
downloadFile(result.session_id, 'vue');
|
||
downloadFile(result.session_id, 'psd');
|
||
}
|
||
}
|
||
|
||
// 下载文件
|
||
function downloadFile(sessionId, fileType) {
|
||
const url = `http://localhost:8000/api/download/${fileType}?session_id=${sessionId}`;
|
||
window.open(url, '_blank');
|
||
}
|
||
|
||
// 使用示例
|
||
generatePoster("春节海报,红色背景,现代风格");
|
||
```
|
||
|
||
### Python调用示例
|
||
|
||
```python
|
||
import requests
|
||
|
||
# 生成海报
|
||
def generate_poster(user_input):
|
||
url = "http://localhost:8000/api/generate-poster"
|
||
data = {"user_input": user_input}
|
||
|
||
response = requests.post(url, json=data)
|
||
result = response.json()
|
||
|
||
if result["status"] == "success":
|
||
print("Vue代码:", result["data"]["vue_code"])
|
||
session_id = result["session_id"]
|
||
|
||
# 下载PSD文件
|
||
download_url = f"http://localhost:8000/api/download/psd?session_id={session_id}"
|
||
psd_response = requests.get(download_url)
|
||
|
||
with open("poster.psd", "wb") as f:
|
||
f.write(psd_response.content)
|
||
|
||
# 使用示例
|
||
generate_poster("端午节海报,传统风格")
|
||
```
|
||
|
||
## 工作流程
|
||
|
||
1. **接收请求**: 前端发送用户输入到 `/api/generate-poster`
|
||
2. **分析输入**: 使用DeepSeek分析用户需求
|
||
3. **生成图片**: 调用ComfyUI(101.201.50.90:8188)生成图片
|
||
4. **生成文案**: 使用Kimi生成文案建议
|
||
5. **生成Vue代码**: 使用DeepSeek生成Vue组件
|
||
6. **创建PSD**: 合成PSD文件(优先使用手动模板)
|
||
7. **返回结果**: 一次性返回所有生成内容
|
||
8. **文件下载**: 前端可按需下载生成的文件
|
||
|
||
## 部署说明
|
||
|
||
### 开发环境
|
||
```bash
|
||
cd E:\砚生\ai_service\scripts
|
||
python run_pipeline.py
|
||
# 选择: 2 (API服务器模式)
|
||
```
|
||
|
||
### 生产环境
|
||
- 使用PM2管理进程
|
||
- 配置Nginx反向代理
|
||
- 设置CORS允许的域名
|
||
- 配置HTTPS
|