
SpokeStack adalah solusi all-in-one untuk antarmuka suara seluler di Android. Ini memberikan setiap bagian dari teka -teki pemrosesan pidato, termasuk deteksi aktivitas suara, deteksi kata wakil, pengenalan bicara, pemahaman bahasa alami (NLU), dan sintesis ucapan (TTS). Di bawah konfigurasi defaultnya (pada perangkat Android yang lebih baru), semuanya kecuali TTS terjadi langsung pada perangkat seluler - tidak ada komunikasi dengan cloud berarti hasil yang lebih cepat dan privasi yang lebih baik.
Dan Android bukan satu -satunya platform yang didukungnya!
Membuat akun gratis di spokestack.io memungkinkan Anda melatih model NLU Anda sendiri dan menguji TTS tanpa menambahkan kode ke aplikasi Anda. Kami bahkan dapat melatih kata wakil kustom dan suara TTS untuk Anda, memastikan bahwa suara aplikasi Anda unik dan berkesan.
Untuk pengantar singkat, baca terus, tetapi untuk panduan yang lebih rinci, lihat yang berikut:
Catatan : Spokestack dulu di -host di JCenter, tetapi sejak pengumuman penghentiannya, kami telah memindahkan distribusi ke Maven Central. Harap pastikan bahwa file build.gradle level root Anda termasuk mavenCentral() di blok repositories untuk mengakses versi> = 11.0.2.
Versi SDK Android minimum yang tercantum dalam manifes SpokeStack adalah 8 karena hanya itu yang Anda butuhkan untuk menjalankan deteksi Wake Word dan pengenalan ucapan. Untuk menggunakan fitur lain, yang terbaik adalah menargetkan setidaknya API Level 21.
Jika Anda menyertakan Exoplayer untuk pemutaran TTS (lihat di bawah), Anda mungkin kesulitan menjalankan versi Android yang lebih tua dari API Level 24. Jika Anda mengalami masalah ini, coba tambahkan baris berikut ke file gradle.properties . Properties Anda:
android.enableDexingArtifactTransform=false
Tambahkan yang berikut ke build.gradle Aplikasi Anda.
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 '
}Lihat panduan QuickStart untuk informasi lebih lanjut, tetapi inilah versi pengaturan 30 detik:
RECORD_AUDIO saat runtime. Lihat proyek kerangka kami untuk contoh ini. Izin INTERNET juga diperlukan tetapi disertakan oleh manifes perpustakaan secara default.Activity jika Anda baru memulai: 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()Contoh ini mengasumsikan Anda menyimpan kata wakil dan model NLU di direktori cache aplikasi Anda; Sekali lagi, lihat proyek kerangka untuk contoh mendekompresi file -file ini dari bundel aset ke direktori ini.
Untuk menggunakan Demo "SpokeStack" Wakword, unduh model TensorFlow Lite: Detect | Encode | menyaring
Jika Anda belum ingin repot -repot dengan itu, cukup nonaktifkan Deteksi Kata Wake dan NLU, dan Anda dapat meninggalkan semua jalur file di atas:
spokestack = Spokestack . Builder ()
.withoutWakeword()
.withoutNlu()
// ...
.build() Dalam hal ini, Anda masih harus start() spokestack seperti di atas, tetapi Anda juga ingin membuat tombol di suatu tempat yang memanggil spokestack.activate() saat ditekan; Ini dimulai ASR, yang menyalin pidato pengguna.
Bergantian, Anda dapat mengatur spokestack untuk memulai ASR kapan saja mendeteksi pidato dengan menggunakan profil pipa pidato non-default seperti yang dijelaskan dalam dokumentasi pipa pidato. Dalam hal ini Anda ingin profil VADTriggerAndroidASR :
// replace
.withoutWakeword()
// with
.withPipelineProfile( " io.spokestack.spokestack.profile.VADTriggerAndroidASR " ) Perhatikan juga baris addListener() selama pengaturan. Pemrosesan ucapan terjadi terus menerus pada utas latar belakang, sehingga aplikasi Anda membutuhkan cara untuk mengetahui kapan pengguna telah berbicara dengannya. Acara penting disampaikan melalui acara ke subclass dari SpokestackAdapter . Subkelas Anda dapat mengganti sebanyak mungkin metode acara berikut yang Anda suka. Memilih untuk tidak mengimplementasikannya tidak akan merusak apa pun; Anda tidak akan menerima acara itu.
speechEvent(SpeechContext.Event, SpeechContext) : Ini mengkomunikasikan peristiwa dari pipa pidato, termasuk segala sesuatu dari pemberitahuan bahwa ASR telah diaktifkan/dinonaktifkan ke transkrip sebagian dan lengkap dari pidato pengguna.nluResult(NLUResult) : Ketika NLU diaktifkan, pidato pengguna secara otomatis dikirim melalui NLU untuk klasifikasi. Anda ingin hasil klasifikasi itu membantu aplikasi Anda memutuskan apa yang harus dilakukan selanjutnya.ttsEvent(TTSEvent) : Jika Anda mengelola pemutaran TTS sendiri, Anda akan ingin tahu kapan ucapan yang Anda sintesis siap dimainkan (acara AUDIO_AVAILABLE ); Bahkan jika Anda tidak, acara PLAYBACK_COMPLETE mungkin bermanfaat jika Anda ingin secara otomatis mengaktifkan kembali mikrofon setelah aplikasi Anda membaca respons.trace(SpokestackModule, String) : Ini menggabungkan pesan log/jejak dari setiap modul spokestack. Beberapa modul termasuk acara jejak dalam metode acara mereka sendiri, tetapi masing -masing acara tersebut juga dikirim ke sini.error(SpokestackModule, Throwable) : Ini menggabungkan kesalahan dari setiap modul spokestack. Beberapa modul termasuk peristiwa kesalahan dalam metode acara mereka sendiri, tetapi masing -masing acara tersebut juga dikirim ke sini.Panduan QuickStart berisi implementasi sampel dari sebagian besar metode ini.
Seperti yang kami sebutkan, klasifikasi ditangani secara otomatis jika NLU diaktifkan, jadi metode utama yang perlu Anda ketahui saat spokestack berjalan adalah:
start()/stop() : Memulai/menghentikan pipa. Saat berlari, SpokeStack menggunakan mikrofon untuk mendengarkan kata wakil aplikasi aplikasi Anda kecuali dinonaktifkan dinonaktifkan, dalam hal ini ASR harus diaktifkan dengan cara lain. Pipa harus dihentikan ketika SpokeStack tidak lagi diperlukan (atau ketika aplikasi ditangguhkan) untuk membebaskan sumber daya.activate()/deactivate() : mengaktifkan/menonaktifkan ASR, yang mendengarkan dan menyalin apa yang dikatakan pengguna.synthesize(SynthesisRequest) : Mengirim teks ke layanan TTS Cloud Spokestack untuk disintesis sebagai audio. Di bawah konfigurasi default, audio ini akan diputar secara otomatis jika tersedia. Maven digunakan untuk membangun/penempatan, dan paket ini di -host di Maven Central.
Paket ini membutuhkan NDK Android untuk diinstal dan variabel ANDROID_HOME dan ANDROID_NDK_HOME untuk diatur. Di OSX, ANDROID_HOME biasanya diatur ke ~/Library/Android/sdk dan ANDROID_NDK_HOME biasanya diatur ke ~/Library/Android/sdk/ndk/<version> .
ANDROID_NDK_HOME juga dapat ditentukan dalam file maven settings.xml lokal Anda sebagai properti android.ndk.path .
mvn test jacoco:reportmvn checkstyle:check Pastikan kredensial pusat sonatype/maven Anda ada di settings.xml pengguna Anda.xml (biasanya ~/.m2/settings.xml ):
< servers >
< server >
< id >ossrh</ id >
< username >sonatype-username</ username >
< password >sonatype-password</ password >
</ server >
</ servers >Pada cabang non-master, jalankan perintah berikut. Ini akan meminta Anda untuk memasukkan nomor versi dan tag untuk versi baru, mendorong tag ke GitHub, dan menggunakan paket ke repositori Sonatype.
mvn release:clean release:prepare release:performTujuan Maven mungkin gagal karena bug di mana ia mencoba mengunggah file dua kali, tetapi rilis masih terjadi.
Selesaikan proses dengan membuat dan menggabungkan permintaan tarik untuk cabang baru di GitHub dan memperbarui catatan rilis dengan mengedit tag.
Untuk informasi tambahan tentang pelepasan, lihat http://maven.apache.org/maven-release/maven-release-plugin/
Hak Cipta 2021 SpokeStack, Inc.
Berlisensi di bawah lisensi Apache, versi 2.0 ("lisensi"); Anda tidak boleh menggunakan file ini kecuali sesuai dengan lisensi. Anda dapat memperoleh salinan lisensi di
http://www.apache.org/licenses/LICENSE-2.0
Kecuali diharuskan oleh hukum yang berlaku atau disepakati secara tertulis, perangkat lunak yang didistribusikan di bawah lisensi didistribusikan berdasarkan "sebagaimana adanya", tanpa jaminan atau ketentuan dalam bentuk apa pun, baik tersurat maupun tersirat. Lihat lisensi untuk bahasa spesifik yang mengatur izin dan batasan di bawah lisensi.