我想开发一个简单的基于android的应用程序,操作如下:
倾听外界的声音,一旦“时间”字被识别,智能手机就应该发出当前时间的声音。
为了实现这一目标,我寻找了基于java的语音识别库,它可以与安卓平台兼容,并找到了Sphinix 4平台。
然而,我试着在我的电脑上用上面的库进行实验,但是结果很差。(0%成功)
我的代码:
public class Main {
public static void main(String[] args) throws Exception {
Configuration configuration = new Configuration();
configuration
.setAcousticModelPath("resource:/edu/cmu/sphinx/models/en-us/en-us");
configuration
.setDictionaryPath("resource:/edu/cmu/sphinx/models/en-us/cmudict-en-us.dict");
configuration
.setLanguageModelPath("resource:/edu/cmu/sphinx/models/en-us/en-us.lm.bin");
Microphone micro = new Microphone(44100, 16, true, false);
micro.startRecording();
StreamSpeechRecognizer recognizer = new StreamSpeechRecognizer(
configuration);
// Simple recognition with generic model
recognizer.startRecognition(micro.getStream());
SpeechResult result;
while ((result = recognizer.getResult()) != null) {
System.out.format("Hypothesis: %s\n", result.getHypothesis());
}
recognizer.stopRecognition();
micro.stopRecording();
}}
我很乐意提出建议。
编辑:
根据下面的建议,我把比特率改为16 the,并得到了稍微好一些的结果。
但是,在将StreamSpeechRecognizer更改为LiveSpeechRecognizer之后,我得到了不受支持的异常:
javax.sound.sampled.LineUnavailableException: line with format PCM_SIGNED 16000.0 Hz, 16 bit, mono, 2 bytes/frame, little-endian not supported.编辑2:
我只想检测到一个词(短语):‘时间’。也许我用语音识别的方法是错误的?
再次感谢。
发布于 2015-09-06 09:27:01
发布于 2015-08-30 19:33:11
教程中提供了识别麦克风音频的代码示例。正确的代码使用LiveSpeechRecognizer。您的代码将无法工作,因为您在麦克风中使用了44.1khz的采样率,此速率不受识别器的支持。
而且,sphinx4太缺乏资源,无法在Android上运行,因此不可能在那里使用它。CMUSphinx项目在专门为移动应用程序设计的安卓库上提供了Pocketsphinx。这个库在另一个教程中描述。
https://stackoverflow.com/questions/32289538
复制相似问题