feat: 实现AI视频分类功能

新功能:
- 集成Google Gemini API进行视频智能分类
- 实现任务队列系统支持批量处理
- 添加实时进度显示和状态管理
- 自动文件整理到分类文件夹

 架构改进:
- 遵循Tauri开发规范的分层架构设计
- 完整的数据模型和仓库层实现
- 异步任务处理和错误处理机制
- 类型安全的前后端通信接口

 用户界面:
- MaterialCard组件添加AI分类按钮
- VideoClassificationProgress进度显示组件
- 优美的动画效果和响应式设计
- 符合前端开发规范的UI/UX优化

 数据库扩展:
- 新增video_classification_records表
- 新增video_classification_tasks表
- 完整的索引优化和外键约束

 技术实现:
- Rust后端服务层完整实现
- React/TypeScript前端状态管理
- Zustand状态存储和API封装
- 完善的错误处理和用户提示

 文档:
- 完整的功能文档和API说明
- 架构设计和使用流程说明
- 开发规范遵循情况说明

Closes #AI视频分类功能开发
This commit is contained in:
imeepos
2025-07-14 12:52:30 +08:00
parent c9882aad18
commit b8dfaf8af8
22 changed files with 3485 additions and 45 deletions

View File

@@ -0,0 +1,288 @@
# AI视频分类功能文档
## 概述
AI视频分类功能是MixVideo桌面应用的核心功能之一通过集成Google Gemini API实现对视频片段的智能分类。该功能遵循Tauri开发规范采用分层架构设计提供完整的任务队列管理和用户界面。
## 功能特性
### 核心功能
- **智能视频分类**: 使用Google Gemini AI对视频片段进行自动分类
- **批量处理**: 支持对素材的所有片段进行批量分类
- **任务队列**: 实现排队机制,支持任务优先级和重试机制
- **实时进度**: 提供实时的分类进度和状态更新
- **文件整理**: 根据分类结果自动移动视频文件到对应分类文件夹
### 用户界面
- **一键分类**: 在素材卡片中提供AI分类按钮
- **进度显示**: 优美的进度条和状态指示器
- **结果展示**: 详细的分类结果和统计信息
- **错误处理**: 友好的错误提示和重试机制
## 技术架构
### 后端架构 (Rust/Tauri)
#### 数据模型层 (`src/data/models/`)
- `video_classification.rs`: 视频分类相关数据模型
- `VideoClassificationRecord`: 分类记录
- `VideoClassificationTask`: 分类任务
- `BatchClassificationRequest`: 批量分类请求
- `ClassificationStats`: 分类统计信息
#### 数据访问层 (`src/data/repositories/`)
- `video_classification_repository.rs`: 视频分类数据仓库
- 分类记录的CRUD操作
- 分类任务的状态管理
- 统计信息查询
#### 业务逻辑层 (`src/business/services/`)
- `video_classification_service.rs`: 视频分类业务服务
- 批量任务创建
- Gemini API调用
- 文件移动和整理
- `video_classification_queue.rs`: 任务队列管理
- 队列状态控制
- 任务进度跟踪
- 并发处理控制
#### 基础设施层 (`src/infrastructure/`)
- `gemini_service.rs`: Gemini API集成服务
- 访问令牌管理
- 视频文件上传
- AI内容分析
#### 表现层 (`src/presentation/commands/`)
- `video_classification_commands.rs`: Tauri命令接口
- 前后端通信桥梁
- 命令参数验证
- 错误处理
### 前端架构 (React/TypeScript)
#### 状态管理 (`src/store/`)
- `videoClassificationStore.ts`: 视频分类状态管理
- Zustand状态存储
- API调用封装
- 错误状态管理
#### 组件层 (`src/components/`)
- `MaterialCard.tsx`: 素材卡片组件(增强)
- AI分类按钮
- 分类状态显示
- `VideoClassificationProgress.tsx`: 分类进度组件
- 实时进度显示
- 队列状态控制
- 统计信息展示
## 数据库设计
### 视频分类记录表 (`video_classification_records`)
```sql
CREATE TABLE video_classification_records (
id TEXT PRIMARY KEY,
segment_id TEXT NOT NULL,
material_id TEXT NOT NULL,
project_id TEXT NOT NULL,
category TEXT NOT NULL,
confidence REAL NOT NULL,
reasoning TEXT NOT NULL,
features TEXT NOT NULL,
product_match INTEGER NOT NULL,
quality_score REAL NOT NULL,
gemini_file_uri TEXT,
raw_response TEXT,
status TEXT NOT NULL,
error_message TEXT,
created_at DATETIME NOT NULL,
updated_at DATETIME NOT NULL
);
```
### 视频分类任务表 (`video_classification_tasks`)
```sql
CREATE TABLE video_classification_tasks (
id TEXT PRIMARY KEY,
segment_id TEXT NOT NULL,
material_id TEXT NOT NULL,
project_id TEXT NOT NULL,
video_file_path TEXT NOT NULL,
status TEXT NOT NULL,
priority INTEGER DEFAULT 0,
retry_count INTEGER DEFAULT 0,
max_retries INTEGER DEFAULT 3,
gemini_file_uri TEXT,
prompt_text TEXT,
error_message TEXT,
started_at DATETIME,
completed_at DATETIME,
created_at DATETIME NOT NULL,
updated_at DATETIME NOT NULL
);
```
## API接口
### Tauri命令接口
#### 启动视频分类
```rust
#[command]
pub async fn start_video_classification(
request: BatchClassificationRequest,
state: State<'_, AppState>,
) -> Result<Vec<String>, String>
```
#### 获取队列状态
```rust
#[command]
pub async fn get_classification_queue_status(
state: State<'_, AppState>,
) -> Result<QueueStats, String>
```
#### 获取任务进度
```rust
#[command]
pub async fn get_classification_task_progress(
task_id: String,
state: State<'_, AppState>,
) -> Result<Option<TaskProgress>, String>
```
### Gemini API集成
#### 配置
```rust
pub struct GeminiConfig {
pub base_url: String,
pub bearer_token: String,
pub timeout: u64,
}
```
#### 主要方法
- `upload_video_file()`: 上传视频文件到Gemini
- `generate_content_analysis()`: 生成内容分析
- `classify_video()`: 完整的视频分类流程
## 使用流程
### 1. 用户操作流程
1. 用户在素材详情页面点击"AI分类"按钮
2. 系统创建批量分类任务并加入队列
3. 队列开始处理任务,显示实时进度
4. 完成分类后,视频文件自动移动到分类文件夹
5. 用户可查看分类结果和统计信息
### 2. 系统处理流程
1. **任务创建**: 为素材的每个片段创建分类任务
2. **队列处理**: 按优先级顺序处理任务
3. **视频上传**: 将视频文件上传到Gemini
4. **AI分析**: 调用Gemini API进行内容分析
5. **结果解析**: 解析AI响应并创建分类记录
6. **文件移动**: 根据分类结果移动视频文件
7. **状态更新**: 更新任务状态和进度信息
## 错误处理
### 常见错误类型
- **网络错误**: Gemini API连接失败
- **文件错误**: 视频文件不存在或损坏
- **解析错误**: AI响应格式异常
- **权限错误**: 文件移动权限不足
### 错误处理策略
- **自动重试**: 网络错误和临时故障自动重试
- **降级处理**: AI响应异常时使用默认分类
- **用户提示**: 友好的错误消息和解决建议
- **日志记录**: 详细的错误日志用于调试
## 性能优化
### 并发控制
- 单任务处理避免资源竞争
- 任务间延迟防止API限流
- 连接池管理减少开销
### 缓存策略
- 访问令牌缓存减少认证请求
- 分类结果缓存避免重复处理
- 进度状态缓存提升响应速度
## 配置说明
### Gemini API配置
```rust
// 默认配置
GeminiConfig {
base_url: "https://bowongai-dev--bowong-ai-video-gemini-fastapi-webapp.modal.run",
bearer_token: "bowong7777",
timeout: 120,
}
```
### 队列配置
- `max_concurrent_tasks`: 最大并发任务数默认1
- `processing_delay`: 任务间延迟默认2秒
- `max_retries`: 最大重试次数默认3次
## 部署注意事项
### 依赖要求
- Rust 1.70+
- Tauri 2.0+
- SQLite 3.35+
- Node.js 18+
### 环境变量
- `GEMINI_API_URL`: Gemini API地址
- `GEMINI_BEARER_TOKEN`: 认证令牌
### 权限配置
- 文件系统读写权限
- 网络访问权限
- 数据库访问权限
## 开发规范遵循
### Tauri开发规范
- ✅ 分层架构设计
- ✅ 错误处理机制
- ✅ 异步处理模式
- ✅ 状态管理规范
### 前端开发规范
- ✅ 组件化设计
- ✅ 状态管理最佳实践
- ✅ 用户体验优化
- ✅ 响应式设计
### 代码质量
- ✅ 类型安全
- ✅ 错误处理
- ✅ 单元测试
- ✅ 文档完整
## 后续优化建议
1. **性能优化**
- 实现多任务并发处理
- 添加视频预处理缓存
- 优化数据库查询性能
2. **功能增强**
- 支持自定义分类规则
- 添加分类结果人工审核
- 实现分类模型训练
3. **用户体验**
- 添加分类预览功能
- 支持批量操作撤销
- 优化进度显示动画
4. **监控运维**
- 添加性能监控
- 实现日志分析
- 支持配置热更新