
Spokestack-это решение для мобильных голосовых интерфейсов на Android. Он обеспечивает каждую часть головоломки по обработке речи, включая обнаружение голосовой активности, обнаружение WakeWord, распознавание речи, понимание естественного языка (NLU) и синтез речи (TTS). Под его конфигурацией по умолчанию (на новых устройствах Android) все, кроме TTS, происходит непосредственно на мобильном устройстве - без связи с облаком означает более быстрые результаты и лучшую конфиденциальность.
А Android не единственная платформа, которую он поддерживает!
Создание бесплатной учетной записи на spokestack.io позволяет вам обучать свои собственные модели NLU и протестировать TTS без добавления кода в ваше приложение. Мы можем даже обучить вам пользовательский WakeWord и TTS Voice, гарантируя, что голос вашего приложения является уникальным и запоминающимся.
Для краткого введения, читайте дальше, но для более подробных руководств см. Следующее:
Примечание : Spokestack был размещен на JCenter, но с момента объявления о его прекращении мы перенесли дистрибуцию в Maven Central. Пожалуйста, убедитесь, что ваш файл build.gradle на уровне корня включает в себя mavenCentral() в свой блок repositories , чтобы получить доступ к версиям> = 11.0.2.
Минимальная версия Android SDK, указанная в Manifest Spokestack, составляет 8, потому что это все, что вам нужно для обнаружения Wake Word и распознавания речи. Чтобы использовать другие функции, лучше всего ориентироваться, по крайней мере, API -уровни 21.
Если вы включите Exoplayer для воспроизведения TTS (см. Ниже), у вас могут возникнуть проблемы с запуском в версиях Android, чем API -уровне 24. Если вы столкнетесь с этой проблемой, попробуйте добавить следующую строку в свой файл gradle.properties :
android.enableDexingArtifactTransform=false
Добавьте следующее в build.gradle вашего приложения:
android {
// ...
compileOptions {
sourceCompatibility JavaVersion . VERSION_1_8
targetCompatibility JavaVersion . VERSION_1_8
}
}
// ...
dependencies {
// ...
// make sure to check the badge above or "releases" on the right for the
// latest version!
implementation ' io.spokestack:spokestack-android:11.5.2 '
// for TensorFlow Lite-powered wakeword detection and/or NLU, add this one too
implementation ' org.tensorflow:tensorflow-lite:2.6.0 '
// for automatic playback of TTS audio
implementation ' androidx.media:media:1.3.0 '
implementation ' com.google.android.exoplayer:exoplayer-core:2.14.0 '
// if you plan to use Google ASR, include these
implementation ' com.google.cloud:google-cloud-speech:1.22.2 '
implementation ' io.grpc:grpc-okhttp:1.28.0 '
// if you plan to use Azure Speech Service, include these, and
// note that you'll also need to add the following to your top-level
// build.gradle's `repositories` block:
// maven { url 'https://csspeechstorage.blob.core.windows.net/maven/' }
implementation ' com.microsoft.cognitiveservices.speech:client-sdk:1.9.0 '
}Смотрите руководство QuickStart для получения дополнительной информации, но вот 30-секундная версия Setup:
RECORD_AUDIO во время выполнения. Смотрите наш проект скелета для примера этого. Разрешение INTERNET также требуется, но по умолчанию включено по умолчанию библиотеки.Activity , если вы только начинаете: private lateinit var spokestack : Spokestack
// ...
spokestack = Spokestack . Builder ()
.setProperty( " wake-detect-path " , " $cacheDir /detect.tflite " )
.setProperty( " wake-encode-path " , " $cacheDir /encode.tflite " )
.setProperty( " wake-filter-path " , " $cacheDir /filter.tflite " )
.setProperty( " nlu-model-path " , " $cacheDir /nlu.tflite " )
.setProperty( " nlu-metadata-path " , " $cacheDir /metadata.json " )
.setProperty( " wordpiece-vocab-path " , " $cacheDir /vocab.txt " )
.setProperty( " spokestack-id " , " your-client-id " )
.setProperty( " spokestack-secret " , " your-secret-key " )
// `applicationContext` is available inside all `Activity`s
.withAndroidContext(applicationContext)
// see below; `listener` here inherits from `SpokestackAdapter`
.addListener(listener)
.build()
// ...
// starting the pipeline makes Spokestack listen for the wakeword
spokestack.start()В этом примере предполагается, что вы храните модели WakeWord и NLU в каталоге кеша вашего приложения; Опять же, см. Проект Skeleton для примера декомпрессии этих файлов из пакета активов в этот каталог.
Чтобы использовать демонстрацию "Spokestack" Wakeword, скачать модели Tensorflow Lite: Detect | кодировать | фильтр
Если вы еще не хотите беспокоиться об этом, просто отключите обнаружение WakeWord и NLU, и вы можете оставить все пути файлов выше:
spokestack = Spokestack . Builder ()
.withoutWakeword()
.withoutNlu()
// ...
.build() В этом случае вам все равно нужно start() Spokestack, как указано выше, но вы также захотите создать кнопку где -то, где вызывает spokestack.activate() при нажатии; Это начинается с ASR, которая транскрибирует пользовательскую речь.
С другой стороны, вы можете установить Spokestack для запуска ASR в любое время, когда он обнаруживает речь, используя профиль речевого трубопровода, не являющегося делом, как описано в документации речевого конвейера. В этом случае вы хотите профиль VADTriggerAndroidASR :
// replace
.withoutWakeword()
// with
.withPipelineProfile( " io.spokestack.spokestack.profile.VADTriggerAndroidASR " ) Примечание также линия addListener() во время настройки. Обработка речи постоянно происходит на фоновом потоке, поэтому вашему приложению нужен способ выяснить, когда пользователь говорил с ним. Важные мероприятия проводятся через мероприятия на подкласс SpokestackAdapter . Ваш подкласс может переопределить столько из следующих методов событий, сколько вам нравится. Выбор не реализовать, ничто не сломает; Вы просто не получите эти события.
speechEvent(SpeechContext.Event, SpeechContext) : Это передает события из речевого конвейера, включая все, от уведомлений о том, что ASR активирован/деактивирован до частичных и полных транскриптов пользовательской речи.nluResult(NLUResult) : когда NLU включен, пользовательская речь автоматически отправляется через NLU для классификации. Вам понадобятся результаты этой классификации, чтобы помочь вашему приложению решить, что делать дальше.ttsEvent(TTSEvent) : если вы управляете воспроизведением TTS, вам захочется знать, когда синтезирована речь, готово играть (событие AUDIO_AVAILABLE ); Даже если вы этого не сделаете, событие PLAYBACK_COMPLETE может быть полезным, если вы хотите автоматически реактивировать микрофон после того, как ваше приложение считывает ответ.trace(SpokestackModule, String) : это объединяет сообщения журнала/трассировки из каждого модуля Spokestack. Некоторые модули включают в себя события трассировки в своих собственных методах событий, но каждое из этих событий также отправлено здесь.error(SpokestackModule, Throwable) : это объединяет ошибки из каждого модуля Spokestack. Некоторые модули включают события ошибок в своих собственных методах события, но каждое из этих событий также отправлено здесь.Руководство QuickStart содержит выборки реализаций большинства из этих методов.
Как мы уже упоминали, классификация обрабатывается автоматически, если NLU включена, поэтому основные методы, о которых вам нужно знать во время работы Spokestack, - это:
start()/stop() : запускает/останавливает трубопровод. Во время работы Spokestack использует микрофон для прослушивания Wakeword вашего приложения, если WakeWord не отключено, и в этом случае ASR должен активироваться по -другому. Конвейер должен быть остановлен, когда Spokestack больше не требуется (или когда приложение приостановлено) для свободных ресурсов.activate()/deactivate() : активирует/деактивирует ASR, который слушает и транскрибирует то, что говорит пользователь.synthesize(SynthesisRequest) : отправляет текст в Spokestack Cloud TTS, чтобы синтезироваться как аудио. В соответствии с конфигурацией по умолчанию этот звук будет воспроизведен автоматически, когда доступен. Maven используется для строительства/развертывания, а пакет находится в Maven Central.
Этот пакет требует, чтобы Android NDK был установлен, а переменные ANDROID_HOME и ANDROID_NDK_HOME должны были быть установлены. На OSX ANDROID_HOME обычно устанавливается на ~/Library/Android/sdk , а ANDROID_NDK_HOME обычно устанавливается в ~/Library/Android/sdk/ndk/<version> .
ANDROID_NDK_HOME также может быть указан в вашем локальном файле settings.xml в качестве свойства android.ndk.path .
mvn test jacoco:reportmvn checkstyle:check Убедитесь ~/.m2/settings.xml что ваши учетные данные в центре Sonatype/Maven находятся в ваших settings.xml пользователя.
< servers >
< server >
< id >ossrh</ id >
< username >sonatype-username</ username >
< password >sonatype-password</ password >
</ server >
</ servers >На филиале, не являющейся мастерством, запустите следующую команду. Это побудит вас ввести номер версии и тег для новой версии, нажмите тег на GitHub и развернуть пакет в репозиторий Sonatype.
mvn release:clean release:prepare release:performЦель Maven может потерпеть неудачу из -за ошибки, когда она пытается дважды загрузить файлы, но релиз все еще произошел.
Заполните процесс, создав и объединив запрос на вытягивание для нового филиала на GitHub и обновив заметки о выпуске, редактируя тег.
Для получения дополнительной информации о выпуске см. Http://maven.apache.org/maven-release/maven-release-plugin/
Copyright 2021 Spokestack, Inc.
Лицензировано по лицензии Apache, версия 2.0 («Лицензия»); Вы не можете использовать этот файл, кроме как в соответствии с лицензией. Вы можете получить копию лицензии на
http://www.apache.org/licenses/LICENSE-2.0
Если не требуется применимый закон или не согласен в письменной форме, программное обеспечение, распространяемое по лицензии, распределяется по основам «как есть», без каких -либо гарантий или условий, явных или подразумеваемых. См. Лицензию для конкретного языка, регулирующих разрешения и ограничения по лицензии.