- Распознавание и генерация речи в Android
- Программируем распознавание речи в Android
- Генерация речи в Android
- 5 лучших приложений для превращения голоса в текст на Android
- Gboard
- Evernote
- Speechnotes
- Speechtexter
- Обработка речи в Android
- Обзор системы обработки речи
- Requirements (Требования)
- Разница между пониманием и преобразованием
- Настройка
- Создание намерения
- Преобразование речи
- Преобразование текста в речь
- Шаг 1. Создание экземпляра TextToSpeech
- Шаг 2. Поиск доступных языков
- Шаг 3. Настройка скорости и тона речи
- Шаг 4. Проверка и скачивание новых языков
- Шаг 5. IOnInitListener
- Сводка
Распознавание и генерация речи в Android
Последнее время большой интерес у пользователей вызывает возможность распознавания речи в телефонах. Огромная заслуга в популяризации этого направления принадлежит компании Aple, однако Google также располагает подобными технологиями. Собственно этой теме и будет посвящена данная статья. Мы разработаем приложение, которое будет распознавать речь пользователя и воспроизводить результат с помощью голосового движка «Text To Speech» (TTS). Отметим, что распознавание происходит на серверах Google, поэтому для работы приложению необходимо разрешить использовать коммуникационные возможности. Кроме того, распознавание речи не работает на эмуляторе. Тестировать программу необходимо на реальном устройстве.
На самом деле работать с распознаванием и синтезом речи в Android очень просто. Все сложные вычисления скрыты от нас в довольно элегантную библиотеку с простым API. Вы сможете осилить этот урок, даже если имеете весьма поверхностные знания о программировании для Android.
Давайте создадим новый проект в Eclipse. Для наших нужд понадобится версия SDK не меньше 8. Опишем в общих чертах создаваемую программу. При запуске приложения пользователю будет показана кнопка, после нажатия на которую пользователю будет предложено надиктовать фразу. Затем будет осуществлено распознавание и будет показан список возможных вариантов. Поскольку технологии распознавания речи далеки от совершенства, программа не может ручаться за точность результата, именно поэтому будет предложено несколько вариантов. После того, как пользователь выберет один из них, будет запущен генератор голоса, который воспроизведет выбранную фразу.
Нам понадобится несколько текстовых строк, объявим их в фале «res/values/strings.xml»
Откроем файл «res/layout/main.xml» и зададим шаблон дизайна приложения. Для этого переключимся из графического в XML редактор и изменим содержимое файла
Добавим в Linear Layout элемент Text View
обратите внимание, TextView ссылается на строку intro, которую мы задали в файле strings.xml.
После Text View добавим кнопку
Пользователь будет нажимать эту кнопку, чтобы начать говорить. Кнопка имеет параметр id, через который ее можно вызвать из Java кода. После нажатия на кнопку пользователю показывается сообщение. Нам также понадобится TextView для вывода слов с предложениями
TextView будет использовать строковый ресурс. Нам также понадобится список для вариантов слов
ListView будет заполняться данными в процессе работы программы, поэтому для доступа к этому компоненту также требуется ID. Обратите также внимание на наличие ресурса drawable. Вы должны сохранить файл words_bg.xml в папке res
Ничего особенного. Вы можете настроить дизайн ListView по своему усмотрению. Нам осталось задать еще один элемент пользовательского интерфейса — шаблон для элемента ListView. Создайте новый файл res/layout/word.xml со следующим содержанием
Таким образом, каждый элемент списка представляет собой просто Text View.
Если Вы все сделали правильно, то при запуске должно получиться следующее
Программируем распознавание речи в Android
После того, как шаблон будущего приложения создан, можно перейти к кодированию. Откройте java файл главной Activity и добавьте в начало файла
Изменим немного декларацию главного класса
OnInitListener необходим для работы TTS движка. Внутри класса добавим объявления переменных перед методом onCreate
Внутри метода onCreate автоматически сгенерирован код, вызывающий метод родительского класса и устанавливающий главный контекст вывода.
Cоздадим переменные для работы с кнопкой и списком распознанных слов
Далее необходимо проверить поддерживается ли возможность распознавания голоса телефоном
Мы запрашиваем среду, поддерживается ли Recognizer Intent. Если поддерживается, мы говорим приложению, что нужно отслеживать щелчок пользователя по кнопке. Если интент не поддерживается, мы блокируем кнопку и выводим соответствующее сообщение пользователю.
Напишем код, обрабатывающий нажатие на кнопку. Внутри класса после метода OnCreate добавим метод OnClick.
Как видите, при нажатии на кнопку мы вызываем метод listenToSpeech().
Большая часть приведенного кода стандартна для программ, использующих распознавание голоса. Обратите внимание на параметр EXTRA_PROMPT. Он задает строку-приглашение для пользователя. Параметр EXTRA_MAX_RESULTS определяет максимальное число вариантов распознавания. В конце концов, мы вызываем startActivityForResult. Результат его работы будет передан в метод onActivityResult.
На следующем скриншоте показан экран в момент распознавания речи.
Определим метод onActivityResult
Обратите внимание, при проверке результата мы сравниваем переменную requestCode с константой VR_REQUEST, которую использовали ранее при вызове метода startActivityForResult. Таким образом, мы рассматриваем только результаты от нашего запроса. В метод возвращается 10 вариантов распознанных слов, которые мы записываем в список ArrayList. Этот список мы используем в ArrayAdapter компонента List View.
Если приложение справилось с задачей и смогло что-то распознать, вы увидите похожий н показанный на левом скриншоте результат. Если приложению не удалось распознать фразу, будет показано сообщение, как на правом скриншоте
Вот, собственно и все. Распознавание голоса в Android — довольно простая задача. Мы вызываем интент RecognizerIntent с требуемыми нами параметрами. Результат возвращается в onActivityResult.
Генерация речи в Android
Перейдем ко второй части нашего приложения, связанного с генерацией речи. Мы хотим, чтобы телефон проговаривал фразу из списка результатов. Мы должны определить строку, на которую щелкнул пользователь. Вернемся к методу onCreate и добавим в конец этого метода код
Мы используем метод setOnItemClickListener чтобы установить отслеживание щелчков для каждой строки. Внутри нового объекта OnItemClickListener мы описали метод onItemClick, который вызывается в ответ на щелчок по строке списка. Выбранная строка передается, как View в этот метод. Поскольку при проектировании шаблона приложения мы указали, что наш список состоит из TextView, мы преобразуем полученное значение в объект TextView и достаем из него строковое значение. Мы записываем это слово в лог и показываем пользователю Toast сообщение.
Если Вас не интересует процесс генерации речи, Вы можете остановиться и протестировать приложение.
Для генерации речи необходимо настроить движок TTS. Добавим код в конец метода onCreate
Как и в случае распознавания, результат интента возвращается в метод onActivityResult. В этом методе перед строкой super.onActivityResult(requestCode, resultCode, data); добавьте
Таким образом, мы проверяем наличие TTS движка, и если он не установлен — предлагаем пользователю установить соответствующую программу.
Чтобы завершить настройку TTS, добавим метод onInit, который вызывается при успешной инициализации TTS.
Здесь мы устанавливаем язык генератора речи.
Для того, чтобы заставить движок проговорить строку, нужно вызвать метод repeatTTS.speak. Вернемся к методу onCreate. Внутри метода onItemClick после строки Toast.makeText(SpeechRepeatActivity.this, «You said: «+wordChosen, Toast.LENGTH_SHORT).show(); добавьте следующий код
Таким образом, одновременно с Toast сообщением пользователь услышит сгенерированную речь. Отметим еще раз, что эмулятор не поддерживает распознавание речи, поэтому тестировать программу необходимо на телефоне.
Источник
5 лучших приложений для превращения голоса в текст на Android
Времена, когда для того, чтобы превратить свою устную речь в письменный текст, вам нужен был личный секретарь, уже давно прошли. У старого метода, безусловно, есть свои преимущества, но сегодня для преобразования речи в текст гораздо проще и дешевле будет воспользоваться своим самым обыкновенным смартфоном. В этом материале мы составили список лучших конвертеров аудио в текст для Android, так что вам будет намного проще подобрать какой-нибудь себе по душе.
Gboard
Конечно, мы не могли не включить фирменную клавиатуру Google в этот список. Возможно, вам даже не понадобится устанавливать на ваш телефон какие-либо дополнительное программы. На многих Android-устройствах клавиатура Google есть по умолчанию, а на те, где ее нет, Gboard можно загрузить из магазина Google Play.
Хотя приложение Gboard в первую очередь предназначено для физического ввода текста, оно также поддерживает транскрипцию речи в текст. Между прочим, эта функция в Gboard работает очень хорошо, так как задействует все мощности Google. Приложение также поддерживает множество языков и может быть загружено для использования офлайн и более быстрого голосового набора. Gboard также бесплатно и его должно быть более чем достаточно для ваших нужд. Это, безусловно, один из лучших конвертеров аудио в текст на Android.
Evernote
Вот еще одно приложение, возможности которого сложно переоценить. Evernote — одно из самых популярных приложений для создания заметок, которое, помимо прочего, поддерживает преобразование речи в текст. В этом приложении есть множество других функций и возможностей на все случаи жизни, поэтому всем, кто часто делает заметки, Evernote обязателен к ознакомлению. Базовые возможности Evernote бесплатны, но за остальные придётся платить 219 рублей в месяц или 1989 рублей в год.
Speechnotes
Разработчик Speechnotes утверждает, что это бесплатная альтернатива самым дорогим аудио-текстовым конвертерам на рынке. Speechnotes задействует для своей работы сервера Google, а поэтому распознаёт речь ничуть не хуже, чем тот же Gboard. Приложение умеет работать в режиме диктовки несколько часов подряд, а также позволяет отредактировать сгенерированный текст даже во время диктовки.
Speechnotes можно загрузить и использовать бесплатно, но в бесплатной версии есть реклама. Чтобы избавиться от рекламы и получить возможность кастомизировать интерфейс приложения, вам придётся купить Speechnotes за 499 рублей или оформить подписку за 69 рублей в месяц. Во втором случае предоставляется бесплатный тестовый период на 7 дней.
Speechtexter
Это приложение больше остальных зависит от подключения к сети, но оно также работает на основе данных от Google и прекрасно себя показывает, если все в порядке с вашим интернетом. Что делает Speechtexter особенным, так это его собственный словарь, в который можно занести какие-нибудь сокращения и расшифровки для них, а затем использовать во время диктовки. Speechtexter содержит рекламу, но благодаря этому оно абсолютно бесплатно.
Последнее в нашем списке, но не последнее по значимости, – T2S. Это приложение изначально предназначено для преобразования речи в текст. Оно также умеет экспортировать созданную голосовую заметку в аудиофайл и умеет читать вслух выделенный текст в браузере с любого сайта. T2S бесплатно, но содержит рекламу.
Мы надеемся, что хотя бы одно из этих приложений придётся вам по душе и поможет сэкономить в будущем много времени и сих, позволяя набирать текст голосом, а не руками.
Делитесь своим мнением в комментариях под этим материалом и в нашем Telegram-чате.
Новости, статьи и анонсы публикаций
Свободное общение и обсуждение материалов
Потеря мобильного устройства, особенно смартфона, — это серьезнейший повод для стресса. Наши устройства хранят основную часть личной информации и потенциально конфиденциальных данных. В случае потери или кражи это может иметь катастрофические последствия. Если вы используете устройство Android, есть способы определить его местоположение, если случайно разминетесь с ним. В этой статье мы соберем несколько способов определить местоположение телефона, которые вы можете использовать, пока ваш телефон включен и подключен к мобильной сети или сети Wi-Fi. Только имейте в виду, что использовать трекеры для отслеживания положения других людей без их ведома не только неэтично, но и незаконно.
Игры для смартфона (и не только) можно разделить на несколько больших групп. В каждую из них будут входить свои жанры, но именно по своему посылу игр не так много. Одна из таких категорий — те игры, в которых надо подумать, чтобы их пройти. Иногда они бывают легче или сложнее, но именно в них победа приносит какое-то особенное удовольствие. К ним можно отнести самые разные игры — от простых крестиков/ноликов до сложных игр, вроде Eyes of Ara или Monument Valley. В этой подборке мы соберем самые интересные и незаезженные из них. Как обычно, подбирали то, что не стыдно посоветовать, и во что будет интересно поиграть почти каждому.
Хорошо это или плохо, но мы живем в эпоху, когда с воровством контента пытаются бороться. С переменным успехом, но что-то получается. Да и смысла в воровстве мало: те же музыкальные платформы устроены так, что практически вся музыка есть, подкасты тоже, достаточно лишь заплатить абонентскую плату, какие-то смешные деньги. Зато все хиты и новинки в одном месте, с друзьями поделиться можно. Но мне кажется, что отказываться от воровства контента еще рановато. Сегодня я расскажу вам, почему пиратский контент по-прежнему актуален.
Источник
Обработка речи в 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 . В примере ниже именно это и показано.
Сводка
В этом руководстве мы рассмотрели основные моменты преобразование текста в речь и речи в текст, а также возможные методы добавления этих технологий в приложения. Хотя мы и не охватили все возможные ситуации, у вас уже есть базовое представление о механизмах интерпретации речи, установке новых языков и повышении инклюзивности приложений.
Источник