# 标注工具 **Repository Path**: le1o1e/annotation-tool ## Basic Information - **Project Name**: 标注工具 - **Description**: 世界上最牛逼的标注工具 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-05-18 - **Last Updated**: 2026-05-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 音频转写工具 - 架构文档 ## 一、项目概述 基于 Whisper 的本地音频转写工具,支持音频上传、波形可视化、分段管理、转写标注及多格式导出。 ### 功能列表 - 拖拽上传音频(mp3/wav/m4a) - WaveSurfer 波形显示,播放时高亮滚动 - 暂停/继续、倍速调节(0.5x ~ 2x) - 手动点击添加分段标记,支持自动静音检测分段 - 每个分段可独立播放、重命名、删除 - Whisper 转写中文/英文,按时间戳展示结果 - 标注高亮、注释、标签,点击跳转音频位置 - 导出 JSON / SRT / 文本 ---------------!!直接识别出普通话内容 --- ## 二、技术栈 | 层级 | 技术 | |------|------| | 后端框架 | Flask + Flask-SocketIO | | 异步处理 | eventlet + threading | | 语音识别 | openai-whisper | | 前端 | 原生 JavaScript + css | | 波形可视化 | WaveSurfer.js 6.4.0 | | 实时通信 | Socket.IO 4.7.2 | --- ## 三、项目结构 ``` audio_transcriber/ ├── app.py # Flask 应用主入口 ├── templates/ │ └── index.html # 前端页面主模板 ├── static/ │ ├── css/ │ │ └── style.css # 样式文件 │ └── js/ │ └── app.js # 前端逻辑 ├── uploads/ # 音频文件存储目录 └── requirements.txt # Python 依赖 ``` --- ## 四、核心模块架构 ### 4.1 后端架构 (app.py) ``` app.py ├── 配置层 │ ├── Flask app (template/static 路径, 上传限制 600MB) │ ├── SocketIO (CORS, async_mode=eventlet) │ └── Whisper 模型 (环境变量 WHISPER_MODEL, 默认 small) │ ├── 路由层 │ ├── GET / → 渲染 index.html │ └── POST /transcribe → 接收音频,启动转写任务 │ ├── WebSocket 事件层 │ ├── connect → 连接确认 │ ├── cancel_transcription → 取消转写 │ ├── transcription_progress → 进度推送 │ └── transcription_done → 结果推送 │ └── 业务逻辑层 ├── do_transcription() → 后台线程执行 Whisper ├── build_whisper_command() → 构建 whisper 命令 └── parse_progress_line() → 解析进度输出 ``` ### 4.2 前端架构 (app.js) ``` app.js ├── 状态管理 │ ├── segments[] → 分段列表 │ ├── currentSegment → 当前分段 │ └── transcriptionData → 转写结果 │ ├── 核心功能模块 │ ├── 音频上传 → 拖拽/选择文件 │ ├── 波形渲染 → WaveSurfer + Regions 插件 │ ├── 播放控制 → 播放/暂停/倍速 │ ├── 分段管理 → 添加/删除/静音检测 │ ├── 转写模块 → API调用 + SocketIO 进度 │ └── 导出模块 → JSON/SRT/文本 │ └── SocketIO 客户端 ├── 接收进度更新 └── 接收转写结果 ``` --- ## 五、数据流 ``` 用户上传音频 ↓ Flask 接收 → 保存 uploads/ ↓ 启动后台线程 → 执行 whisper CLI ↓ 实时推送进度 (SocketIO) ↓ 转写完成 → 返回 segments (时间戳 + 文本) ↓ 前端渲染波形 + 转写结果 ↓ 用户编辑标注/分段 → 导出 ``` --- ## 六、关键设计 | 设计点 | 说明 | |--------|------| | 异步取消 | `threading.Event()` 实现转写任务取消 | | 实时通信 | Flask-SocketIO 推送进度,避免轮询 | | 进程调用 | Whisper 以子进程运行,解析 stdout 获取进度 | | 分段管理 | WaveSurfer Regions 插件实现音频可视分段 | --- ## 七、运行说明 ```bash # 1. 安装依赖 pip install -r requirements.txt # 2. 启动服务 python app.py # 3. 访问 http://localhost:5000 ``` ### 环境变量 - `WHISPER_MODEL`: Whisper 模型大小(base/small/medium/large),默认 small