
Spokestack ist eine All-in-One-Lösung für mobile Sprachschnittstellen auf Android. Es liefert jedes Stück des Sprachverarbeitungspuzzles, einschließlich Sprachaktivitätserkennung, Wakeword -Erkennung, Spracherkennung, Verständnis für natürliches Sprache (NLU) und Sprachsynthese (TTS). Unter seiner Standardkonfiguration (auf neueren Android -Geräten) tritt alles außer TTS direkt auf dem mobilen Gerät auf - keine Kommunikation mit der Cloud bedeutet schnellere Ergebnisse und bessere Privatsphäre.
Und Android ist nicht die einzige Plattform, die es unterstützt!
Durch das Erstellen eines kostenlosen Kontos bei Spokestack.io können Sie Ihre eigenen NLU -Modelle trainieren und TTs testen, ohne Ihrer App Code hinzuzufügen. Wir können sogar ein benutzerdefiniertes Wakeword und eine TTS -Stimme für Sie trainieren und sicherstellen, dass die Stimme Ihrer App einzigartig und unvergesslich ist.
Für eine kurze Einführung lesen Sie weiter, aber für detailliertere Anleitungen finden Sie Folgendes:
HINWEIS : Spokestack wurde früher auf JCenter gehostet, aber seit der Ankündigung seiner Absage haben wir die Verteilung in Maven Central verlegt. Bitte stellen Sie sicher, dass Ihre Root-Level build.gradle Datei mavenCentral() in seinen repositories -Block enthält, um auf Versionen> = 11.0.2 zuzugreifen.
Die minimale Android -SDK -Version, die in Spokestacks Manifest aufgeführt ist, ist 8, da dies alles ist, was Sie benötigen, um die Erkennung von Wake Word und die Spracherkennung auszuführen. Um andere Funktionen zu verwenden, ist es am besten, mindestens API Level 21 anzusprechen.
Wenn Sie einen Exoplayer für die TTS -Wiedergabe einfügen (siehe unten), haben Sie möglicherweise Probleme, auf Versionen von Android älter als API -Stufe 24 zu laufen. Wenn Sie dieses Problem treffen, fügen Sie die folgende Zeile zu Ihrer gradle.properties -Datei hinzu:
android.enableDexingArtifactTransform=false
Fügen Sie Folgendes zum build.gradle Ihrer App hinzu. 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 '
}Weitere Informationen finden Sie im QuickStart-Handbuch. Hier ist jedoch die 30-Sekunden-Version von Setup:
RECORD_AUDIO anfordern. Ein Beispiel dafür finden Sie in unserem Skelettprojekt. Die INTERNET ist ebenfalls erforderlich, ist jedoch standardmäßig durch das Manifest der Bibliothek enthalten.Activity , wenn Sie gerade erst anfangen: 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()In diesem Beispiel wird davon ausgegangen, dass Sie Wakeword- und NLU -Modelle im Cache -Verzeichnis Ihrer App speichern. Sehen Sie sich das Skelettprojekt erneut an, um ein Beispiel für die Dekomprimierung dieser Dateien aus dem Assets -Bundle in dieses Verzeichnis zu dekomprimieren.
Um das Wakeword "Spokestack" des Demo "Spokestack" zu verwenden, laden Sie die TensorFlow Lite -Modelle herunter: Erkennung | codieren | Filter
Wenn Sie sich noch nicht darum kümmern möchten, deaktivieren Sie einfach die Wakeword -Erkennung und die NLU, und Sie können alle oben genannten Dateipfade auslassen:
spokestack = Spokestack . Builder ()
.withoutWakeword()
.withoutNlu()
// ...
.build() In diesem Fall müssen Sie immer noch start() Spokestack wie oben, aber Sie möchten auch einen Knopf erstellen, der spokestack.activate() aufruft. Dies beginnt mit ASR, das die Benutzerrede transkribiert.
Alternativ können Sie Spokestack so festlegen, dass ASR jederzeit mithilfe eines nicht defekten Sprachpipeline-Profils, wie in der Dokumentation von Sprachpipeline beschrieben, zu starten. In diesem Fall möchten Sie das VADTriggerAndroidASR -Profil:
// replace
.withoutWakeword()
// with
.withPipelineProfile( " io.spokestack.spokestack.profile.VADTriggerAndroidASR " ) Beachten Sie auch die Zeile addListener() während des Setups. Die Sprachverarbeitung erfolgt kontinuierlich auf einem Hintergrund -Thread, sodass Ihre App eine Möglichkeit benötigt, um herauszufinden, wann der Benutzer damit gesprochen hat. Wichtige Ereignisse werden über Ereignisse an eine Unterklasse von SpokestackAdapter geliefert. Ihre Unterklasse kann so viele der folgenden Ereignismethoden wie Sie möchten. Die Entscheidung, keine zu implementieren, wird nichts brechen. Sie werden diese Ereignisse einfach nicht erhalten.
speechEvent(SpeechContext.Event, SpeechContext) : Dies kommuniziert Ereignisse aus der Sprachpipeline, einschließlich aller Benachrichtigungen, dass ASR aktiviert/deaktiviert wurde, um partielle und vollständige Transkripte der Benutzersprache zu treten.nluResult(NLUResult) : Wenn die NLU aktiviert ist, wird die Benutzerrede automatisch zur Klassifizierung über die NLU gesendet. Sie möchten, dass die Ergebnisse dieser Klassifizierung Ihrer App helfen, zu entscheiden, was als nächstes zu tun ist.ttsEvent(TTSEvent) : Wenn Sie selbst TTS -Wiedergabe verwalten, möchten Sie wissen, wann die Sprache, die Sie synthetisiert haben, zum Spielen bereit ist (das Ereignis AUDIO_AVAILABLE ); Auch wenn dies nicht der Fall ist, ist das Ereignis PLAYBACK_COMPLETE möglicherweise hilfreich, wenn Sie das Mikrofon automatisch reaktivieren möchten, nachdem Ihre App eine Antwort gelesen hat.trace(SpokestackModule, String) : Dies kombiniert Log/Trace -Nachrichten aus jedem Spokestack -Modul. Einige Module enthalten Trace -Ereignisse in ihren eigenen Ereignismethoden, aber jeder dieser Ereignisse wird hier auch gesendet.error(SpokestackModule, Throwable) : Dies kombiniert Fehler aus jedem Spokestack -Modul. Einige Module enthalten Fehlerereignisse in ihren eigenen Ereignismethoden, aber jeder dieser Ereignisse wird hier auch gesendet.Der QuickStart -Handbuch enthält Beispielimplementierungen der meisten dieser Methoden.
Wie bereits erwähnt, wird die Klassifizierung automatisch behandelt, wenn die NLU aktiviert ist. Die Hauptmethoden, über die Sie während des Ausführens von Spokestack wissen müssen, sind:
start()/stop() : startet/stoppt die Pipeline. Während des Ausführens verwendet Spokestack das Mikrofon, um das Wakeword Ihrer App anzuhören, es sei denn, Wakeword ist deaktiviert. In diesem Fall muss ASR eine andere Weise aktiviert werden. Die Pipeline sollte gestoppt werden, wenn Spokestack nicht mehr benötigt wird (oder wenn die App ausgesetzt ist), um freie Ressourcen zu erhalten.activate()/deactivate() : Aktiviert/deaktiviert ASR, was auf das hört und transkribiert, was der Benutzer sagt.synthesize(SynthesisRequest) : Sendet Text an den Cloud -TTS -Dienst von Spokestack, der als Audio synthetisiert werden soll. Unter der Standardkonfiguration wird dieses Audio automatisch abgespielt, sofern verfügbar. Maven wird zum Erstellen/Einsatz verwendet und das Paket wird bei Maven Central gehostet.
Für dieses Paket muss der Android NDK installiert werden, und die Variablen ANDROID_HOME und ANDROID_NDK_HOME werden festgelegt. Auf OSX wird ANDROID_HOME normalerweise auf ~/Library/Android/sdk und ANDROID_NDK_HOME gesetzt, wird normalerweise auf ~/Library/Android/sdk/ndk/<version> eingestellt.
ANDROID_NDK_HOME kann auch in Ihrer lokalen Maven settings.xml angegeben werden. Xml als android.ndk.path -Eigenschaft.
mvn test jacoco:reportmvn checkstyle:check Stellen Sie sicher ~/.m2/settings.xml dass sich Ihr Sonatyp/Maven -Zentralanmeldeinformationen in Ihren settings.xml befindet.
< servers >
< server >
< id >ossrh</ id >
< username >sonatype-username</ username >
< password >sonatype-password</ password >
</ server >
</ servers >Führen Sie in einem Nicht-Master-Zweig den folgenden Befehl aus. Auf diese Weise werden Sie aufgefordert, eine Versionsnummer und ein Tag für die neue Version einzugeben, das Tag in GitHub zu übertragen und das Paket im Sonatype -Repository bereitzustellen.
mvn release:clean release:prepare release:performDas Maven -Ziel kann aufgrund eines Fehlers fehlschlagen, bei dem versucht wird, die Dateien zweimal hochzuladen, aber die Version ist immer noch stattgefunden.
Vervollständigen Sie den Vorgang, indem Sie eine Pull -Anfrage für die neue Filiale in GitHub erstellen und verschmelzen und die Versionshinweise aktualisieren, indem Sie das Tag bearbeiten.
Weitere Informationen zur Veröffentlichung finden Sie unter http://maven.apache.org/maven-release/maven-release-plugin/
Copyright 2021 Spokestack, Inc.
Lizenziert unter der Apache -Lizenz, Version 2.0 (der "Lizenz"); Sie dürfen diese Datei nur in Übereinstimmung mit der Lizenz verwenden. Sie können eine Kopie der Lizenz bei erhalten
http://www.apache.org/licenses/LICENSE-2.0
Sofern nicht nach geltendem Recht oder schriftlich zu vereinbart wird, wird die im Rahmen der Lizenz verteilte Software auf "As is" -Basis ohne Gewährleistung oder Bedingungen jeglicher Art ausdrücklich oder impliziert verteilt. Siehe die Lizenz für die spezifischen Sprachberechtigungen und Einschränkungen im Rahmen der Lizenz.