Распознавание голоса на андроид с записанным звуковым клипом? - PullRequest
31 голосов
/ 23 февраля 2010

Я использовал функцию распознавания голоса на Android, и мне это нравится.Это одна из самых похвальных функций моих клиентов.Тем не менее, формат является несколько ограничительным.Вы должны вызвать намерение распознавателя, отправить его для транскрипции в Google и дождаться возврата текста.

Для некоторых из моих идей потребуется записать звук в моем приложении и затем отправить клип в Googleдля транскрипции.

Можно ли как-нибудь отправить аудиоклип для обработки с речью в текст?

Ответы [ 3 ]

10 голосов
/ 18 апреля 2014

У меня есть решение, которое хорошо работает для распознавания речи и записи звука. Вот ссылка на простой проект Android, который я создал, чтобы показать, как работает решение. Кроме того, я добавил несколько экранов печати в проект, чтобы проиллюстрировать приложение.

Я попытаюсь кратко объяснить подход, который я использовал. В этом проекте я объединил две функции: Google Speech API и запись Flac.

Google Speech API вызывается через HTTP-соединения. Майк Пульц дает более подробную информацию об API:

"(...) новый API [Google] представляет собой API-интерфейс с полнодуплексной потоковой передачей. Это означает, что он фактически использует два HTTP-соединения - один запрос POST для загрузки контента в виде« живого »фрагментированного потока и второй запрос GET для доступа к результатам, который имеет гораздо больше смысла для более длинных аудиосэмплов или для потокового аудио. "

Однако этот API должен получать звуковой файл FLAC для правильной работы. Это заставляет нас перейти ко второй части: запись Flac

Я реализовал запись Flac в этом проекте путем извлечения и адаптации некоторых фрагментов кода и библиотек из приложения с открытым исходным кодом под названием AudioBoo. AudioBoo использует собственный код для записи и воспроизведения формата flac.

Таким образом, можно записать звук flac, отправить его в Google Speech API, получить текст и воспроизвести только что записанный звук.

Проект, который я создал, имеет базовые принципы для его работы и может быть улучшен для конкретных ситуаций. Чтобы заставить его работать в другом сценарии, необходимо получить ключ Google Speech API, который получается, будучи частью группы Google Chromium-dev. Я оставил один ключ в этом проекте, чтобы показать, что он работает, но в конце концов я его удалю. Если кому-то нужна дополнительная информация, дайте мне знать, потому что я не могу разместить более 2 ссылок в этом сообщении.

3 голосов
/ 23 февраля 2010

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

Если это то, что вы хотели бы увидеть, подайте запрос функции на http://b.android.com. Это также косвенно связано с существующей проблемой 4541 .

2 голосов
/ 20 февраля 2013

Насколько я знаю, до сих пор нет способа напрямую отправить аудиоклип в Google для транскрипции. Однако Froyo (уровень API 8) представил класс SpeechRecognizer , который обеспечивает прямой доступ к службе распознавания речи. Так, например, вы можете начать воспроизведение аудиоклипа, и ваша активность запустит распознаватель речи, слушающий в фоновом режиме, который после завершения вернет результаты пользовательскому методу обратного вызова слушателя.

Следующий пример кода должен быть определен в Activity, поскольку методы SpeechRecognizer должны выполняться в главном потоке приложения. Также вам нужно будет добавить разрешение RECORD_AUDIO к вашему AndroidManifest.xml.



    boolean available = SpeechRecognizer.isRecognitionAvailable(this);
    if (available) {
        SpeechRecognizer sr = SpeechRecognizer.createSpeechRecognizer(this);
        sr.setRecognitionListener(new RecognitionListener() {
            @Override
            public void onResults(Bundle results) {
                // process results here
            }
            // define your other overloaded listener methods here
        });
        Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
        // the following appears to be a requirement, but can be a "dummy" value
        intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, "com.dummy");
        // define any other intent extras you want

        // start playback of audio clip here

        // this will start the speech recognizer service in the background
        // without starting a separate activity
        sr.startListening(intent);
    }

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

...