# gostt **Repository Path**: minrag/gostt ## Basic Information - **Project Name**: gostt - **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-01-29 - **Last Updated**: 2026-02-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # GoSTT - Go Speech-to-Text Server 基于 Go 和 WebSocket 的实时语音识别服务器,支持 SenseVoice 和 FunASR 模型,提供低延迟、高质量的语音转文本服务。 ## 功能特性 - 🎤 **实时语音识别**:通过 WebSocket 实时接收音频流并返回识别结果 - 🌍 **多语言支持**:SenseVoice 模型支持中文、英文、日文、韩文、粤语 - ⚡ **高性能**:使用 ONNX 模型推理,CPU 高效运行 - 🔌 **易集成**:提供标准 WebSocket API,方便前后端集成 - 🎨 **测试页面**:内置 HTML 测试页面,可视化音频输入和识别结果 - 🛠️ **灵活配置**:支持自定义 WebSocket 地址,方便本地和远程测试 ## 快速开始 ### 1. 环境要求 - Go 1.25.5 或更高版本 - 至少 4GB 可用内存 - 支持 SSE4.2 的 CPU(推荐) ### 2. 下载模型 项目需要以下模型文件,请下载并放置在 `models/` 目录中: #### SenseVoice 模型(多语言) - **模型名称**: `sherpa-onnx-sense-voice-zh-en-ja-ko-yue-int8-2025-09-09` - **文档说明**: https://k2-fsa.github.io/sherpa/onnx/sense-voice/pretrained.html - **下载地址**: https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-sense-voice-zh-en-ja-ko-yue-int8-2025-09-09.tar.bz2 - **文件结构**: ``` models/sherpa-onnx-sense-voice-zh-en-ja-ko-yue-int8-2025-09-09/ ├── model.int8.onnx # 量化模型文件 ├── tokens.txt # 词汇表文件 └── test_wavs/ # 测试音频文件 ``` #### FunASR Nano 模型(中文优化) - **模型名称**: `sherpa-onnx-funasr-nano-int8-2025-12-30` - **文档说明**: https://k2-fsa.github.io/sherpa/onnx/funasr-nano/pretrained.html - **下载地址**: https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-funasr-nano-int8-2025-12-30.tar.bz2 - **文件结构**: ``` models/sherpa-onnx-funasr-nano-int8-2025-12-30/ ├── encoder_adaptor.int8.onnx # 编码器适配器 ├── embedding.int8.onnx # 嵌入模型 ├── llm.int8.onnx # 大语言模型 └── Qwen3-0.6B/ # Qwen 分词器 ``` #### Silero VAD 模型(语音活动检测) - **模型名称**: `silero_vad.onnx` - **文档说明**: https://k2-fsa.github.io/sherpa/onnx/vad/silero-vad.html - **下载地址**: https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/silero_vad.onnx - **放置位置**: `models/silero_vad.onnx` ### 3. 安装依赖 ```bash go mod download ``` ### 4. 启动服务器,建议Linux ```bash go run main.go ``` 服务器将在 `:5566` 端口启动,并监听 WebSocket 连接。 使用docker镜像运行,可能会找不到.so,可以在```docker-compose.yaml```中配置环境变量: ```yaml environment: ### github.com/k2-fsa/sherpa-onnx-go-linux 下载 对应操作系统的 lib,加载到 LD_LIBRARY_PATH - LD_LIBRARY_PATH=/sherpa-onnx-go/lib:/usr/lib:$LD_LIBRARY_PATH ``` windows可能会出现兼容性问题: - 错误 0xc0000135 → 确保 onnxruntime.dll 与 gostt.exe 在同一目录 - 错误 0xc000007b → 确保下载的是 64位 版本(win-x64) - 版本不兼容 → 尝试下载 1.20.0 或更高版本 解决办法: - 检查 VC++ 是否安装:https://aka.ms/vs/17/release/vc_redist.x64.exe - 从 github.com/k2-fsa/sherpa-onnx-go-windows 项目中下载对应版本的 onnxruntime.dll,sherpa-onnx-c-api.dll,sherpa-onnx-cxx-api.dll 复制到项目根目录 - 修改VSCode的运行配置,增加 ``` ,"env": { "PATH": "${workspaceFolder};${env:PATH}" } ``` ### 5. 使用测试页面 1. 在浏览器中打开 `voice_test.html` 2. 在配置区域输入 WebSocket 地址(默认:`ws://localhost:5566/ws`) 3. 点击 "连接 WebSocket" 4. 授予麦克风访问权限 5. 点击 "开始录音",对着麦克风说话 6. 实时查看识别结果 ## API 接口 ### WebSocket 端点 - `ws://localhost:5566/ws` ### 音频格式要求 - **采样率**: 16000 Hz - **声道**: 单声道 (Mono) - **格式**: PCM16 小端序 (16-bit signed integer, little-endian) - **数据流**: 原始 PCM 数据块 ### 数据流 1. **客户端发送**: 原始 PCM16 字节数据 2. **服务器处理**: - VAD 检测语音活动 - SenseVoice 模型识别 - 返回 JSON 格式结果 3. **服务器返回**: ```json { "text": "识别出的文本内容", "status": "final" } ``` ## 项目结构 ``` gostt/ ├── main.go # 主服务器文件 ├── voice_test.html # WebSocket 测试页面 ├── funasr_test.go # FunASR 模型测试 ├── go.mod # Go 模块定义 ├── go.sum # 依赖锁定文件 ├── models/ # 模型文件目录 │ ├── sherpa-onnx-sense-voice-zh-en-ja-ko-yue-int8-2025-09-09/ │ ├── sherpa-onnx-funasr-nano-int8-2025-12-30/ │ └── silero_vad.onnx └── .vscode/ # VS Code 配置 ``` ## 配置参数 ### 服务器配置(main.go) - **采样率**: 16000 Hz - **VAD 阈值**: 0.5 - **最小静音时间**: 0.5 秒 - **最小语音时间**: 0.25 秒 - **窗口大小**: 512 - **线程数**: 4 ### 模型配置 - **SenseVoice 语言**: auto(自动检测) - **模型提供商**: cpu - **调试级别**: 0 ## 开发说明 ### 修改服务器配置 编辑 `main.go` 中的以下参数: ```go // VAD 配置 Threshold: 0.5, MinSilenceDuration: 0.5, MinSpeechDuration: 0.25, // 模型配置 NumThreads: 4, Debug: 0, Provider: "cpu", ``` ### 添加新模型 1. 下载新的模型文件到 `models/` 目录 2. 修改 `main.go` 中的模型路径 3. 更新对应的模型配置 ### 构建可执行文件 ```bash go build -o gostt main.go ``` ## 性能优化建议 1. **CPU 优化**: - 根据 CPU 核心数调整 `NumThreads` 参数 - 启用 CPU 扩展指令集(如 AVX2) 2. **内存优化**: - 使用量化模型(int8) - 调整 VAD 缓存大小(默认 60 秒) 3. **网络优化**: - 使用 WebSocket 压缩 - 调整音频数据块大小 ## 常见问题 ### Q: 模型下载失败怎么办? A: 确保网络连接正常,可以尝试使用代理或从镜像站点下载。 ### Q: 服务器启动失败? A: 检查: 1. 模型文件是否完整 2. 端口 5566 是否被占用 3. Go 版本是否符合要求 ### Q: 识别准确率低? A: 尝试: 1. 使用外置麦克风 2. 调整 VAD 阈值 3. 确保音频格式正确(16000Hz, 单声道) ### Q: 如何测试不同语言? A: SenseVoice 模型支持自动语言检测,也可以修改 `main.go` 中的 `Language` 参数。 ## 注意事项 1. **隐私安全**: 语音数据仅在本地处理,不会上传到云端 2. **资源占用**: 建议在 4 核 CPU、8GB 内存以上环境运行 3. **实时性**: 网络延迟会影响识别实时性 4. **浏览器兼容**: 测试页面需要现代浏览器支持 Web Audio API ## 许可证 本项目基于 MIT 许可证开源。模型文件遵循其各自的许可证。 ## 致谢 - [Sherpa-ONNX](https://github.com/k2-fsa/sherpa-onnx) - 提供优秀的 ONNX 语音识别运行时 - [FunASR](https://github.com/FunASR/FunASR) - 阿里巴巴语音识别框架 - [Silero VAD](https://github.com/snakers4/silero-vad) - 高效的语音活动检测 - [Gorilla WebSocket](https://github.com/gorilla/websocket) - Go WebSocket 实现 ## 联系方式 如有问题或建议,请提交 Issue 或联系项目维护者。 --- **开始使用**: [快速开始](#快速开始) | [测试页面](#5-使用测试页面) | [API文档](#api-接口)