mirror of
https://gitee.com/dromara/RuoYi-Vue-Plus.git
synced 2026-09-18 09:35:29 +08:00
277 lines
7.4 KiB
Markdown
277 lines
7.4 KiB
Markdown
# AI图片生成模块
|
||
|
||
## 功能概述
|
||
|
||
AI图片生成模块提供了基于AI的图片生成和编辑功能,支持本地开源模型和云服务双模式切换。
|
||
|
||
## 核心功能
|
||
|
||
### 1. 文生图(Text-to-Image)
|
||
- 根据文字描述生成图片
|
||
- 支持自定义图片尺寸(如750×1440、200×200等)
|
||
- 支持负面描述(不希望在图片中出现的内容)
|
||
- 支持多种参数调节(步数、CFG值、采样器等)
|
||
|
||
### 2. 局部修改(Image-to-Image/Inpainting)
|
||
- 对已有图片进行局部编辑
|
||
- 支持蒙版编辑(指定编辑区域)
|
||
- 支持区域编辑(指定坐标和尺寸)
|
||
- 保持原图风格的一致性
|
||
|
||
### 3. 双模式支持
|
||
- **本地模式**:基于Stable Diffusion开源模型
|
||
- **云服务模式**:基于阿里云通义万相等云服务
|
||
- 支持模式切换和自动降级
|
||
|
||
## 技术架构
|
||
|
||
### 模块结构
|
||
```
|
||
ruoyi-ai/
|
||
├── ruoyi-ai-api/ # API接口定义
|
||
├── ruoyi-ai-service/ # 业务逻辑实现
|
||
└── ruoyi-ai-starter/ # 自动配置启动器
|
||
```
|
||
|
||
### 核心组件
|
||
|
||
#### 1. 生成器接口(AiImageGenerator)
|
||
```java
|
||
public interface AiImageGenerator {
|
||
AiImageVO generateImage(AiImageGenerateDTO dto);
|
||
AiImageVO editImage(AiImageEditDTO dto);
|
||
String getType();
|
||
boolean isAvailable();
|
||
}
|
||
```
|
||
|
||
#### 2. 生成器工厂(AiImageGeneratorFactory)
|
||
- 管理所有生成器实例
|
||
- 根据模式选择合适的生成器
|
||
- 支持生成器自动降级
|
||
|
||
#### 3. 具体生成器实现
|
||
- **StableDiffusionGenerator**:本地Stable Diffusion模型
|
||
- **AliyunWanxiangGenerator**:阿里云通义万相云服务
|
||
|
||
### 性能优化
|
||
|
||
#### 1. 并发控制
|
||
- 本地模型:最大并发数3
|
||
- 云服务:最大并发数5
|
||
- 支持QPS=10的并发要求
|
||
|
||
#### 2. 缓存机制
|
||
- 相同描述直接返回缓存结果
|
||
- 缓存过期时间60分钟
|
||
- 最大缓存数量1000条
|
||
|
||
#### 3. 异步处理
|
||
- 大图片生成采用异步模式
|
||
- 支持超时控制(60秒)
|
||
|
||
#### 4. 图片存储
|
||
- 自动生成缩略图(200×200)
|
||
- OSS存储,支持CDN加速
|
||
- 图片格式自动识别和处理
|
||
|
||
## 配置说明
|
||
|
||
### 1. 基础配置
|
||
```yaml
|
||
ai:
|
||
image:
|
||
default-mode: LOCAL # 默认模式:LOCAL/CLOUD
|
||
local-model:
|
||
sd-api-url: http://localhost:7860 # Stable Diffusion API地址
|
||
default-model: stable-diffusion-v1-5 # 默认模型
|
||
timeout: 60 # 超时时间(秒)
|
||
max-concurrency: 3 # 最大并发数
|
||
cloud-service:
|
||
provider: ALIYUN # 云服务提供商
|
||
api-key: your-api-key # API密钥
|
||
secret-key: your-secret-key # 密钥
|
||
region: cn-shanghai # 区域
|
||
timeout: 60 # 超时时间(秒)
|
||
max-concurrency: 5 # 最大并发数
|
||
```
|
||
|
||
### 2. 存储配置
|
||
```yaml
|
||
ai:
|
||
image:
|
||
storage:
|
||
bucket-name: ai-images # OSS存储桶名称
|
||
path-prefix: ai/image/ # 存储路径前缀
|
||
generate-thumbnail: true # 是否生成缩略图
|
||
thumbnail-width: 200 # 缩略图宽度
|
||
thumbnail-height: 200 # 缩略图高度
|
||
```
|
||
|
||
### 3. 限流配置
|
||
```yaml
|
||
ai:
|
||
image:
|
||
rate-limit:
|
||
enabled: true # 是否启用限流
|
||
max-requests-per-second: 10 # 每秒最大请求数
|
||
max-requests-per-minute: 100 # 每分钟最大请求数
|
||
max-requests-per-hour: 500 # 每小时最大请求数
|
||
```
|
||
|
||
### 4. 缓存配置
|
||
```yaml
|
||
ai:
|
||
image:
|
||
cache:
|
||
enabled: true # 是否启用缓存
|
||
expire-minutes: 60 # 缓存过期时间(分钟)
|
||
max-cache-size: 1000 # 最大缓存数量
|
||
```
|
||
|
||
## API接口
|
||
|
||
### 1. 生成图片
|
||
```http
|
||
POST /ai/image/generate
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"prompt": "一只可爱的猫咪在草地上玩耍",
|
||
"width": 750,
|
||
"height": 1440,
|
||
"negativePrompt": "模糊,低质量",
|
||
"steps": 20,
|
||
"cfgScale": 7.5,
|
||
"generateMode": "LOCAL"
|
||
}
|
||
```
|
||
|
||
### 2. 编辑图片
|
||
```http
|
||
POST /ai/image/edit
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"originalImageUrl": "https://oss.example.com/image.jpg",
|
||
"editPrompt": "将猫咪的眼睛变成蓝色",
|
||
"x": 100,
|
||
"y": 100,
|
||
"width": 200,
|
||
"height": 200,
|
||
"editMode": "LOCAL"
|
||
}
|
||
```
|
||
|
||
### 3. 查询记录
|
||
```http
|
||
GET /ai/image/page?pageNum=1&pageSize=10&status=SUCCESS
|
||
```
|
||
|
||
### 4. 删除记录
|
||
```http
|
||
DELETE /ai/image/{id}
|
||
```
|
||
|
||
## 使用示例
|
||
|
||
### 1. 基础文生图
|
||
```java
|
||
AiImageGenerateDTO dto = new AiImageGenerateDTO();
|
||
dto.setPrompt("一只可爱的猫咪在草地上玩耍");
|
||
dto.setWidth(750);
|
||
dto.setHeight(1440);
|
||
dto.setGenerateMode("LOCAL");
|
||
|
||
AiImageVO result = aiImageService.generateImage(dto);
|
||
```
|
||
|
||
### 2. 高级参数设置
|
||
```java
|
||
AiImageGenerateDTO dto = new AiImageGenerateDTO();
|
||
dto.setPrompt("一只可爱的猫咪在草地上玩耍");
|
||
dto.setNegativePrompt("模糊,低质量,变形");
|
||
dto.setWidth(1024);
|
||
dto.setHeight(1024);
|
||
dto.setSteps(30);
|
||
dto.setCfgScale(8.0);
|
||
dto.setSampler("DPM++ 2M Karras");
|
||
dto.setSeed(12345L);
|
||
dto.setGenerateMode("CLOUD");
|
||
```
|
||
|
||
### 3. 局部编辑
|
||
```java
|
||
AiImageEditDTO dto = new AiImageEditDTO();
|
||
dto.setOriginalImageUrl("https://oss.example.com/cat.jpg");
|
||
dto.setEditPrompt("将猫咪的眼睛变成蓝色");
|
||
dto.setX(150);
|
||
dto.setY(120);
|
||
dto.setWidth(80);
|
||
dto.setHeight(60);
|
||
dto.setEditMode("LOCAL");
|
||
|
||
AiImageVO result = aiImageService.editImage(dto);
|
||
```
|
||
|
||
## 部署说明
|
||
|
||
### 1. 本地Stable Diffusion部署
|
||
```bash
|
||
# 使用Docker部署
|
||
docker run -d --name stable-diffusion \
|
||
-p 7860:7860 \
|
||
-v /path/to/models:/app/models \
|
||
--gpus all \
|
||
stable-diffusion-webui:latest
|
||
```
|
||
|
||
### 2. 阿里云通义万相配置
|
||
1. 注册阿里云账号
|
||
2. 开通DashScope服务
|
||
3. 获取API密钥
|
||
4. 配置到application.yml
|
||
|
||
### 3. 数据库表结构
|
||
```sql
|
||
CREATE TABLE `ai_image` (
|
||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||
`image_url` varchar(500) DEFAULT NULL COMMENT '图片URL',
|
||
`thumbnail_url` varchar(500) DEFAULT NULL COMMENT '缩略图URL',
|
||
`original_image_url` varchar(500) DEFAULT NULL COMMENT '原图片URL',
|
||
`prompt` text COMMENT '生成描述',
|
||
`negative_prompt` text COMMENT '负面描述',
|
||
`width` int DEFAULT NULL COMMENT '图片宽度',
|
||
`height` int DEFAULT NULL COMMENT '图片高度',
|
||
`file_size` bigint DEFAULT NULL COMMENT '文件大小',
|
||
`file_format` varchar(10) DEFAULT NULL COMMENT '文件格式',
|
||
`generate_mode` varchar(20) DEFAULT NULL COMMENT '生成模式',
|
||
`model_name` varchar(100) DEFAULT NULL COMMENT '模型名称',
|
||
`generate_time` bigint DEFAULT NULL COMMENT '生成耗时',
|
||
`status` varchar(20) DEFAULT NULL COMMENT '生成状态',
|
||
`error_message` text COMMENT '错误信息',
|
||
`generate_params` text COMMENT '生成参数',
|
||
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
|
||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
|
||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志',
|
||
PRIMARY KEY (`id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI图片生成记录';
|
||
```
|
||
|
||
## 性能指标
|
||
|
||
- **并发能力**:最大QPS=10
|
||
- **响应时间**:图片生成最慢不超过60秒
|
||
- **图片质量**:支持多种分辨率和格式
|
||
- **稳定性**:支持自动降级和故障转移
|
||
- **扩展性**:支持多种AI模型和云服务
|
||
|
||
## 注意事项
|
||
|
||
1. **资源消耗**:AI图片生成需要大量计算资源,建议部署在GPU服务器
|
||
2. **成本控制**:云服务按调用次数收费,注意设置限流和监控
|
||
3. **内容审核**:生成的图片需要符合相关法律法规
|
||
4. **版权保护**:注意生成图片的版权问题
|
||
5. **数据安全**:敏感图片需要加密存储和传输 |