基于AI的智能视频抽帧和故事生成系统,将视频内容转换为连环画剧本。
- 🎬 智能视频抽帧: 基于时间均匀分布的智能抽帧算法
- 🤖 AI关键帧筛选: 使用AI分析筛选最重要的关键帧
- 📖 故事生成: 基于关键帧生成连环画剧本
- 🎨 风格化处理: 将图像转换为水墨画风格
- 🚀 高性能并行优化:
- AI分析并发处理 (8-16x提速)
- 故事生成与风格化并行执行 (3.7x提速)
- 整体系统性能提升 4x+
- 🔒 安全: 环境变量管理API密钥
- 🐳 易部署: 支持Docker和云平台部署
视频上传 → 智能抽帧 → AI分析(串行) → 关键帧筛选 → 故事生成 → 风格化处理
视频上传 → 智能抽帧 → AI分析(并发8-16线程) → 关键帧筛选 → [故事生成 || 风格化处理] → 结果整合
性能提升:
- AI分析: 8-16x提速 (并发处理)
- 业务流程: 3.7x提速 (并行执行)
- 整体系统: 4x+提速 (综合优化)
# 克隆项目
git clone <your-repo-url>
cd frame-weavers
# 安装依赖
pip install -r requirements.txt# 复制环境变量模板
cp .env.example .env
# 编辑.env文件,填入你的API密钥
nano .env必需的环境变量:
MOONSHOT_API_KEY=sk-your-moonshot-key
MODELSCOPE_API_KEY=ms-your-modelscope-key
OPENAI_API_KEY=sk-your-openai-key# 使用配置助手
python setup_env.py
# 或直接测试
python test_env_config.pypython app.py服务将在 http://localhost:5000 启动
GET /- 健康检查GET /api/config/status- 配置状态检查
POST /api/upload/videos- 上传视频GET /api/task/status/<task_id>- 查询任务状态POST /api/extract/frames- 提取视频帧GET /api/frames/<task_id>/<filename>- 获取帧图像
import requests
# 1. 上传视频
files = {'videos': open('video.mp4', 'rb')}
data = {'device_id': 'test-device'}
response = requests.post('http://localhost:5000/api/upload/videos',
files=files, data=data)
task_id = response.json()['task_id']
# 2. 提取帧
data = {'task_id': task_id, 'target_frames': 8, 'interval': 1.0}
response = requests.post('http://localhost:5000/api/extract/frames', data=data)
# 3. 查询状态
response = requests.get(f'http://localhost:5000/api/task/status/{task_id}')| 配置项 | 默认值 | 优化值 | 说明 |
|---|---|---|---|
| MAX_CONCURRENT_REQUESTS | 10 | 16 | AI分析最大并发数 (提升60%) |
| MAX_STYLE_WORKERS | 4 | 8 | 风格化并发线程数 (提升100%) |
| MEMORY_WARNING_THRESHOLD | 80 | 80 | 内存警告阈值(%) |
| MAX_MEMORY_USAGE | 90 | 90 | 最大内存使用(%) |
| CONNECTION_TIMEOUT | 300 | 300 | 连接超时(秒) |
| REQUEST_TIMEOUT | 600 | 600 | 请求超时(秒) |
- 智能并发数调整: 根据CPU核心数和任务量动态调整
- 线程池管理: 使用
ThreadPoolExecutor实现真正并行 - 异步AI分析:
asyncio+aiohttp高性能并发请求 - 内存优化: 智能垃圾回收和内存监控
| 配置项 | 默认值 | 说明 |
|---|---|---|
| DEFAULT_TEMPERATURE | 0.7 | AI生成温度 |
| DEFAULT_MAX_TOKENS | 2000 | 最大Token数 |
| DEFAULT_STYLE_PROMPT | 水墨画风格 | 默认风格提示词 |
# 构建镜像
docker build -t frame-api .
# 运行容器
docker run --env-file .env -p 5000:5000 frame-api- 推送代码到Git仓库
- 在Zeabur连接仓库
- 设置环境变量
- 部署应用
详细部署指南:DEPLOYMENT_GUIDE.md
# 环境配置测试
python test_env_config.py
# OpenCV无头环境测试
python test_headless.py
# CPU性能测试
python test_cpu_performance.py
# 风格化API测试
python test_style.py
# 🚀 性能优化测试
python performance_test.py运行完整的性能基准测试:
# 启动服务
python app.py
# 在另一个终端运行性能测试
python performance_test.py运行图片优化测试(修复504错误):
# 测试图片压缩和风格化优化
python test_image_optimization.py测试结果将包括:
- ⏱️ 各阶段处理时间分析
- 🚀 并行优化效果统计
- 📊 提速倍数计算
- 💾 内存使用监控
- 🖼️ 图片压缩效果验证
- 🎨 504错误修复验证
查看详细优化方案:
- ✅ 环境变量配置
- ✅ 依赖库导入
- ✅ OpenCV功能
- ✅ API密钥验证
- ✅ Flask应用启动
- ✅ 视频抽帧功能
- ✅ AI分析功能
frame-weavers/
├── app.py # Flask主应用
├── config.py # 配置管理
├── diversity_frame_extractor.py # 视频抽帧核心
├── story_generation_agents.py # 故事生成
├── requirements.txt # 依赖列表
├── .env.example # 环境变量模板
├── Dockerfile # Docker配置
├── setup_env.py # 环境配置助手
├── test_*.py # 测试脚本
├── uploads/ # 上传目录
├── frames/ # 帧存储目录
└── stories/ # 故事输出目录
- ✅ API密钥通过环境变量管理
- ✅ 不在代码中硬编码敏感信息
- ✅ .env文件已加入.gitignore
- ✅ 支持不同环境的不同配置
- ✅ 提供配置验证和状态检查
-
OpenGL库缺失错误
- 解决:使用
opencv-python-headless替代opencv-python
- 解决:使用
-
环境变量未加载
- 检查
.env文件是否存在 - 运行
python test_env_config.py验证
- 检查
-
API密钥无效
- 确认密钥格式正确
- 检查密钥权限和有效期
-
内存不足
- 调整
MAX_CONCURRENT_REQUESTS参数 - 增加系统内存或使用更小的视频文件
- 调整
- 运行
python setup_env.py获取配置帮助 - 查看 DEPLOYMENT_GUIDE.md 了解部署详情
- 访问
/api/config/status检查系统状态
MIT License
欢迎提交Issue和Pull Request!
如有问题,请通过Issue联系我们。