自建 Whisper API 作为安卓语音输入键盘
自建、开源、无需切换即可支持多国语言的安卓语音输入
阅读时间 1 分钟
Whisper 是 OpenAI 开发的预训练语音转文本模型。使用的训练数据量非常大,特点是支持多种语言并且鲁棒性强,可以识别演讲、歌曲。能够进行人声检测、语言识别、语音转录、甚至是语音翻译。
使用 Whisper 的方式有几种。OpenAI 开源了模型的权重,因此可以把模型下载到本地运行。同时 OpenAI 也提供了在线 API 服务。最大的模型 large-v2
需要 4G 显存即可推理,正好我这有块吃灰显卡能跑。
后端决定了自建,那么输入法前端呢?我在 Github 上仔细找了大半天,都没找到能通过调用 OpenAI Whisper 进行语音输入的安卓键盘。以下是我找到的其他相关项目
OpenAI Whisper Keyboard - Google Play 使用运行在手机本地的
small
模型,只支持英文,并且严格来说这不是输入法程序,而是记事本程序Kõnele 使用 kaldi 后端进行语音识别的安卓输入法
Konele 支持自定义语音识别 URL, 虽然使用的不是 OpenAI API,但可以偷梁换柱自己用 FastAPI 写个接口转换 API 格式。
这个想法激发了我创建 Whisper-FastAPI 项目。Whisper-FastAPI 是一个简单的 FastAPI 接口,设计用于为 Kõnele 提供与 OpenAI Whisper 相匹配的服务。它主要包括:
- 翻译与转录:利用 Kõnele 服务,可以通过 websockets 或 POST 请求获取相应的翻译和转录。
- 语言支持:自动识别语言。如果目标语言是英语,无论源语言是什么,都可以翻译为英语。
- Websocket 和 POST 支持:项目内置了 websocket (/konele/ws) 和 POST 方法 /konele/post 供用户选择。
- 简体中文处理:为 Kõnele 用户提供更好的体验,传统的中文可以自动利用 opencc 库转化为简体中文。
其中的 OpenCC
库是用来繁体转简体中文。这是因为 Whisper 在训练时并没有区分简繁体,因此输出有可能是简体或繁体。
后端服务启动后,在 konele 中设置语音识别服务为 Kõnele (grammar support)
,将该服务的 Server URL 设置为 http://<your-server>/konele/post
即可
若要在语音识别的同时进行翻译(到英文),将目标语言设置为英语。即可实现 任意语言到英语 的即时语音翻译!
温馨提示: Konele 有个 bug,更改 Server URL 后需要到 App 详情页面强制停止 App 后,设置才能生效