
Spokestack هو حل الكل في واحد للواجهات الصوتية المحمولة على Android. يوفر كل جزء من لغز معالجة الكلام ، بما في ذلك اكتشاف النشاط الصوتي ، والكشف عن الكلمات ، والتعرف على الكلام ، وفهم اللغة الطبيعية (NLU) ، وتوليف الكلام (TTS). تحت تكوينه الافتراضي (على أجهزة Android الأحدث) ، يحدث كل شيء باستثناء TTS مباشرة على الجهاز المحمول - لا يوجد اتصال مع السحابة يعني نتائج أسرع وخصوصية أفضل.
و Android ليس النظام الأساسي الوحيد الذي يدعمه!
يتيح لك إنشاء حساب مجاني على SPOKESTACK.IO تدريب نماذج NLU الخاصة بك واختبار TTS دون إضافة رمز إلى تطبيقك. يمكننا حتى تدريب صوت WakeWord و TTS المخصص لك ، مع التأكد من أن صوت تطبيقك فريد من نوعه ولا ينسى.
للحصول على مقدمة موجزة ، تابع القراءة ، ولكن للحصول على أدلة أكثر تفصيلاً ، راجع ما يلي:
ملاحظة : اعتادت شركة Spokestack استضافتها على JCenter ، ولكن منذ الإعلان عن توقفها ، نقلنا التوزيع إلى Maven Central. يرجى التأكد من أن ملف build.gradle على مستوى الجذر يتضمن mavenCentral() في كتلة repositories من أجل الوصول إلى الإصدارات> = 11.0.2.
إن الحد الأدنى من إصدار Android SDK المدرج في بيان Spokestack هو 8 لأن هذا كل ما يجب أن تحتاجه لتشغيل اكتشاف كلمات الاستيقاظ والتعرف على الكلام. لاستخدام ميزات أخرى ، من الأفضل استهداف مستوى 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 ثانية من الإعداد:
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" WakeWord ، قم بتنزيل نماذج TensorFlow Lite: Detect | تشفير | فلتر
إذا كنت لا تريد أن تهتم بذلك بعد ، فما عليك سوى تعطيل اكتشاف الكلمات و 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/
حقوق الطبع والنشر 2021 Spokestack ، Inc.
مرخصة بموجب ترخيص Apache ، الإصدار 2.0 ("الترخيص") ؛ لا يجوز لك استخدام هذا الملف إلا في الامتثال للترخيص. يمكنك الحصول على نسخة من الترخيص على
http://www.apache.org/licenses/LICENSE-2.0
ما لم يكن مطلوبًا بموجب القانون المعمول به أو الموافقة على الكتابة ، يتم توزيع البرامج الموزعة بموجب الترخيص على أساس "كما هي" ، دون ضمانات أو شروط من أي نوع ، إما صريحة أو ضمنية. راجع ترخيص الأذونات والقيود التي تحكم اللغة المحددة بموجب الترخيص.