Android-распознавание речи

Я пытаюсь заставить приложение распознавать определенные слова, сказанные пользователем, используя приведенный ниже код, но по какой-то причине оно не работает вообще. Пожалуйста, просмотрите это и скажите мне, что с ним не так. Спасибо

Приложение просто предполагает вывод тостового сообщения, если произнесены слова "апельсин" или "яблоко", но при использовании приведенного ниже кода ничего не происходит.

// нажатие кнопки для запуска RecognizerIntent

public void OnClick_Speed_Detector(View v)
{
    Intent i = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    i.putExtra(RecognizerIntent.EXTRA_LANGUAGE, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    i.putExtra(RecognizerIntent.EXTRA_PROMPT, "speak up");
    startActivityForResult(i, 1);

}

protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    if(requestCode == 1 && resultCode == RESULT_OK)
    {
        ArrayList<String> result = 
                data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);

                if(((result).equals("orange")))
                {
                  Toast.makeText(getApplicationContext(), "orange", Toast.LENGTH_LONG).show();

                }   
                else
                    if (((result).equals("apple")))
                { 
                  Toast.makeText(getApplicationContext(), "apple", Toast.LENGTH_LONG).show();   
                }

    }
}

2 ответа

Решение

Ваша проблема заключается в том, что вы тестируете, если ArrayList == String, когда это невозможно (ArrayList типа String содержит несколько строк)

Вместо:

if ((result).equals("orange")) {}

Пытаться:

if ((result).contains("orange")) {}

Этот код просматривает каждый индекс ArrayList и определяет, равен ли какой-либо из его индексов "оранжевому". Если что-то сделать, то он вернется

true

... и он выполнит оператор if! Надеюсь это поможет!

      String word1= "orange";
String encoded1 = Soundex.US_ENGLISH.encode(name1); 
String word2= user's spoken word;
String encoded2 = Soundex.US_ENGLISH.encode(name2); 


encoded1.equals(encoded2)

// OR for loose matching...
encoded1.contains(encoded2) || encoded2.contains(encoded1)

Это соответствует похожим по звучанию словам

для лучшего соответствия вы можете использовать алгоритм Metaphone3. Вам просто нужно взять фрагмент кода из Интернета или написать самому (скорее всего, вы этого не сделаете). Используя Metaphone3, вы получите следующие совпадения 'by' == 'bye' "john's" == 'john' '(./cow' == 'cow' 'y' == 'why'

Другие вопросы по тегам