使用语音识别我想创建一个用户说出该字母的拼写游戏。例如,用户说“S”“T”“A”“C”“K”。
我正在使用PocketSphinx来实现这一目标。这是我的代码:
File modelsDir = new File(assetsDir, "models");
recognizer = defaultSetup()
.setAcousticModel(new File(modelsDir, "hmm/en-us-semi"))
.setDictionary(new File(modelsDir, "dict/cmu07a.dic"))
.setRawLogDir(assetsDir).setKeywordThreshold(1e-20f)
.getRecognizer();
recognizer.addListener(this);
// Create keyword-activation search.
recognizer.addKeyphraseSearch(KWS_SEARCH, KEYPHRASE);
// Create grammar-based searches.
File menuGrammar = new File(modelsDir, "grammar/menu.gram");
recognizer.addGrammarSearch(MENU_SEARCH, menuGrammar);
File digitsGrammar = new File(modelsDir, "grammar/digits.gram");
recognizer.addGrammarSearch(DIGITS_SEARCH, digitsGrammar);
// Create language model search.
File languageModel = new File(modelsDir, "lm/weather.dmp");
recognizer.addNgramSearch(FORECAST_SEARCH, languageModel);
如何识别用户说的字母?
或者我可以使用任何库来完成此任务吗?
答案 0 :(得分:2)
由于您使用的是JAVA,因此您需要在项目中导入一个名为SCANNER的库。
import java.util.Scanner;
public static void main(String[]arguments){
char x, y, z;
Scanner input = new Scanner (System.in);
System.out.print("Enter a letter");
x = input.nextChar();
y = input.nextChar();
z = input.nextChar();
}
您还应该根据用户应写的字母数使用循环。
答案 1 :(得分:2)
您目前正在将两个语法加载到识别器中。我相信digits.gram包含数字。
File menuGrammar = new File(modelsDir, "grammar/menu.gram");
recognizer.addGrammarSearch(MENU_SEARCH, menuGrammar);
File digitsGrammar = new File(modelsDir, "grammar/digits.gram");
所以我认为你可以做的是制作一个文件letter.gram并将其加载到你的程序中
#JSGF V1.0;
grammar speech;
public <speech> = A |
B |
C;
代码:
File letterGrammar = new File(PUT CORRECT PATH WITH FILE NAME);
recognizer.addGrammarSearch("speech", letterGrammar);