Подтвердить что ты не робот

Распознавание голоса на андроиде с записанным звуковым клипом?

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

Некоторые из моих идей потребуют записи звука в моем приложении, а затем отправки клипа в google для транскрипции.

Есть ли способ отправить аудиоклип, который будет обрабатываться с речью на текст?

4b9b3361

Ответ 1

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

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

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

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

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

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

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

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

Ответ 2

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

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

Ответ 3

Насколько я знаю, до сих пор нет возможности напрямую отправлять аудиоклип в 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, но это выходит за рамки этого ответа:)