Как получить голос на Android

Я хочу пробудить некоторые функции в Android APP, сказав "привет, Джек". Насколько я знаю, существует технология под названием "фразовое пятно", чтобы распознать определенную речь, например "привет, Джек". но я не собираюсь реализовывать "фразовое пятно".

У кого-нибудь есть больше идей или предложений?

Благодарю.

2 ответа

Самый простой и ресурсосберегающий способ - реализовать динамическое изменение времени DTW для определения ключевых слов

http://en.wikipedia.org/wiki/Dynamic_time_warping

http://www.purduecal.edu/ece/WSEAS.pdf

Вы можете использовать инструментарий CMUSphinx для извлечения функций MFCC, что позволит сэкономить много времени на их реализацию

http://cmusphinx.sourceforge.net


Сначала я предлагаю этот простой подход.

Начните с использования простого набора в соответствии с ключевыми словами, которые вы хотите, как в следующем классе:

public class WordMatcher
{
 private Set<string> words;
 public static final int NOT_IN = -1;

 public WordMatcher(String... wordsIn)
 {
 this(Arrays.asList(wordsIn));
 }

 public WordMatcher(List<string> wordsIn)
 {
 //care about order so we can execute isInAt
 words = new LinkedHashSet<string>(wordsIn);
 }

 public Set<string> getWords()
 {
 return words;
 }

 public boolean isIn(String word)
 {
 return words.contains(word);
 }

 public boolean isIn(String [] wordsIn)
 {
 boolean wordIn = false;
 for (String word : wordsIn)
 {
 if (isIn(word))
 {
 wordIn = true;
 break;
 }
 }
 return wordIn;
 }
</string></string></string></string>

Обработать результаты распознавания следующим образом:

@Override
protected void
 onActivityResult(int requestCode, int resultCode, Intent data)
{
 WordMatcher matchHello = new WordMatcher("hello");
 WordMatcher matchJack = new WordMatcher("jack");

 if (requestCode == VOICE_RECOGNITION_REQUEST_CODE)
 {
 if (resultCode == RESULT_OK)
 {
 List<string> heard =
 data.
 getStringArrayListExtra
 (RecognizerIntent.EXTRA_RESULTS);

 for (String oneResult : heard)
 {
 if (matchHello.isIn(oneResult.split(" ")) && matchJack.isIn(oneResult.split(" "))
 {
 //SUCCESS!! do something here
 }


 }
 }
 else
 {
 Log.d(TAG, "error code: " + resultCode);
 }
 }
 super.onActivityResult(requestCode, resultCode, data);
}
</string>

Во-вторых, если это не удается ввести "звуки", такие как алгоритмы сопоставления, такие как Soundex.

Кроме того, вам может потребоваться исследовать использование класса SpeechRecognizer непосредственно для запуска распознавания речи в фоновом режиме, вместо использования RecognizerIntent, который создает диалог.

licensed under cc by-sa 3.0 with attribution.