- Android Speech to Text Tutorial
- Как добавить Text-to-Speech в свое приложение
- Android: Speech To Text using API
- Demo App
- Step 1: Create Basic Android Project in Eclipse
- Step 2: Change the Layout
- Step 3: Android Java Code to trigger Speech to Text API
- Screen shots of Android App
- Обработка речи в Android
- Обзор системы обработки речи
- Requirements (Требования)
- Разница между пониманием и преобразованием
- Настройка
- Создание намерения
- Преобразование речи
- Преобразование текста в речь
- Шаг 1. Создание экземпляра TextToSpeech
- Шаг 2. Поиск доступных языков
- Шаг 3. Настройка скорости и тона речи
- Шаг 4. Проверка и скачивание новых языков
- Шаг 5. IOnInitListener
- Сводка
Android Speech to Text Tutorial
In this article, we will learn how to implement speech to text functionality in android. To enable our app to use speech to text we have to use the SpeechRecognizer class.
Let’s see what is written in the official documentation:
This class provides access to the speech recognition service. This service allows access to the speech recognizer. Do not instantiate this class directly, instead, call SpeechRecognizer#createSpeechRecognizer(Context) . This class’s methods must be invoked only from the main application thread.
The implementation of this API is likely to stream audio to remote servers to perform speech recognition. As such this API is not intended to be used for continuous recognition, which would consume a significant amount of battery and bandwidth.
Let’s implement this to understand it better.
First of all, create a new Android Studio project and in the manifest file add the following user-permissions:
Now in the activity_main.xml file, we will add an EditText and an ImageView.I will not explain the layout file as I don’t want to waste anybody’s time who is here to learn the Speech to Text.You can see the code below.
Let’s dive into the MainActivity.java file.
First, we will check for the permissions:
If the permission is not granted then we will call the checkPermission method.
Now here comes the important part first which will initialize the SpeecRecognizer object and then create the intent for recognizing the speech.
As you can see we have added some extras let me explain what are they.
The constant ACTION_RECOGNIZE_SPEECH starts an activity that will prompt the user for speech and send it through a speech recognizer.
EXTRA_LANGUAGE_MODEL: Informs the recognizer which speech model to prefer when performing ACTION_RECOGNIZE_SPEECH.
LANGUAGE_MODEL_FREE_FORM: Use a language model based on free-form speech recognition.
EXTRA_LANGUAGE : Optional IETF language tag (as defined by BCP 47), for example, “en-US”.
Now we will set a speechRecognitionListener to our speechRecognizer object using the setRecognitionListener() method.
You can see after setting the listener we get several methods to implement. We will go the onResults method and add the following code
We get an ArrayList of String as a result and we use this ArrayList to update the UI (EditText here).
Build better voice apps. Get more articles & interviews from voice technology experts at voicetechpodcast.com
In the onBeginningOfSpeeh() method we will add the following code to tell the user that his voice is being recognized.
Now, lets set up the imageView. We will add a touchListener to the image view to know when the user has pressed the image.
When the user taps the imageView the listener starts listening and the imageView source image is also changed to update the user that his voice is being listened to.
You can find the full source code below:
Let’s run the app.
Now you are capable of adding a cool functionality to your app. What are you waiting for start coding…
You can get the full source code from my GitHub.
Источник
Как добавить Text-to-Speech в свое приложение
Android предоставляет действительно огромные возможности для работы с устройствами. Например, он позволяет конвертировать текст в речь, о чём и будет говориться в этой статье. Это достигается благодаря использованию Синтеза речи (Text-to-Speech), который не только умеет конвертировать текст в речь, но также может говорить на разных языках.
Синтез речи может использоваться в самых разных областях, например, одно из наиболее частых применений это озвучивание текста для пользователей с нарушением зрения. Синтез речи также применяется для того, чтобы читать вслух книги или изучать языки.
В нашем приложении «Карточки для детей» с помощью Text-to-Speech, если активировать эту опцию в настройках, озвучивается содержимое выбранной карточки при нажатии на неё. В этой статье мы рассмотрим, как добавляется синтез речи в приложение.
Для того, чтобы использовать в своём приложении синтез речи, Android SDK предоставляет класс TextToSpeech, который и синтезирует речь из текста. Его реализация достаточно проста, для начала нужно инициализировать экземпляр TextToSpeech и слушатель onInitListener.
В этом слушателе мы должны определить свойства экземпляра TextToSpeech после его инициализации, такие как язык, тембр и так далее. Для этого добавим в onItit() следующий код.
Если инициализация завершена успешно, то с помощью метода isLanguageAvailable() проверяем доступность русского языка. В зависимости от того, доступен ли русский язык, методом setLanguage() устанавливаем экземпляру TextToSpeech или русский язык, или английский.
setLanguage() в качестве параметра принимает объект Locale, однако здесь есть один момент: TextToSpeech не знает локаль ru_RU, которая возвращается при вызове метода Locale.getDefault(). Поэтому при установке русского языка лучше явно задать локаль ru для корректной работы. Получить её можно, вызвав метод Locale.getDefault().getLanguage().
Метод setPitch() выставляет тембр голоса, который будет озвучивать текст.
Метод setSpeechRate() устанавливает скорость речи.
Теперь, когда объект инициализирован, нужно заставить его читать текст. Для этого при нажатии на карточку вызывается callback, передающий слушателю на активности с экземпляром TextToSpeech данные, которые нужно озвучить. Ключевым в процессе синтеза речи будет являться метод speak() класса TextToSpeech.
В метод speak() необходимо передать следующие параметры:
- text — текст, который нужно воспроизвести;
- TextToSpeech.QUEUE_FLUSH — флаг, обозначающий, что при добавлении новой фразы текущую необходимо прервать и начать воспроизведение добавленной. Если вы хотите составить очередь из фраз, следует использовать вместо этого флаг TextToSpeech.QUEUE_ADD;
- Дополнительные параметры.
Главным отличием здесь является то, как формируются дополнительные параметры, в частности идентификатор фразы.
Для версий ниже Lolipop 5.0 (API 21) нужно создать объект HashMap , в который необходимо добавить пару ключ-значение, где ключ TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID обозначает, что мы хотим добавить в параметры идентификатор фразы, а значение — собственно идентификатор, например «MessageId».
В новых же версиях Android это можно сделать проще, без использования HashMap.
В результате мы добавили TextToSpeech в наше приложение и получили возможность воспроизводить название каждой карточки средствами устройства.
Источник
Android: Speech To Text using API
by Viral Patel · August 9, 2012
Android has a very cool feature that still many developers dont know. Apps like Any.DO uses speech to text conversion feature quite creatively. In today’s world of Siri, voice commands are of utmost importance. Android natively provides feature of Speech to Text so why not to use it in our app! I will show you how to use Android’s Speech to Text API in an application. Let’s make our demo application.
Demo App
The App will be very simple. It will have a button with Mic symbol. On click of which we trigger Android’s Speech to Text Intent which shows a dialog to take speech input. The speech input is then converted into text. The text is then displayed in a text view.
Step 1: Create Basic Android Project in Eclipse
Create a Hello World Android project in Eclipse. Go to New > Project > Android Project. Give the project name as SpeechToTextDemo and select Android Runtime 2.1 or sdk 7. I have given package name net.viralpatel.android.speechtotextdemo . Once you are done with above steps, you will have a basic hello world Android App.
Step 2: Change the Layout
For our demo, we need simple layout. Just one Image Button to trigger Speech to Text API and one TextView to display result text that is converted from speech. Open layout/main.xml in your android project and replace its content with following:
The UI is very simply. One LinearLayout to organize the button and text view. Note the id for button: btnSpeak and text view: txtText which we will use in our Java code.
Step 3: Android Java Code to trigger Speech to Text API
Open SpeechToTextDemoActivity class and replace the code with following.
The heart of Speech to text Android API is package android.speech and specifically class android.speech.RecognizerIntent . Basically we trigger an Intent (android.speech.RecognizerIntent) which shows dialog box to recognize speech input. This Activity then converts the speech into text and send backs the result to our calling Activity. When we invoke android.speech.RecognizerIntent intent, we must use startActivityForResult() as we must listen back for result text. Note how in above code we crate intent android.speech.RecognizerIntent and trigger it. Also we add one extra parameter using .putExtra() method. When invoking RecognizerIntent, we must provide extra RecognizerIntent.EXTRA_LANGUAGE_MODE. Here we are setting its value to en-US. Since we triggered the RecognizerIntent via startActivityForResult(), we override method onActivityResult(int requestCode, int resultCode, Intent data) to handle the result data. The RecognizerIntent will convert the speech input to text and send back the result as ArraList with key RecognizerIntent.EXTRA_RESULTS. Generally this list should be ordered in descending order of speech recognizer confidence. Only present when RESULT_OK is returned in an activity result. We just set the text that we got in result in text view txtText using txtText.setText() .
One thing worth noting here is how to handle devices/android version that doesn’t support speech to text API. In such case, exception ActivityNotFoundException will be thrown when we try to start activity. In above example, we have catched this exception and displayed a message “Opps! Your device doesn’t support Speech to Text” using Toast.
Screen shots of Android App
And that’s all! Just execute the app in Android emulator or real device and see following output.
Источник
Обработка речи в Android
В этой статье рассматриваются принципы работы с мощным пространством имен Android.Speech. С момента своего создания платформа Android умеет распознавать речь и выводить ее в виде текста. Этот процесс относительно прост. Но обратное преобразование текста в речь влечет больше сложностей, так как в нем нужно учитывать не только подсистему обработки речи, но и доступные языки, установленные из системы преобразования текста в речь (TTS).
Обзор системы обработки речи
Наличие системы, которая «понимает» человеческий голос и проговаривает вводимые данные (преобразование речи в текст и текста в речь) — это активно развивающееся направление в разработке мобильных приложений, так как потребность в естественном взаимодействии с устройствами постоянно растет. Существует множество ситуаций, в которых функция преобразования текста в речь или речи в текст станет очень полезным инструментом для внедрения в приложение для Android.
Например, после запрета использования мобильных телефонов за рулем пользователи ищут способы управлять устройствами без использования рук. Множество разных форм-факторов устройств Android, включая Android Wear, и постоянно растущее разнообразие устройств с Android (например, планшеты и блокноты) создают значительный интерес к хорошим приложениям с системой TTS.
Google предоставляет разработчикам через пространство имен Android.Speech богатый набор API-интерфейсов, которые позволяют устройствам «понимать речь» в большинстве сценариев (например, программное обеспечение для слепых людей). Это пространство имен содержит возможности для преобразования текста в речь через Android.Speech.Tts и управления подсистемой преобразования, а также несколько классов RecognizerIntent для обратного преобразования речи в текст.
Но даже при наличии возможностей для работы с речью нельзя забывать об аппаратных ограничениях. Не стоит ожидать, что устройство сможет успешно интерпретировать любую речь на любом из существующих языков.
Requirements (Требования)
Для работы с этим руководством нет особых требований. Вам потребуется только устройство с микрофоном и динамиком.
Основной системы интерпретации речи на устройствах Android является метод Intent с соответствующим объектом OnActivityResult . Но здесь важно понимать, что этот процесс не подразумевает понимание речи, а только преобразование речи в текст. Это очень важное различие.
Разница между пониманием и преобразованием
Если по-простому, то понимание — это возможность понять реальное значение сказанного с учетом тона и контекста. Преобразование же сводится к выделению слов и выводу их в другой форме.
Рассмотрим простой пример из нашей ежедневной жизни.
Привет! Как дела?
Без выделения интонацией отдельных слов или их частей это будет простой вопрос. Но если произнести эту фразу медленно, человек быстро почувствует, что спрашивающий находится в плохом расположении духа, нуждается в поддержке или даже болен. Если слово «дела» выделяется интонационно, это обычно означает более высокую заинтересованность в ответе.
Без довольно мощных возможностей обработки звука, позволяющих анализировать интонацию, и искусственного интеллекта для анализа контекста программное обеспечение даже не приблизится к пониманию смысла — обычный смартфон может лишь преобразовать речь в текст.
Настройка
Перед началом работы проверьте наличие микрофона на устройстве. Нет никакого смысла запускать приложение на устройстве Kindle или Google, на котором нет микрофона.
Следующий пример кода демонстрирует запрос, который проверяет наличие микрофона и, если микрофона нет, создает предупреждение. Если микрофон на этом этапе не обнаружен, вы можете завершить текущее действие или отключить функцию записи речи.
Создание намерения
Система обработки речи использует определенный тип намерения, которое называется RecognizerIntent . Это намерение управляет большим числом параметров, в том числе временем ожидания в тишине до завершения записи, возможностью распознавать и выводить текст на других языках, выводом дополнительных инструкций в модальном диалоге Intent и т. д. В этом фрагменте кода VOICE представляет собой намерение readonly int , которое используется в OnActivityResult для распознавания речи.
Преобразование речи
Текст, полученный на основе речи, предоставляется в намерение Intent , которое возвращается после завершения действия, а доступ к нему осуществляется через GetStringArrayListExtra(RecognizerIntent.ExtraResults) . Здесь возвращается список IList , для которого можно применять и отображать индекс в зависимости от числа языков, запрошенных в вызове намерения (и указанных в RecognizerIntent.ExtraMaxResults ). Но как и с любым другим списком, есть смысл проверить наличие данных для отображения.
При ожидании возвращаемого значения StartActivityForResult нужно предоставить метод OnActivityResult .
В следующем примере textBox представляет собой TextBox для вывода диктуемого текста. Его можно с тем же успехом применять для передачи текста в какое-то средство интерпретации, а полученные результаты сравнить с примерами текста и передать в другую часть приложения.
Преобразование текста в речь
Преобразование текста в речь нельзя рассматривать просто как обратную функцию к преобразованию речи в текст, так как эта функция зависит от двух важнейших компонентов: установленной на устройстве подсистемы преобразования и установленного в системе языка.
В основном устройства Android поставляются с установленной стандартной службой TTS от Google и хотя бы одним языком. Эти параметры определяются при первой настройке устройства и зависят от текущего расположения устройства на тот момент (например, для настраиваемого в Германии телефона будет установлен немецкий язык, а в США — американский английский).
Шаг 1. Создание экземпляра TextToSpeech
TextToSpeech принимает до трех параметров, AppContext , IOnInitListener и engine , из которых первые два — обязательные. Прослушиватель (listener) используется для привязки к службе и проверки на наличие ошибок, а подсистемой (engine) может быть любое число доступных служб Android подсистем преобразования текста в речь. Как минимум, на устройстве будет подсистема от Google.
Шаг 2. Поиск доступных языков
Класс Java.Util.Locale содержит полезный метод с именем GetAvailableLocales() . Теперь можно сопоставить список языков, поддерживаемых подсистемой обработки речи, и языков, установленных в системе.
Из них очевидным образом выводится список «понимаемых» языков. В этом списке всегда будет присутствовать язык по умолчанию (тот, на котором пользователь впервые настраивал это устройство). Таким образом в нашем примере для List первым параметром указывается значение Default, а остальные элементы списка заполняются по результатам выполнения textToSpeech.IsLanguageAvailable(locale) .
Этот код вызывает TextToSpeech.IsLanguageAvailable, чтобы проверить наличие на устройстве языкового пакета для определенного языкового стандарта. Этот метод возвращает LanguageAvailableResult, что позволяет определить, есть ли в системе язык для полученного языкового стандарта. Если LanguageAvailableResult имеет значение NotSupported , это означает, что для этого языка нет доступного (даже для скачивания) голосового пакета. Если LanguageAvailableResult имеет значение MissingData , это означает, что можно скачать новый языковой пакет (см. шаг 4).
Шаг 3. Настройка скорости и тона речи
Android позволяет пользователям изменять звучание речи через параметры SpeechRate и Pitch (скорость и тон речи соответственно). Эти параметры принимают значения от 0 до 1, где «обычной» речи соответствует значение 1.
Шаг 4. Проверка и скачивание новых языков
Для скачивания нового языка используется намерение Intent . Результат этого намерения приводит к вызову метода OnActivityResult. В отличие от примера «речь-к тексту» (который использовал рекогнизеринтент в качестве параметра Intent ), тестирование и загрузка Intent Action основаны на:
Тексттоспич. Engine. актиончеккттсдата — запускает действие из подсистемы платформы для проверки правильности установки и доступности языковых ресурсов на устройстве.
Тексттоспич. Engine. актионинсталлттсдата — запускает действие, предлагающее пользователю загрузить необходимые языки.
Следующий пример кода демонстрирует применение этих действий для языковых ресурсов и для скачивания нового языка.
TextToSpeech.Engine.ActionCheckTtsData проверяет доступность языковых ресурсов. После завершения этой проверки вызывается OnActivityResult . Если нужно скачать языковые ресурсы, OnActivityResult запускает действие TextToSpeech.Engine.ActionInstallTtsData , которое позволит пользователю скачать нужные языки. Обратите внимание, что реализация OnActivityResult не проверяет код Result , поскольку в нашем упрощенном примере решение о необходимости скачать языковой пакет уже принято.
Это TextToSpeech.Engine.ActionInstallTtsData действие приводит к тому, что пользователю будет предоставлено действие по TextToSpeech.Engine.ActionInstallTtsData для выбора языков для загрузки:
Предположим, что пользователь выбрал французский язык и щелкнул значок скачивания, чтобы получить голосовые данные для французского языка.
После завершения скачивания данные будут установлены автоматически.
Шаг 5. IOnInitListener
Чтобы действие могло преобразовать текст в речь, нужно реализовать метод интерфейса OnInit (это второй параметр, который указывается для создания экземпляра класса TextToSpeech ). Он инициализирует прослушиватель и проверяет результат.
Прослушиватель должен проверять по меньшей мере OperationResult.Success и OperationResult.Failure . В примере ниже именно это и показано.
Сводка
В этом руководстве мы рассмотрели основные моменты преобразование текста в речь и речи в текст, а также возможные методы добавления этих технологий в приложения. Хотя мы и не охватили все возможные ситуации, у вас уже есть базовое представление о механизмах интерпретации речи, установке новых языков и повышении инклюзивности приложений.
Источник