Голос в текст на Android в автономном режиме - PullRequest
2 голосов
/ 19 января 2011

В любом случае можно ли использовать функцию «Голос в текст» Android в автономном режиме.

В данном примере VoiceRecognition.java он запускается и выполняет действия с намерением RecognizerIntent.ACTION_RECOGNIZE_SPEECH.

Означает ли это, что любой другой apk должен быть установлен перед этим, чтобы это работало, или мне нужно написать собственное приложение для запуска по этому намерению.

Я долго искал этовремя, но я запутался ...

Вот код, который я использовал ..

private static final int VOICE_RECOGNITION_REQUEST_CODE = 1234;

private ListView mList;

/**
 * Called with the activity is first created.
 */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Inflate our UI from its XML layout description.
    setContentView(R.layout.voice_recognition);

    // Get display items for later interaction
    Button speakButton = (Button) findViewById(R.id.btn_speak);

    mList = (ListView) findViewById(R.id.list);

    // Check to see if a recognition activity is present
    PackageManager pm = getPackageManager();
    List<ResolveInfo> activities = pm.queryIntentActivities(
            new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
    if (activities.size() != 0) {
        speakButton.setOnClickListener(this);
    } else {
        speakButton.setEnabled(false);
        speakButton.setText("Recognizer not present");
    }
}

/**
 * Handle the click on the start recognition button.
 */
public void onClick(View v) {
    if (v.getId() == R.id.btn_speak) {
        startVoiceRecognitionActivity();
    }
}

/**
 * Fire an intent to start the speech recognition activity.
 */
private void startVoiceRecognitionActivity() {
    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
            RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speech recognition demo");
    startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);
}

/**
 * Handle the results from the recognition activity.
 */
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK) {
        // Fill the list view with the strings the recognizer thought it could have heard
        ArrayList<String> matches = data.getStringArrayListExtra(
                RecognizerIntent.EXTRA_RESULTS);
        mList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,
                matches));
    }

    super.onActivityResult(requestCode, resultCode, data);
}

При запуске этого кода это дает Recognizer нет, что означает, что такая активность отсутствует.Как это решить?

1 Ответ

6 голосов
/ 19 января 2011

Я думаю, у тебя две проблемы. Во-первых, да, функция распознавания доступна не на всех устройствах. Убедитесь, что вы установили и обновили последнюю версию Google Voice Search для Android. Я считаю, что это устанавливает последний распознаватель. См. http://www.google.com/mobile/voice-actions/ это может быть полезно.

Как сказал Данте Цзян в Преобразование речи в текст , согласно этой статье , Google Voice Search - это то, что вам действительно нужно.

Android SDK позволяет легко интегрировать речевой ввод непосредственно в ваше собственное приложение - просто скопируйте и вставить из этого примера приложения в начать. Android открыт платформа, так что ваше приложение может потенциально использовать любую речь служба распознавания на устройстве это зарегистрировано, чтобы получить RecognizerIntent. Google's Voice Поиск приложения, которое предустановлен на многих устройствах Android, отвечает на RecognizerIntent отображая диалог «Говори сейчас» и потоковое аудио в Google серверы - те же серверы, которые используются при пользователь нажимает кнопку микрофона на поиск виджета или голосовой клавиатура. (Вы можете проверить, если голос Поиск установлен в настройках ➝ Приложения ➝ Управление приложениями.)

В коде вы должны проверить, присутствует ли распознавание. У меня есть следующий фрагмент, который я использовал:

// Check to see if a recognition activity is present
PackageManager pm = getPackageManager();
List<ResolveInfo> activities = pm.queryIntentActivities(
        new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
if (activities.size() != 0) 
{
    speakButton.setOnClickListener(this);
} 
else 
{
    speakButton.setEnabled(false);
    speakButton.setText(R.string.recognizer_not_present);
}

Вторая проблема заключается в том, что для распознавания голоса Android требуется подключение к Интернету. Распознавание не выполняется на устройстве, а использует веб-сервисы Google. Итак, вы должны быть онлайн. Некоторая информация о веб-сервисах доступна на http://waxy.org/2008/11/deconstructing_google_mobiles_voice_search_on_the_iphone/.

...