Я пытаюсь использовать CMU Sphinx для распознавания речи в java, но результат, который я получаю, неверен, и я не знаю почему.распознавание речи с cmu sphinx - не работает должным образом
У меня есть .wav-файл, который я записал своим голосом, произнеся предложение на английском языке.
Вот мой код в Java:
Configuration configuration = new Configuration();
// Set path to acoustic model.
configuration.setAcousticModelPath("resource:/edu/cmu/sphinx/models/en-us/en-us");
// Set path to dictionary.
configuration.setDictionaryPath("resource:/edu/cmu/sphinx/models/en-us/cmudict-en-us.dict");
// Set language model.
configuration.setLanguageModelPath("resource:/edu/cmu/sphinx/models/en-us/en-us.lm.dmp");
StreamSpeechRecognizer recognizer = new StreamSpeechRecognizer(configuration);
recognizer.startRecognition(new FileInputStream("assets/voice/some_wav_file.wav"));
SpeechResult result = null;
while ((result = recognizer.getResult()) != null) {
System.out.println("~~ RESULTS: " + result.getHypothesis());
}
recognizer.stopRecognition();
}
catch(Exception e){
System.out.println("ERROR: " + e.getMessage());
}
У меня также есть другой код в Android, который не работает, а также:
Assets assets = new Assets(context);
File assetDir = assets.syncAssets();
String prefix = assetDir.getPath();
Config c = Decoder.defaultConfig();
c.setString("-hmm", prefix + "/en-us-ptm");
c.setString("-lm", prefix + "/en-us.lm");
c.setString("-dict", prefix + "/cmudict-en-us.dict");
Decoder d = new Decoder(c);
InputStream stream = context.getResources().openRawResource(R.raw.some_wav_file);
d.startUtt();
byte[] b = new byte[4096];
try {
int nbytes;
while ((nbytes = stream.read(b)) >= 0) {
ByteBuffer bb = ByteBuffer.wrap(b, 0, nbytes);
short[] s = new short[nbytes/2];
bb.asShortBuffer().get(s);
d.processRaw(s, nbytes/2, false, false);
}
} catch (IOException e) {
Log.d("ERROR: ", "Error when reading file" + e.getMessage());
}
d.endUtt();
Log.d("TOTAL RESULT: ", d.hyp().getHypstr());
for (Segment seg : d.seg()) {
Log.d("RESULT: ", seg.getWord());
}
Я использовал this сайт, чтобы преобразовать файл WAV в 16bit, 16khz, mono и little-endian (пробовал все варианты).
Любые идеи, почему это не работает. Я использую встроенные словари и акустические модели, и мой акцент на английском языке не идеален (не знаю, имеет ли это значение).
EDIT:
This is my file. Я записал себя, сказав: «Мой ребенок милый« и это то, что я ожидаю быть выходом. В чистом Java коде, который я получаю: «Я молодежь Эйми» и в андроиде коды getl: «это»
Here is file containing the logs.
Вам нужно объяснить, что не работает точно. Является ли результат не таким, как ожидалось, или у вас есть крушение или что-то еще. Поделитесь файлом, который вы пытаетесь распознать, обмениваетесь ожидаемым результатом, делитесь полученным результатом и обмениваетесь журналом приложений. –