# shiping
**Repository Path**: wangcixuan/shiping
## Basic Information
- **Project Name**: shiping
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-06-03
- **Last Updated**: 2026-06-03
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 电商 AI 视频制作平台 · 运行说明(README)
> 竞赛交付物 #1:源代码 + 运行说明
> Python 3.12 / FastAPI · 本文档面向评委,目标是让你在本地 **零障碍部署并复现** 端到端效果。
---
## 1. 项目简介
本项目是一个面向 **非技术背景的中小电商运营** 的零门槛 Web 平台:运营只需上传 **产品图 + 一段文字**,点一次按钮,即可自动产出一条 **30 秒竖屏带货短视频**(含黄金前 3 秒钩子、AI 口播文案、运镜与卡点、可量化的爆款潜力评分)。平台 **自身不训练、不构建任何模型**,只 **编排(orchestrate)两个外部服务**:DeepSeek API 负责全部文本智能(卖点提炼 / 口播 / 提示词优化 / 诊断建议),火山引擎 Ark / Seedance 负责全部视频生成;所有凭据 **只按环境变量名(env-var NAME)引用**,绝不硬编码、绝不入库。
---
## 2. 环境要求
| 项目 | 要求 |
| --- | --- |
| Python | **3.12** |
| 操作系统 | Windows / macOS / Linux 均可 |
| ffmpeg | **无需单独安装**,依赖 `imageio-ffmpeg` 已自带打包 ffmpeg 可执行文件 |
安装依赖(建议先创建虚拟环境):
```bash
# 1) 创建并激活虚拟环境(可选但推荐)
python -m venv .venv
# Windows:
.venv\Scripts\activate
# macOS / Linux:
source .venv/bin/activate
# 2) 安装依赖
pip install -r requirements.txt
```
`requirements.txt` 仅含 7 个核心依赖:`fastapi`、`uvicorn[standard]`、`sqlalchemy`、`requests`、`imageio-ffmpeg`、`python-dotenv`、`pytest`。
---
## 3. 配置(API 凭据)
复制环境变量模板为 `.env` 并填入三个 API Key:
```bash
# macOS / Linux:
cp .env.example .env
# Windows:
copy .env.example .env
```
`.env` 需要填写的三个凭据(平台只按 **变量名** 读取,`.env` 已被 `.gitignore` 排除,不会提交):
| 环境变量名 | 用途 |
| --- | --- |
| `DEEPSEEK_API_KEY` | DeepSeek:全部文本智能 |
| `ARK_API_KEY_SEEDANCE_20` | 火山 Ark / Seedance 2.0:图生视频、主力 / 终稿生成 |
| `ARK_API_KEY_SEEDANCE_15_PRO` | 火山 Ark / Seedance 1.5 Pro:草稿 / 文生视频 |
模板中还包含 **非机密** 的模型 id 与 API 地址(一般无需修改):`SEEDANCE_20_MODEL_ID`、`SEEDANCE_15_PRO_MODEL_ID`、`DEEPSEEK_MODEL_ID`、`ARK_API_BASE`。
> **重要(推荐的评审方式)**:即使 **不填写任何 API Key**,平台仍可 **完全离线** 运行两个内置 demo 行业案例(确定性 mock 适配器,结果可复现)。这是评委验证「端到端可复现性」最稳妥的方式,详见第 5 节。线上 `/ready` 健康检查只会回报 **缺失凭据的变量名**,绝不暴露任何密钥值。
---
## 4. 启动
```bash
python main.py
# 等价写法:
uvicorn app.web.app:app
```
服务默认监听 `0.0.0.0:8000`。启动后在浏览器打开:
| 入口 | 地址 | 说明 |
| --- | --- | --- |
| 商户 Web UI | | 运营操作主界面(上传 / 一键生成 / 预览 / 下载 / 评分报告) |
| 管理后台 Admin Console | | 账号 / 配额 / 素材 / 产物 / 统计管理 |
| 商户 REST API | `http://localhost:8000/api/merchant` | Web UI 背后的接口(提交、状态、下载、分段编辑、评分、报告等) |
健康检查 / 就绪探针:
- `GET /health` — 存活探针,返回 `{"status":"ok"}`
- `GET /ready` — 就绪探针,返回凭据是否齐全(仅回报缺失凭据的 **变量名**,不泄露密钥)
---
## 5. 快速体验(离线可复现 demo)
平台内置两个 **保存好的行业案例**,无需任何 API Key、无需真实 ffmpeg,即可端到端跑通(输入 → 编剧链 → 分镜 → 双模型生成 → 拼接 → 音画同步 → 后期 → 评分 → 建议 → 优化闭环 → 合规终审 → 生成报告,并额外执行一次显式的分段重生成),最终产出固定规格(360×640 / 9:16 / ≤30s)的可下载视频:
- `beauty_lipstick` — 美妆(口红)
- `appliance_humidifier` — 小家电 / 家居(加湿器)
**方式一:用测试复现(最简单,推荐评委使用)**
```bash
python -m pytest tests/test_demo_cases.py -q
```
**方式二:用 demos 模块直接跑**
```bash
# 跑口红案例
python -c "from app.demos import run_demo_case; j = run_demo_case('beauty_lipstick'); print(j.final_video_path, j.overall_score.display)"
# 跑加湿器案例
python -c "from app.demos import run_demo_case; j = run_demo_case('appliance_humidifier'); print(j.final_video_path, j.overall_score.display)"
```
入口函数:`app.demos.run_demo_case(case_id)`(返回 `Generation_Job`,含 `final_video_path`、`overall_score`、`report`)。需要更详细结果(基线分 vs 最终分、重生成结果、规格校验)可用 `app.demos.demo_cases.run_demo_case_detailed`。所有外部协作方(DeepSeek / Ark / Seedance / TTS / ffmpeg)均由 `app.demos.adapters` 注入为确定性离线 mock,因此 **每次运行结果一致、可复现**。
---
## 6. 核心功能 与 6 大痛点对应
| 官方 6 大痛点 | 平台能力 | 主要实现位置 |
| --- | --- | --- |
| 零门槛操作 | 产品图 + 文字 → 一键生成,关键词 / 风格均为可选且由 AI 补全 | 输入层 `app/input/` + 商户 `Web_UI`(`app/web/ui_routes.py`、`app/web/merchant_routes.py`) |
| 模板化一键生成 | 行业模板驱动的一键流水线 | `Industry_Templates` + 一键 `Generation_Pipeline`(`app/pipeline.py`) |
| 片段级局部重生成 | 标记不满意片段 + 自然语言描述,仅重生成该片段 | `Segment_Editor`(`app/scoring/segment_editor.py`) |
| 语音卡点同步 < 0.3s | 基于 TTS 自带时间戳的语义节奏对齐 | `Audio_Sync_Engine`(`app/assembly/audio_sync_engine.py`,`SYNC_TOLERANCE_SECONDS = 0.3`) |
| 自动运镜与故事吸引力 | 导演级运镜 + 叙事框架编剧链(黄金前 1.5s 钩子) | `AI_Director`(`app/story/ai_director.py`)+ `AI_Screenwriter_Chain`(`app/story/screenwriter_chain.py`) |
| 可推广性量化评分 | 4 维度爆款潜力评分 + 诊断式改进建议 | `Quality_Scorer`(`app/scoring/quality_scorer.py`)+ `Suggestion_Engine`(`app/scoring/suggestion_engine.py`) |
---
## 7. 视频规格说明
平台产出固定规格,由 `app/constants.py` 作为唯一事实来源统一驱动:
- **分辨率**:360×640(**竖屏 9:16**)
- **帧率**:30 fps
- **结构**:5 段 × 6 秒 = **30 秒**(±1s 容差;单段重生成 6s ±0.5s)
之所以选择 **竖屏 9:16**,是为契合 **抖音 / 快手 / 视频号** 的主流竖屏带货场景。官方评分附录中提到的 640×360 **横屏** 仅作为另一种可选朝向(备选 / 未来扩展),不属于本次构建的默认输出。
---
## 8. 项目结构
```
app/
├── adapters/ 外部服务适配器(DeepSeek / Ark·Seedance / TTS),平台不自建模型
├── input/ 输入处理:卖点提炼、风格映射
├── story/ 叙事与文案:AI 导演、编剧链、口播、分镜脚本、提示词优化
├── generation/ 视频生成:模型路由、分段生成、连贯性管理
├── assembly/ 合成:拼接、音画同步、后期、后期润色
├── scoring/ 评分与优化:质量评分、建议、优化闭环、分段编辑器
├── cost/ 成本 / 积分管理(按生成秒数计费)
├── safety/ 安全网:合规终审 Compliance_Guard、Demo 兜底 Demo_Fallback_Mode
├── report/ 生成报告 Generation_Report
├── web/ FastAPI 应用工厂、商户 REST API、商户与管理后台 UI、静态页
├── demos/ 两个离线可复现 demo 案例(口红 / 加湿器)及其 mock 适配器
├── config.py 按环境变量名加载凭据 + 重导出格式常量
├── constants.py 固定规格与阈值(唯一事实来源)
├── pipeline.py 一键生成主流水线
├── models.py 领域数据模型
└── db.py SQLite 持久化
```
---
## 9. 测试
```bash
python -m pytest -q
```
仓库包含约 **400+ 个测试**(当前约 431 个),覆盖输入、叙事、生成、合成、评分、优化、合规、兜底、Web API 与两个 demo 案例。
---
## 10. 一票否决项的规避
- **文字 / logo 一律由 ffmpeg 后期合成,模型从不渲染文字**:Seedance 永远不被要求渲染屏幕文字 / 字幕 / CTA / 品牌 logo,`Negative_Prompt` 明确禁止模型产出任何文字与 logo,所有文字与 logo 由 `Post_Processor` 用内嵌字体经 ffmpeg 叠加合成 —— 从结构上杜绝「文字乱码」这一典型一票否决项。
- **Compliance_Guard 终审**:交付前的最终闸门,拦截文字乱码、错误 / 变形 logo、空字幕帧、损坏的拼接等致命缺陷。
- **Demo_Fallback_Mode 兜底**:任一流水线阶段失败且无既定降级路径时,先重试可恢复阶段,再跳过优化闭环、用最后有效片段安全合成,**始终保证有可下载视频** —— 避免现场演示因报错而无法复现。