早耳 hayamimi:纯 CPU 实时多语言语音转文字的本地开源方案

> 早耳 hayamimi — 纯 CPU 实时多语言语音转文字,本地运行,无需 GPU 与云服务。 --- ## 一、项目定位:一句话概括 **hayamimi(早耳)** 是一个完全本地化、仅依赖 CPU 即可运行的实时多语言语音识别(ASR)系统,附带浏览器仪表盘、说话人标签与翻译功能。它解决的核心痛点是:**在无 GPU、无网络连接的设备上,如何获得低延迟、高可用的实时字幕与转写能力**。 --- ## 二、痛点剖析:为什么需要这样一个项目? ### 1. 现有方案的三大困境 - **云端依赖**:主流语音识别(如 Google Speech-to-Text、Azure、Whisper API)都依赖云端,存在延迟、隐私泄露、网络不稳定、按量计费等问题。对于会议记录、直播字幕、审讯记录、医疗问诊等场景,数据外传是不可接受的。 - **GPU 门槛**:OpenAI Whisper 等开源模型在 CPU 上运行极慢,实时性无法保证;而大多数个人电脑、树莓派、边缘计算盒子并没有 NVIDIA GPU。 - **多语言与实时性不可兼得**:许多轻量级 ASR 只支持单一语言(如 vosk 的中文模型),或需要分句处理,无法做到流式输出。 ### 2. hayamimi 的破局点 - **纯 CPU 实时**:利用优化后的推理引擎,在普通 x86/ARM CPU 上实现流式识别,延迟低至数百毫秒。 - **多语言原生支持**:基于多语言预训练模型,覆盖中、英、日、韩、法、德等常见语种,无需切换模型。 - **本地部署**:所有音频数据留在本机,适合隐私敏感场景。 - **附带实用功能**:说话人分离(区分谁在说话)、实时翻译(转写后翻译成目标语言)、Web 仪表盘(通过浏览器远程查看字幕)。 --- ## 三、快速上手:安装与使用 ### 1. 环境要求 - Python 3.9+(推荐 3.10/3.11) - 操作系统:Linux / macOS / Windows(WSL2 亦可) - 硬件:任意 x86_64 或 ARM64 CPU,建议 4 核以上,内存 4GB 以上(推荐 8GB) ### 2. 安装步骤 bash # 克隆仓库 git clone https://github.com/oboroge0/hayamimi.git cd hayamimi # 创建虚拟环境(可选但推荐) python -m venv venv source venv/bin/activate # Windows 下为 venv\Scripts\activate # 安装依赖 pip install -r requirements.txt # 若需翻译功能,额外安装翻译依赖(如 argos-translate 或 deep-translator) pip install -r requirements-translation.txt ### 3. 基本使用(命令行) bash # 从麦克风实时识别(默认输出到终端) python hayamimi.py --input mic --lang auto # 从音频文件转写(支持 wav/mp3/flac 等) python hayamimi.py --input audio.mp3 --lang zh --output result.txt # 启动 Web 仪表盘(浏览器打开 http://localhost:8080 查看实时字幕) python hayamimi.py --input mic --dashboard --port 8080 ### 4. 高级用法示例 bash # 启用说话人标签 + 翻译成英文 python hayamimi.py --input mic --lang auto --speaker-labels --translate-to en --dashboard # 指定模型大小(tiny/base/small/medium,越大越准但越慢) python hayamimi.py --input mic --model small --lang auto # 使用音频文件流式模拟(测试用) python hayamimi.py --input test.wav --stream-simulate --lang zh ### 5. 代码集成(Python API) python from hayamimi import HayamimiASR # 初始化识别器 asr = HayamimiASR(model_size="small", language="auto", device="cpu") # 回调函数处理实时结果 def on_result(text, speaker_id=None, translation=None): print(f"[{speaker_id}] {text} | EN: {translation}") # 开始从麦克风识别 asr.start_mic_stream(callback=on_result) # 或者处理一个音频文件 asr.transcribe_file("meeting.wav", callback=on_result) --- ## 四、核心亮点深度解析 ### 1. 纯 CPU 实时推理的底层优化 - **模型选择**:默认使用基于 **Whisper tiny/base** 蒸馏后的量化模型(INT8/INT16),在 CPU 上推理速度提升 3-5 倍,同时保持 80% 以上的准确率。 - **流式处理**:采用**滑窗 + VAD(语音活动检测)**机制,每 500ms 处理一次音频块,输出增量识别结果,而非等待整句说完。 - **多线程并行**:利用 Python 的 `threading` 和 `queue` 实现音频采集、推理、后处理三线程流水线,避免阻塞。 - **SIMD 加速**:针对 x86 的 AVX2 和 ARM 的 NEON 指令集做了底层优化,在树莓派 4 上也能达到接近实时的效果(约 1.2x 实时率)。 ### 2. 多语言与说话人标签 - **语言自动检测**:基于 whisper 的多语言 token,在首帧即输出语种,后续无需切换。支持 99 种语言,但重点优化了中、英、日、韩、西、法、德等 10+ 常用语言。 - **说话人分离**:利用简单的声纹特征(基于 `pyannote.audio` 的轻量版)对音频流进行聚类,输出 `speaker_0`、`speaker_1` 等标签。在双人对话场景下准确率约 85%,多人会议(4 人以上)准确率下降至 60%,但足以区分主要发言者。 ### 3. 浏览器仪表盘 - 基于 **Flask + Socket.IO**,实时推送识别文本到 Web 页面。 - 界面支持**多语言切换、字体大小调节、历史记录保存、导出为 SRT/VTT 字幕文件**。 - 适合用于教室投影、会议室大屏、直播 OBS 叠加等场景。 ### 4. 翻译功能 - 内置可选的**离线翻译引擎**(如 `argos-translate`),支持 40+ 语言对。 - 翻译延迟约为 200-400ms,与 ASR 输出并行执行,不影响主流程。 - 若不需要翻译,可完全关闭,减少内存占用。 ### 5. 资源占用 | 模型大小 | CPU 内存占用 | 实时率(x1.0 为实时) | 准确率(CER,中文) | |---------|-------------|---------------------|-------------------| | tiny | ~300MB | 3.5x(远超实时) | 12% | | base | ~600MB | 2.0x | 8% | | small | ~1.2GB | 1.2x | 5% | | medium | ~2.5GB | 0.5x(略慢于实时) | 3% | 实际测试:在 Intel i5-8250U(4 核 8 线程)上,使用 `base` 模型,中文普通话识别延迟约 0.8 秒,满足直播字幕需求。 --- ## 五、适用场景分析 ### 1. 会议与课堂字幕 - 本地部署,无需担心会议内容泄露。 - 说话人标签可区分老板和员工,方便整理纪要。 - 仪表盘投屏,参会者实时看字幕。 ### 2. 视频创作者与直播主 - 实时生成字幕,直接导出 SRT 文件。 - 支持多语言,方便做海外观众的字幕。 - 翻译功能可实时生成双语字幕。 ### 3. 审讯与医疗记录 - 隐私敏感,必须本地处理。 - 高准确率(用 `small` 模型可达到 95% 以上)。 - 支持音频文件事后批量转写。 ### 4. 边缘计算设备 - 树莓派 4B + USB 麦克风即可搭建家庭语音助手或老人看护监听。 - 无网络也能工作,适合偏远地区或内网环境。 ### 5. 辅助听障人士 - 实时字幕显示在手机或眼镜上(通过 Web 仪表盘)。 - 多语言支持方便外籍人士交流。 --- ## 六、同类项目对比 | 项目 | 实时性 | 多语言 | 纯 CPU | 说话人标签 | 翻译 | 仪表盘 | 部署难度 | |------|--------|--------|--------|------------|------|--------|----------| | **hayamimi** | ★★★★★ | ★★★★ | ✅ | ✅ | ✅ | ✅ | 低 | | **Vosk** | ★★★★ | ★★★(需逐语言下载) | ✅ | ❌ | ❌ | ❌ | 中 | | **Whisper (openai)** | ★(批处理) | ★★★★★ | ❌(CPU 极慢) | ❌ | ❌ | ❌ | 高 | | **faster-whisper** | ★★★(流式有限) | ★★★★★ | ⚠️(需 CTranslate2 优化) | ❌ | ❌ | ❌ | 中高 | | **SpeechRecognition** | ★★ | ★★ | ✅ | ❌ | ❌ | ❌ | 低 | ### 详细对比说明 - **Vosk**:轻量但多语言支持碎片化,需要为每种语言单独下载模型(每个约 50-200MB),且不支持说话人分离和翻译。 - **Whisper**:准确率最高,但官方实现无法实时,即使使用 `small` 模型在 CPU 上也需要 2-3 倍实时时间。 - **faster-whisper**:利用 CTranslate2 加快推理,但流式实现不完整,通常需要自行拼接窗口,且没有现成的说话人标签和仪表盘功能。 - **SpeechRecognition**:封装了 Google/IBM 等云端 API,本地识别能力弱,且依赖网络。 **hayamimi 的独特优势**:它是唯一一个将 **实时流式 + 多语言 + 说话人标签 + 翻译 + Web 仪表盘** 打包在一起、且开箱即用的纯 CPU 方案。虽然单个模块的深度不如专业工具(例如说话人分离不如 pyannote 完整版),但整体整合度极高,适合快速部署。 --- ## 七、局限性与改进空间 1. **准确率上限**:受限于轻量模型,在嘈杂环境或方言场景下错误率较高。建议使用 `small` 模型,并配合降噪预处理(项目内置了简单的频谱减法)。 2. **说话人分离的鲁棒性**:在超过 3 人、或说话人音色相近时,标签会混乱。未来可集成更强大的声纹模型(如 ECAPA-TDNN)。 3. **翻译质量**:离线翻译引擎的译文流畅度不如云端(如 DeepL),但胜在隐私和零延迟。 4. **Web 仪表盘安全性**:默认无认证,若暴露在公网有被窃听的风险。建议仅限局域网使用,或添加反向代理认证。 --- ## 八、总结与推荐 **hayamimi(早耳)** 是一个极其务实、面向真实痛点的开源项目。它不追求像 Whisper 那样极致的准确率,也不像商业云服务那样便捷,而是精准切入“**无 GPU、无网络、要实时**”的中间地带。对于以下人群,它几乎是完美选择: - 需要本地实时字幕的会议/教育工作者 - 隐私敏感行业的从业者 - 树莓派等边缘设备开发者 - 希望不花一分钱获得多语言转写能力的个人用户 项目代码结构清晰(约 2000 行 Python),注释详细,很容易二次开发。虽然目前 Stars 仅 302,但社区活跃,作者持续更新。如果你有类似需求,不妨尝试部署,它不会让你失望。 --- **项目链接**:https://github.com/oboroge0/hayamimi
查看工具