Skip to content

aixier/media-asr-server

Repository files navigation

Media ASR Server

License: MIT Python 3.11+ FastAPI

基于 FastAPI 的媒体文件语音识别服务,支持视频分享链接转视频链接并调用 ASR 接口进行语音识别和内容分析。

✨ 功能特性

  • 🎥 视频转写 - 支持单个和批量视频语音转文字
  • 🌐 多语言识别 - 支持多种语言的语音识别
  • 📊 内容分析 - 对转写结果进行智能分析和结构化
  • 📝 文本重构 - 对表格数据进行重新结构化
  • 🔄 任务管理 - 实时任务状态追踪和进度监控
  • 🏢 多租户支持 - 支持多租户数据隔离
  • 🔐 认证授权 - Bearer Token 认证机制
  • 异步处理 - 高性能异步任务处理

🚀 快速开始

环境要求

  • Python 3.11+
  • FFmpeg
  • PostgreSQL 或其他支持的数据库

安装

  1. 克隆项目
git clone https://github.com/yourusername/media-asr-server.git
cd media-asr-server
  1. 创建虚拟环境
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate
  1. 安装依赖
pip install -r requirements.txt
# 或使用 uv
uv pip install -r requirements.txt
  1. 配置环境变量 复制 .env.example.env 并配置以下变量:
# ASR服务配置
ASR_API_KEY=your_asr_api_key
ASR_API_URL=your_asr_api_url

# 数据库配置
DATABASE_URL=postgresql://user:password@localhost/dbname

# API配置
API_PREFIX=/api/v1
API_TITLE=Media ASR Server
API_VERSION=1.0.0
ENV=development

# CORS配置
CORS_ORIGINS=["http://localhost:3000"]
CORS_HEADERS=["*"]

# 服务器配置
HOST=0.0.0.0
PORT=8000
  1. 初始化数据库
python src/scripts/create_tables.py
  1. 运行服务
uvicorn src.main:app --reload

访问 http://localhost:8000/api/v1/docs 查看 API 文档。

📚 API 文档

主要接口

视频转写

  • POST /api/v1/share-to-text - 单个视频转写
  • POST /api/v1/multi-share-to-text - 批量视频转写
  • GET /api/v1/task/{task_id}/status - 查询任务状态
  • GET /api/v1/task/{task_id}/result - 获取转写结果

内容分析

  • POST /api/v1/analysis/text - 文本内容分析
  • POST /api/v1/analysis/video - 视频内容分析
  • GET /api/v1/analysis/records - 查询分析记录

文本处理

  • POST /api/v1/analyze-table - 表格数据分析重构
  • GET /api/v1/records - 查询文本分析记录

详细的 API 文档请访问部署后的 /api/v1/docs 端点。

🏗️ 项目结构

media-asr-server/
├── src/
│   ├── main.py              # FastAPI应用入口
│   ├── settings.py          # 配置管理
│   ├── auth.py             # 认证授权
│   ├── logger.py           # 日志配置
│   ├── exceptions.py       # 异常处理
│   ├── models/             # 数据模型
│   │   ├── asr.py         # ASR相关模型
│   │   ├── auth.py        # 认证模型
│   │   ├── content_analysis.py  # 内容分析模型
│   │   ├── db_models.py   # 数据库模型
│   │   ├── task.py        # 任务模型
│   │   ├── text_analysis.py  # 文本分析模型
│   │   └── video.py       # 视频模型
│   ├── routers/            # API路由
│   │   ├── share.py       # 视频转写路由
│   │   └── analysis.py    # 内容分析路由
│   ├── services/           # 业务服务
│   │   ├── asr_service.py    # ASR服务
│   │   ├── content_analysis_service.py  # 内容分析服务
│   │   ├── database.py    # 数据库服务
│   │   ├── llm_service.py # LLM服务
│   │   └── share_parser.py # 链接解析服务
│   └── scripts/            # 脚本工具
│       └── create_tables.py  # 数据库初始化
├── tests/                  # 测试文件
├── docs/                   # 文档
├── requirements.txt        # 依赖列表
├── .env.example           # 环境变量示例
└── README.md              # 项目说明

🔧 开发

开发环境设置

# 安装开发依赖
pip install -r requirements-dev.txt

# 运行测试
pytest

# 代码格式化
black src/
ruff check src/

# 类型检查
mypy src/

代码规范

  • 遵循 PEP 8 代码风格
  • 使用 PEP 257 文档字符串规范
  • 使用 Pydantic 进行数据验证
  • 异步处理所有 I/O 操作
  • 函数长度限制在 40 行以内
  • 单文件长度限制在 400 行以内

🐳 Docker 部署

# 构建镜像
docker build -t media-asr-server .

# 运行容器
docker run -d \
  --name media-asr-server \
  -p 8000:8000 \
  --env-file .env \
  media-asr-server

🧪 测试

# 运行所有测试
pytest

# 运行特定测试
pytest tests/test_database.py

# 生成测试覆盖率报告
pytest --cov=src --cov-report=html

📊 数据库架构

项目使用关系型数据库存储任务和结果数据。主要表结构包括:

  • user_tasks - 用户任务表
  • user_task_statuses - 任务状态表
  • video_tasks - 视频任务表
  • video_task_results - 视频结果表
  • asr_tasks - ASR任务表
  • text_analysis - 文本分析记录表
  • content_analysis - 内容分析记录表

详细的数据库设计请参考 database.md

🤝 贡献

欢迎贡献代码!请遵循以下步骤:

  1. Fork 项目
  2. 创建功能分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 创建 Pull Request

📝 许可证

本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。

🙏 致谢

📧 联系方式

项目链接: https://github.com/yourusername/media-asr-server

🔗 相关项目

  • Whisper - OpenAI 的语音识别模型
  • FFmpeg - 多媒体处理工具

About

Media file speech recognition and content analysis service based on FastAPI

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •