# audioTramqoder **Repository Path**: maokaren/audio-tramqoder ## Basic Information - **Project Name**: audioTramqoder - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-01-12 - **Last Updated**: 2026-03-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AudioTram - RTSP 音频实时转写系统 基于 FunASR 和 FastAPI 的 RTSP 音频流实时转写系统,支持多摄像头并发转写、实时推送和数据持久化。 ## 功能特性 ✅ **多摄像头管理**:支持动态添加/删除摄像头转写任务 ✅ **实时转写**:基于 FunASR 流式模型的实时语音识别 ✅ **GPU 加速**:优先使用 GPU,支持多 GPU 智能负载均衡 ✅ **自动降级**:显存不足时自动降级到 CPU ✅ **数据存储**:转写内容存入 MySQL,音频保存为 WAV 格式 ✅ **实时推送**:通过 SSE (Server-Sent Events) 实时推送转写结果 ✅ **任务管理**:支持任务启动、停止、查询状态 ✅ **Redis 缓存**:使用 Redis 实现消息发布订阅 ✅ **GPU 监控**:实时查询 GPU 使用状态和负载情况 ✅ **多协议支持**:支持 RTSP、RTMP、HTTP/HTTPS、WebSocket、MQTT、UDP/RTP、TCP 等多种音频流协议 ✅ **自动恢复**:项目重启后自动恢复之前运行中的任务 ✅ **文件上传转写**:支持 WAV、MP3、MP4 等音频视频文件的上传和批量转写 ## 项目结构 ``` audioTramqoder/ ├── app/ │ ├── core/ # 核心配置 │ │ ├── config.py # 项目配置 │ │ ├── database.py # 数据库连接 │ │ └── redis_client.py # Redis 客户端 │ ├── models/ # 数据模型 │ │ └── models.py # SQLAlchemy 模型 │ ├── services/ # 业务服务 │ │ ├── audio_handler.py # 音频处理 │ │ ├── transcribe_service.py # 转写服务 │ │ ├── task_manager.py # 任务管理器 │ │ ├── gpu_manager.py # GPU 资源管理器 ✨ │ │ └── sse_manager.py # SSE 推送管理 │ └── routers/ # API 路由 │ ├── camera.py # 摄像头管理接口 │ ├── gpu.py # GPU 管理接口 ✨ │ └── sse.py # SSE 推送接口 ├── audio_files/ # 音频文件存储目录 ├── logs/ # 日志目录 ├── main.py # FastAPI 主应用 ├── run.py # 启动脚本 ├── requirements.txt # 依赖包 ├── .env.example # 配置示例 ├── init_db.sql # 数据库初始化脚本 ├── test_gpu_manager.py # GPU 管理测试脚本 ✨ └── GPU_OPTIMIZATION.md # GPU 优化文档 ✨ ``` ## 安装部署 ### 1. 安装依赖 ```bash # 使用项目 Python 环境 C:\Users\911\.conda\envs\audio_demo\python.exe -m pip install -r requirements.txt ``` ### 2. 配置数据库 ```bash # 连接 MySQL 并执行初始化脚本 mysql -u root -p < init_db.sql ``` ### 3. 配置环境变量 ```bash # 复制配置文件 copy .env.example .env # 修改 .env 文件中的配置(数据库、Redis 等) ``` ### 4. 启动 Redis ```bash # Windows 下启动 Redis redis-server ``` ### 5. 启动应用 ```bash # 使用项目 Python 环境运行 C:\Users\911\.conda\envs\demo_script\python.exe run.py ``` 访问 API 文档:http://localhost:8000/docs ## API 接口说明 ### 1. 创建任务 ```http POST /api/v1/camera/task/create Content-Type: application/json { "camera_name": "大门摄像头", "source_url": "rtsp://admin:password@192.168.1.100:554/stream", "protocol_type": "rtsp" } ``` 支持的协议类型: - `rtsp`: RTSP协议(默认) - `rtmp`: RTMP协议 - `http`/`https`: HTTP/HTTPS协议 - `websocket`: WebSocket协议 - `mqtt`: MQTT协议 - `udp`/`rtp`: UDP/RTP协议 - `tcp`: TCP协议 ### 2. 启动任务 ```http POST /api/v1/camera/task/start Content-Type: application/json { "task_id": "abc12345", "protocol_type": "rtsp", "mqtt_topic": "audio/data" // 仅在MQTT协议时有效 } ``` ### 3. 停止任务 ```http POST /api/v1/camera/task/stop Content-Type: application/json { "task_id": "abc12345" } ``` ### 4. 获取任务列表 ```http GET /api/v1/camera/task/list?status=running&limit=100 ``` ### 5. 获取运行中任务 ```http GET /api/v1/camera/task/running ``` ### 6. 获取转写记录 ```http GET /api/v1/camera/transcribe/records/{task_id}?limit=50 ``` ### 7. SSE 实时推送 ```http GET /api/v1/sse/transcribe/{task_id} # task_id 可以是具体的任务ID,或者传 "all" 接收所有任务推送 ``` ### 8. 获取 GPU 状态 ```http GET /api/v1/gpu/status # 返回所有 GPU 的详细状态,包括显存使用、任务分配等 ``` ### 9. 获取 GPU 摘要 ```http GET /api/v1/gpu/summary # 返回 GPU 使用情况摘要 ``` ### 10. 查询任务 GPU 分配 ```http GET /api/v1/gpu/task/{task_id} # 查询指定任务被分配到哪个 GPU ``` ### 11. 上传文件进行转写 ```http POST /api/v1/file/upload Content-Type: multipart/form-data Form Data: - file: [选择音频或视频文件] 支持的格式: WAV, MP3, MP4, M4A, AAC, FLAC, M4B ``` ### 12. 获取文件转写记录列表 ```http GET /api/v1/file/records?status={status}&limit={limit}&offset={offset} 参数: - status: 状态过滤 (0-待处理, 1-处理中, 2-已完成, 3-失败) - limit: 限制数量 (默认100) - offset: 偏移量 (默认0) ``` ### 13. 获取单个文件转写记录 ```http GET /api/v1/file/record/{record_id} 参数: - record_id: 记录ID ``` ### 14. 删除文件转写记录 ```http DELETE /api/v1/file/record/{record_id} 参数: - record_id: 记录ID ``` ## SSE 客户端示例 ### JavaScript 客户端 ```javascript // 连接 SSE 流 const eventSource = new EventSource('http://localhost:8000/api/v1/sse/transcribe/all'); // 监听连接成功 eventSource.addEventListener('connected', (event) => { console.log('已连接:', JSON.parse(event.data)); }); // 监听转写结果 eventSource.addEventListener('transcribe', (event) => { const data = JSON.parse(event.data); console.log('转写结果:', data); // data 包含: task_id, camera_name, text, audio_file, duration, timestamp }); // 监听错误 eventSource.addEventListener('error', (event) => { console.error('错误:', event); }); // 关闭连接 // eventSource.close(); ``` ### Python 客户端 ```python import requests url = 'http://localhost:8000/api/v1/sse/transcribe/all' response = requests.get(url, stream=True) for line in response.iter_lines(): if line: line = line.decode('utf-8') if line.startswith('data:'): data = line[5:].strip() print('接收到:', data) ``` ## 配置说明 ### 数据库配置 - `MYSQL_HOST`: MySQL 主机地址 - `MYSQL_PORT`: MySQL 端口 - `MYSQL_USER`: MySQL 用户名 - `MYSQL_PASSWORD`: MySQL 密码 - `MYSQL_DATABASE`: 数据库名称 ### Redis 配置 - `REDIS_HOST`: Redis 主机地址 - `REDIS_PORT`: Redis 端口 - `REDIS_DB`: Redis 数据库编号 - `REDIS_PASSWORD`: Redis 密码(可选) ### FunASR 模型配置 - `MODEL_NAME`: 模型名称(paraformer-zh-streaming / SenseVoiceSmall) - `SAMPLE_RATE`: 采样率(16000) - `CHUNK_DURATION`: 音频块时长(秒) - `SENTENCE_MIN_LENGTH`: 最小句子长度 - `SILENCE_TIMEOUT`: 静音超时时间(秒) ### GPU 配置 - `USE_CUDA`: 是否启用 CUDA(默认:true) - `MIN_GPU_MEMORY_MB`: 最小 GPU 显存要求(MB,默认:2048) - `GPU_MEMORY_FRACTION`: 单任务最大显存占用比例(默认:0.8) > 📝 **更多 GPU 配置和优化说明,请查看 [GPU_OPTIMIZATION.md](./GPU_OPTIMIZATION.md)** ## 技术栈 - **FastAPI**: 现代化的 Web 框架 - **SQLAlchemy**: ORM 框架 - **MySQL**: 关系型数据库 - **Redis**: 缓存和消息队列 - **FunASR**: 语音识别模型 - **PyTorch**: 深度学习框架(支持 CUDA) - **PyAV**: 音视频处理 - **SSE**: 服务器推送事件 ## 注意事项 1. 确保 MySQL 和 Redis 服务已启动 2. RTSP 流地址必须包含音频轨道 3. GPU 加速需要安装 CUDA 版本的 PyTorch 4. 音频文件会自动保存到 `audio_files` 目录 5. 建议使用流式模型 `paraformer-zh-streaming` 以获得更好的实时性 6. 多 GPU 环境下系统会自动负载均衡,不需要手动配置 7. 显存不足时任务会自动降级到 CPU 模式 ## 常见问题 ### 1. 无法连接 RTSP 流 - 检查 RTSP 地址是否正确 - 确认摄像头是否开启音频功能 - 尝试使用 VLC 播放器测试 RTSP 流 ### 2. 数据库连接失败 - 检查 MySQL 服务是否启动 - 确认数据库配置是否正确 - 检查数据库是否已创建 ### 3. Redis 连接失败 - 检查 Redis 服务是否启动 - 确认 Redis 配置是否正确 ### 4. 转写不准确 - 尝试调整 `CHUNK_DURATION` 参数 - 检查音频质量是否良好 - 考虑更换其他 FunASR 模型 ### 5. GPU 相关问题 - **检测不到 GPU**:确认已安装 CUDA 和支持 CUDA 的 PyTorch - **显存不足**:降低 `MIN_GPU_MEMORY_MB` 或使用更小的模型 - **负载不均衡**:查看 [GPU_OPTIMIZATION.md](./GPU_OPTIMIZATION.md) 中的故障排查 ### 6. 测试 GPU 功能 ```bash python test_gpu_manager.py ``` ## 许可证 MIT License