Я изучаю, как использовать Sphinx4, используя плагин Maven для Eclipse.Почему у меня плохое признание Sphinx4?
Я взял демонстрационную запись на GitHub и изменил ее, чтобы обработать собственный файл. Аудиофайл 16 бит, моно, 16 кГц. Это примерно 13 секунд. Я заметил, что это звучит так, будто он замедлен.
Слова, произнесенные в файле, «также удостоверяются, что вам легко получить доступ к файлам записи, чтобы вы могли загружать их, если их спросили».
Я пытаюсь расшифровать файл, и мои результаты ужасают. Мои попытки найти сообщения на форуме или ссылки, которые подробно объясняют, как улучшить результаты, или то, что я делаю неправильно, не привели меня туда.
Я ищу, чтобы укрепить точность транскрипции, но хотелось бы избежать необходимости самостоятельно обучать модель из-за отклонения в типе данных, с которыми должен справиться мой текущий проект. Разве это невозможно, и это код, который я использую?
КОД
(Примечание: Звуковой файл доступен на https://instaud.io/8qv)
public class App {
public static void main(String[] args) throws Exception {
System.out.println("Loading models...");
Configuration configuration = new Configuration();
// Load model from the jar
configuration
.setAcousticModelPath("resource:/edu/cmu/sphinx/models/en-us/en-us");
// You can also load model from folder
// configuration.setAcousticModelPath("file: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.dmp");
StreamSpeechRecognizer recognizer = new StreamSpeechRecognizer(
configuration);
FileInputStream stream = new FileInputStream(new File("/home/tmscanlan/workspace/example/vocaroo_test_revised.wav"));
// stream.skip(44); I commented this out due to the short length of my file
// Simple recognition with generic model
recognizer.startRecognition(stream);
SpeechResult result;
while ((result = recognizer.getResult()) != null) {
// I added the following print statements to get more information
System.out.println("\ngetWords() before loop: " + result.getWords());
System.out.format("Hypothesis: %s\n", result.getHypothesis());
System.out.print("\nThe getResult(): " + result.getResult()
+ "\nThe getLattice(): " + result.getLattice());
System.out.println("List of recognized words and their times:");
for (WordResult r : result.getWords()) {
System.out.println(r);
}
System.out.println("Best 3 hypothesis:");
for (String s : result.getNbest(3))
System.out.println(s);
}
recognizer.stopRecognition();
// Live adaptation to speaker with speaker profiles
stream = new FileInputStream(new File("/home/tmscanlan/workspace/example/warren_test_smaller.wav"));
// stream.skip(44); I commented this out due to the short length of my file
// Stats class is used to collect speaker-specific data
Stats stats = recognizer.createStats(1);
recognizer.startRecognition(stream);
while ((result = recognizer.getResult()) != null) {
stats.collect(result);
}
recognizer.stopRecognition();
// Transform represents the speech profile
Transform transform = stats.createTransform();
recognizer.setTransform(transform);
// Decode again with updated transform
stream = new FileInputStream(new File("/home/tmscanlan/workspace/example/warren_test_smaller.wav"));
// stream.skip(44); I commented this out due to the short length of my file
recognizer.startRecognition(stream);
while ((result = recognizer.getResult()) != null) {
System.out.format("Hypothesis: %s\n", result.getHypothesis());
}
recognizer.stopRecognition();
System.out.println("...Printing is done..");
}
}
Вот результат (фотоальбом я взял): http://imgur.com/a/Ou9oH
Вы можете поделиться аудио-файлом, чтобы получить справку, картинки бесполезны –
https://instaud.io/8qn, если эта ссылка не работает или есть лучший способ поделиться аудио, пожалуйста, дайте мне знать. – tmsBoston
Ну, так как вы можете услышать, что файл записан неправильно. Сначала вы можете записать его правильно. –