
SPOKESTACK เป็นโซลูชันแบบครบวงจรสำหรับอินเทอร์เฟซเสียงมือถือบน Android มันให้ปริศนาการประมวลผลคำพูดทุกชิ้นรวมถึงการตรวจจับกิจกรรมเสียงการตรวจจับคำเตือนการรู้จำเสียงพูดการทำความเข้าใจภาษาธรรมชาติ (NLU) และการสังเคราะห์เสียงพูด (TTS) ภายใต้การกำหนดค่าเริ่มต้น (บนอุปกรณ์ Android รุ่นใหม่) ทุกอย่างยกเว้น TTS เกิดขึ้นโดยตรงบนอุปกรณ์มือถือ - ไม่มีการสื่อสารกับคลาวด์หมายถึงผลลัพธ์ที่เร็วขึ้นและความเป็นส่วนตัวที่ดีขึ้น
และ Android ไม่ใช่แพลตฟอร์มเดียวที่รองรับ!
การสร้างบัญชีฟรีที่ spokestack.io ช่วยให้คุณฝึกอบรมรุ่น NLU ของคุณเองและทดสอบ TTS โดยไม่ต้องเพิ่มรหัสลงในแอปของคุณ เรายังสามารถฝึกฝนเสียงเวคและเสียง TTS ที่กำหนดเองให้คุณมั่นใจได้ว่าเสียงของแอพของคุณนั้นไม่เหมือนใครและน่าจดจำ
สำหรับการแนะนำสั้น ๆ อ่านต่อ แต่สำหรับคู่มือรายละเอียดเพิ่มเติมดูสิ่งต่อไปนี้:
หมายเหตุ : Spokestack เคยเป็นเจ้าภาพใน JCenter แต่เนื่องจากการประกาศหยุดการทำงานเราได้ย้ายการกระจายไปยัง Maven Central โปรดตรวจสอบให้แน่ใจว่าไฟล์ build.gradle ระดับรูทของคุณรวมถึง mavenCentral() ในบล็อก repositories เพื่อเข้าถึงเวอร์ชัน> = 11.0.2
เวอร์ชัน Android SDK ขั้นต่ำที่ระบุไว้ในรายการของ Spokestack คือ 8 เพราะนั่นคือทั้งหมดที่คุณควรต้องเรียกใช้การตรวจจับคำปลุกและการรู้จำเสียงพูด หากต้องการใช้คุณสมบัติอื่น ๆ ควรกำหนดเป้าหมายอย่างน้อย API Level 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 วินาที:
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 ในไดเรกทอรีแคชของแอปของคุณ อีกครั้งดูโครงการโครงกระดูกเพื่อตัวอย่างของการบีบอัดไฟล์เหล่านี้จากชุดสินทรัพย์ลงในไดเรกทอรีนี้
หากต้องการใช้คำว่า "SpokeStack" DEMO ให้ดาวน์โหลดรุ่น 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 ใช้ไมโครโฟนเพื่อฟังคำเวคของแอปของคุณเว้นแต่จะปิดใช้งาน WAKWOD WAWEWOR ซึ่งในกรณีนี้จะต้องเปิดใช้งาน ASR อื่น ควรหยุดท่อส่งเมื่อไม่จำเป็นต้องใช้ spokestack อีกต่อไป (หรือเมื่อแอปถูกระงับ) ไปยังทรัพยากรฟรีactivate()/deactivate() : เปิดใช้งาน/ปิดการใช้งาน ASR ซึ่งรับฟังและถอดความสิ่งที่ผู้ใช้พูดsynthesize(SynthesisRequest) : ส่งข้อความไปยังบริการคลาวด์ TTS ของ Spokestack เพื่อสังเคราะห์เป็นเสียง ภายใต้การกำหนดค่าเริ่มต้นเสียงนี้จะเล่นโดยอัตโนมัติเมื่อพร้อมใช้งาน 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 ยังสามารถระบุได้ในไฟล์ maven settings.xml ในพื้นที่ของคุณเป็นคุณสมบัติ android.ndk.path
mvn test jacoco:reportmvn checkstyle:check ตรวจสอบให้แน่ใจว่าข้อมูลประจำตัว Sonatype/Maven Central ของคุณอยู่ใน settings.xml ผู้ใช้ของคุณ xml (โดยปกติ ~/.m2/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/
ลิขสิทธิ์ 2021 Spokestack, Inc.
ได้รับใบอนุญาตภายใต้ใบอนุญาต Apache เวอร์ชัน 2.0 ("ใบอนุญาต"); คุณไม่สามารถใช้ไฟล์นี้ยกเว้นตามใบอนุญาต คุณอาจได้รับสำเนาใบอนุญาตที่
http://www.apache.org/licenses/LICENSE-2.0
เว้นแต่ว่ากฎหมายที่บังคับใช้หรือตกลงเป็นลายลักษณ์อักษรซอฟต์แวร์ที่แจกจ่ายภายใต้ใบอนุญาตจะถูกแจกจ่ายตาม "ตามพื้นฐาน" โดยไม่มีการรับประกันหรือเงื่อนไขใด ๆ ไม่ว่าจะโดยชัดแจ้งหรือโดยนัย ดูใบอนุญาตสำหรับภาษาเฉพาะที่ควบคุมการอนุญาตและข้อ จำกัด ภายใต้ใบอนุญาต