以下项目代码测试用的都是Java。
Whisper-android
试了试demo,不支持流式处理,示例代码的record版本就是先录音到固定文件再转换。会出现单词死机式循环输出,之前用whisper原模型的时候就已经出现这种问题了。
Vosk
允许调整模型,有onPartialResult但没有onRmsChanged,实现不了根据音频实时音量大小做前端反馈。模型效果一般,说话快一些容易导致错误识别结果。而且对应语言模型就完全只能用于该语言,中文模型就一点英文都识别不出来,OK都不行。
Mozilla DeepSpeech
需要完整的音频文件才能开始识别,不能边录边识别。MPL协议。项目已经发公共停止维护了。最新一次release在20年,java版本低,没有上手试效果。
Pocketsphinx
这个模型和Kaldi都是主用于关键词检测的语音模型,主要由字典模型和声学模型构成。只要你没在字典给出的词他就识别不出来,但字典大了启动延迟大,在字典词汇上万之后会容易bug。识别准确率一般,而且特别容易把环境音识别出文本,即使是正常把手机放在一边什么也不干,只要环境音杂一点就会出问题。用来做语音唤醒或者语音功能那些可以,语音转录不合适。
Kaldi
Android用kaldi官方要编译。我直接用了vosk兼容的Kaldi模型,就着vosk的demo框架试了试。模型大小2.5g,手机上每次加载都需要一定等待时间。此外还是那个问题,英文一点都识别不出来,而且出来的结果因为都是一个词一个词识别的,句子容易不连贯出现错词。效果相比Pocketsphinx确实好很多了,没有那么受环境音影响,识别准确率也比Pocketsphinx好一些。
SherpaNcnn
实时识别,效果还不错。java用的话需要先编译,可以直接下载他github上编译好的文件,不过需要自己写一下读取模型文件的代码。
综上,选SherpaNcnn。