mirror of
https://gitee.com/dromara/RuoYi-Vue-Plus.git
synced 2026-09-19 01:48:47 +08:00
287 lines
6.4 KiB
Markdown
287 lines
6.4 KiB
Markdown
# AI图片生成模块 - 使用说明
|
||
|
||
## 快速开始
|
||
|
||
### 1. 数据库初始化
|
||
|
||
执行SQL脚本创建表结构:
|
||
```sql
|
||
-- 执行 ruoyi-modules/ruoyi-ai/docs/ai_image.sql
|
||
```
|
||
|
||
### 2. 配置OSS存储
|
||
|
||
在application.yml中配置OSS存储:
|
||
```yaml
|
||
# OSS配置(已有配置,确保正确)
|
||
oss:
|
||
endpoint: https://oss-cn-region.aliyuncs.com
|
||
accessKey: your-access-key
|
||
secretKey: your-secret-key
|
||
bucketName: your-bucket
|
||
|
||
# AI图片生成配置
|
||
ai:
|
||
image:
|
||
default-mode: LOCAL # 默认使用本地模型
|
||
storage:
|
||
bucket-name: ai-images # 存储桶名称
|
||
path-prefix: ai/image/ # 存储路径前缀
|
||
generate-thumbnail: true # 生成缩略图
|
||
```
|
||
|
||
### 3. 本地模型部署(可选)
|
||
|
||
#### Docker部署Stable Diffusion
|
||
```bash
|
||
# 拉取镜像
|
||
docker pull automatic1111/stable-diffusion-webui:latest
|
||
|
||
# 运行容器
|
||
docker run -d --name stable-diffusion \
|
||
-p 7860:7860 \
|
||
-v /path/to/models:/app/models \
|
||
--gpus all \
|
||
automatic1111/stable-diffusion-webui:latest \
|
||
--api --listen --port 7860
|
||
|
||
# 验证服务
|
||
curl http://localhost:7860/sdapi/v1/memory
|
||
```
|
||
|
||
#### 模型下载
|
||
```bash
|
||
# 下载常用模型(放置在models/Stable-diffusion目录)
|
||
# Stable Diffusion v1.5
|
||
wget https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.ckpt
|
||
|
||
# 中文优化模型
|
||
wget https://huggingface.co/IDEA-CCNL/Taiyi-Stable-Diffusion-1B-Chinese-v0.1/resolve/main/Taiyi-Stable-Diffusion-1B-Chinese-v0.1.ckpt
|
||
```
|
||
|
||
### 4. 云服务配置(可选)
|
||
|
||
#### 阿里云通义万相
|
||
1. 注册阿里云账号
|
||
2. 开通DashScope服务
|
||
3. 获取API密钥
|
||
4. 配置到application.yml:
|
||
|
||
```yaml
|
||
ai:
|
||
image:
|
||
cloud-service:
|
||
provider: ALIYUN
|
||
api-key: your-dashscope-api-key
|
||
region: cn-shanghai
|
||
```
|
||
|
||
## 使用示例
|
||
|
||
### 1. 基础文生图
|
||
```java
|
||
// 创建生成请求
|
||
AiImageGenerateDTO dto = new AiImageGenerateDTO();
|
||
dto.setPrompt("一只可爱的猫咪在草地上玩耍");
|
||
dto.setWidth(750);
|
||
dto.setHeight(1440);
|
||
dto.setGenerateMode("LOCAL"); // 或 "CLOUD"
|
||
|
||
// 调用生成接口
|
||
AiImageVO result = aiImageService.generateImage(dto);
|
||
|
||
// 获取生成的图片URL
|
||
String imageUrl = result.getImageUrl();
|
||
```
|
||
|
||
### 2. 高级参数设置
|
||
```java
|
||
AiImageGenerateDTO dto = new AiImageGenerateDTO();
|
||
dto.setPrompt("一只可爱的猫咪在草地上玩耍,阳光温暖,卡通风格");
|
||
dto.setNegativePrompt("模糊,低质量,变形,扭曲");
|
||
dto.setWidth(1024);
|
||
dto.setHeight(1024);
|
||
dto.setSteps(30); // 生成步数,质量更高但速度更慢
|
||
dto.setCfgScale(8.0); // CFG值,提示词引导强度
|
||
dto.setSampler("DPM++ 2M Karras"); // 采样器
|
||
dto.setSeed(12345L); // 固定种子可复现相同图片
|
||
dto.setGenerateMode("LOCAL");
|
||
```
|
||
|
||
### 3. 局部编辑
|
||
```java
|
||
AiImageEditDTO dto = new AiImageEditDTO();
|
||
dto.setOriginalImageUrl("https://your-oss.com/cat.jpg");
|
||
dto.setEditPrompt("将猫咪的眼睛变成蓝色,更加明亮");
|
||
|
||
// 指定编辑区域(可选)
|
||
dto.setX(150); // 左上角X坐标
|
||
dto.setY(120); // 左上角Y坐标
|
||
dto.setWidth(80); // 编辑区域宽度
|
||
dto.setHeight(60); // 编辑区域高度
|
||
|
||
// 或使用蒙版图片(可选)
|
||
dto.setMaskImageUrl("https://your-oss.com/mask.png");
|
||
|
||
dto.setEditMode("LOCAL");
|
||
|
||
AiImageVO result = aiImageService.editImage(dto);
|
||
```
|
||
|
||
### 4. 查询生成记录
|
||
```java
|
||
AiImagePageQueryDTO queryDTO = new AiImagePageQueryDTO();
|
||
queryDTO.setPageNum(1);
|
||
queryDTO.setPageSize(10);
|
||
queryDTO.setStatus("SUCCESS"); // 只查询成功的记录
|
||
queryDTO.setPromptKeyword("猫咪"); // 按描述关键词搜索
|
||
|
||
TableDataInfo<AiImageVO> pageResult = aiImageService.getImagePage(queryDTO);
|
||
List<AiImageVO> records = pageResult.getRows();
|
||
long total = pageResult.getTotal();
|
||
```
|
||
|
||
## API接口测试
|
||
|
||
### 1. 生成图片测试
|
||
```bash
|
||
curl -X POST http://localhost:8080/ai/image/generate \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"prompt": "一只可爱的猫咪在草地上玩耍",
|
||
"width": 750,
|
||
"height": 1440,
|
||
"negativePrompt": "模糊,低质量",
|
||
"steps": 20,
|
||
"cfgScale": 7.5,
|
||
"generateMode": "LOCAL"
|
||
}'
|
||
```
|
||
|
||
### 2. 编辑图片测试
|
||
```bash
|
||
curl -X POST http://localhost:8080/ai/image/edit \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"originalImageUrl": "https://your-oss.com/cat.jpg",
|
||
"editPrompt": "将猫咪的眼睛变成蓝色",
|
||
"x": 150,
|
||
"y": 120,
|
||
"width": 80,
|
||
"height": 60,
|
||
"editMode": "LOCAL"
|
||
}'
|
||
```
|
||
|
||
### 3. 查询记录测试
|
||
```bash
|
||
curl "http://localhost:8080/ai/image/page?pageNum=1&pageSize=10&status=SUCCESS"
|
||
```
|
||
|
||
## 性能优化建议
|
||
|
||
### 1. 本地模型优化
|
||
- 使用GPU加速(NVIDIA显卡,至少8GB显存)
|
||
- 选择合适的模型(平衡质量和速度)
|
||
- 调整并发参数(根据硬件配置)
|
||
|
||
### 2. 云服务优化
|
||
- 开启CDN加速
|
||
- 合理设置缓存策略
|
||
- 监控API调用量和费用
|
||
|
||
### 3. 系统优化
|
||
- 调整数据库连接池大小
|
||
- 配置Redis缓存
|
||
- 设置合理的超时时间
|
||
- 监控生成任务队列
|
||
|
||
## 常见问题
|
||
|
||
### 1. 本地模型连接失败
|
||
- 检查Stable Diffusion服务是否启动
|
||
- 确认API地址和端口正确
|
||
- 验证网络连通性
|
||
- 查看服务日志
|
||
|
||
### 2. 生成图片质量不佳
|
||
- 调整steps参数(20-50)
|
||
- 优化prompt描述
|
||
- 使用负面提示词
|
||
- 尝试不同采样器
|
||
|
||
### 3. 生成速度过慢
|
||
- 使用GPU加速
|
||
- 减少图片尺寸
|
||
- 降低steps参数
|
||
- 使用云服务模式
|
||
|
||
### 4. OSS上传失败
|
||
- 检查OSS配置
|
||
- 验证权限设置
|
||
- 查看网络连接
|
||
- 检查存储空间
|
||
|
||
## 监控和日志
|
||
|
||
### 1. 关键指标监控
|
||
- 生成成功率
|
||
- 平均生成时间
|
||
- 并发请求数
|
||
- 错误率统计
|
||
|
||
### 2. 日志配置
|
||
```yaml
|
||
logging:
|
||
level:
|
||
org.dromara.ai: DEBUG # 开启详细日志
|
||
```
|
||
|
||
### 3. 性能监控
|
||
- 使用Spring Boot Actuator
|
||
- 配置Prometheus + Grafana
|
||
- 设置告警规则
|
||
|
||
## 扩展开发
|
||
|
||
### 1. 添加新的生成器
|
||
```java
|
||
@Component
|
||
public class CustomGenerator implements AiImageGenerator {
|
||
@Override
|
||
public AiImageVO generateImage(AiImageGenerateDTO dto) {
|
||
// 实现生成逻辑
|
||
}
|
||
|
||
@Override
|
||
public AiImageVO editImage(AiImageEditDTO dto) {
|
||
// 实现编辑逻辑
|
||
}
|
||
|
||
@Override
|
||
public String getType() {
|
||
return "CUSTOM";
|
||
}
|
||
|
||
@Override
|
||
public boolean isAvailable() {
|
||
// 检查服务可用性
|
||
}
|
||
}
|
||
```
|
||
|
||
### 2. 添加限流策略
|
||
```java
|
||
@Component
|
||
public class CustomRateLimiter {
|
||
// 实现自定义限流逻辑
|
||
}
|
||
```
|
||
|
||
### 3. 添加缓存策略
|
||
```java
|
||
@Component
|
||
public class CustomCacheManager {
|
||
// 实现自定义缓存逻辑
|
||
}
|
||
``` |