
ตอบสนองปลั๊กอินดั้งเดิมสำหรับการเพิ่มเสียงโดยใช้ Spokestack ซึ่งรวมถึงการรู้จำเสียงคำพูดคำว่าและความเข้าใจภาษาธรรมชาติรวมถึงการสังเคราะห์ข้อความเพื่อพูดโดยใช้เสียง Spokestack
ใช้ NPM:
npm install --save react-native-spokestackหรือใช้เส้นด้าย:
yarn add react-native-spokestackจากนั้นทำตามคำแนะนำสำหรับแต่ละแพลตฟอร์มเพื่อเชื่อมโยง React-Native-Spokestack ไปยังโครงการของคุณ:
ก่อนอื่นให้เปิด XCode และไปที่โครงการ -> ข้อมูลเพื่อตั้งค่าเป้าหมายการปรับใช้ iOS เป็น 13.0 หรือสูงกว่า
นอกจากนี้ให้ตั้งค่าการปรับใช้เป็น 13.0 ภายใต้เป้าหมาย -> ข้อมูลทั่วไป -> ข้อมูลการปรับใช้
เมื่อ Flipper ได้รับการแนะนำให้รู้จักกับ Native Native เส้นทางการค้นหาห้องสมุดบางเส้นทางถูกตั้งค่าสำหรับ Swift มีปัญหาที่ยาวนานกับเส้นทางการค้นหาเริ่มต้นในโครงการ React Native เนื่องจากเส้นทางการค้นหาถูกเพิ่มเข้ามาสำหรับ Swift 5.0 ซึ่งป้องกันไม่ให้ไลบรารีดั้งเดิมอื่น ๆ ใช้ APIs เฉพาะที่มีอยู่ใน Swift 5.2 หรือใหม่กว่า SPOKESTACK-IOS การพึ่งพาการตอบสนองของปฏิกิริยา--สปริงแซคใช้ประโยชน์จาก APIs และ XCode เหล่านี้จะไม่สามารถสร้างได้
โชคดีที่การแก้ไขค่อนข้างง่าย ไปที่เป้าหมายของคุณ -> สร้างการตั้งค่าและค้นหา "เส้นทางการค้นหาไลบรารี"
ลบ ""$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)"" จากรายการ
ก่อนที่จะ pod install ให้แน่ใจว่าได้ทำการแก้ไขต่อไปนี้
React-Native-Spokestack ใช้ประโยชน์จาก API ที่ค่อนข้างใหม่เฉพาะใน iOS 13+ ตั้งค่าเป้าหมายการปรับใช้เป็น iOS 13 ที่ด้านบนของ PodFile ของคุณ:
platform :ios , '13.0' เราต้องใช้ use_frameworks! ใน podfile ของเราเพื่อสนับสนุนการพึ่งพาที่เขียนด้วย Swift
target 'SpokestackExample' do
use_frameworks!
#... สำหรับตอนนี้ use_frameworks! ไม่ทำงานกับ Flipper ดังนั้นเราจึงต้องปิดการใช้งาน Flipper ลบบรรทัดที่เกี่ยวข้องกับ Flipper ใน Podfile ของคุณ ใน React Native 0.63.2+ พวกเขามีลักษณะเช่นนี้:
# X Remove or comment out these lines X
# use_flipper!
# post_install do |installer|
# flipper_post_install(installer)
# end
# XX React Native 0.64.0 ทำลายโครงการใด ๆ โดยใช้ use_frameworks! ใน Podfiles ของพวกเขา
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับข้อผิดพลาดนี้โปรดดู Facebook/React-Native#31149
ในการแก้ปัญหาปัญหานี้เพิ่มสิ่งต่อไปนี้ลงใน PodFile ของคุณ:
# Moves 'Generate Specs' build_phase to be first for FBReactNativeSpec
post_install do | installer |
installer . pods_project . targets . each do | target |
if ( target . name &. eql? ( 'FBReactNativeSpec' ) )
target . build_phases . each do | build_phase |
if ( build_phase . respond_to? ( :name ) && build_phase . name . eql? ( '[CP-User] Generate Specs' ) )
target . build_phases . move ( build_phase , 0 )
end
end
end
end
end ลบโฟลเดอร์ podfile.lock และ pods ที่มีอยู่ของคุณเพื่อให้แน่ใจว่าไม่มีความขัดแย้งจากนั้นติดตั้ง PODs:
$ npx pod-installเพิ่มข้อมูลต่อไปนี้ในข้อมูลของคุณ PPLIST เพื่อเปิดใช้งานการอนุญาต
< key >NSMicrophoneUsageDescription</ key >
< string >This app uses the microphone to hear voice commands</ string >
< key >NSSpeechRecognitionUsageDescription</ key >
< string >This app uses speech recognition to process voice commands</ string > ในขณะที่ Flipper ทำงานเพื่อแก้ไขพ็อดของพวกเขาสำหรับ use_frameworks! เราต้องปิดการใช้งาน Flipper เราได้ลบการพึ่งพา Flipper จากฝักด้านบนแล้ว แต่ยังคงมีรหัสบางอย่างใน AppDelegate.m ที่นำเข้า Flipper มีสองวิธีในการแก้ไขปัญหานี้
-DFB_SONARKIT_ENABLED=1 จากแฟล็กในแอพตัวอย่างของเราเราได้ทำตัวเลือก 1 และทิ้งไว้ในรหัส Flipper ในกรณีที่พวกเขาทำงานได้ในอนาคตและเราสามารถเพิ่มกลับมาได้
# import < AVFoundation/AVFoundation.h > ตั้งค่าหมวดหมู่เสียง มีการกำหนดค่าหลายอย่างที่ใช้งานได้
ต่อไปนี้เป็นข้อเสนอแนะที่ควรพอดีกับกรณีการใช้งานส่วนใหญ่:
- ( BOOL )application:(UIApplication *)application didFinishLaunchingWithOptions:( NSDictionary *)launchOptions
{
AVAudioSession *session = [AVAudioSession sharedInstance ];
[session setCategory: AVAudioSessionCategoryPlayAndRecord
mode: AVAudioSessionModeDefault
options: AVAudioSessionCategoryOptionDefaultToSpeaker | AVAudioSessionCategoryOptionAllowAirPlay | AVAudioSessionCategoryOptionAllowBluetoothA2DP | AVAudioSessionCategoryOptionAllowBluetooth
error: nil ];
[session setActive: YES error: nil ];
// ... การใช้งานตัวอย่างใช้ ASRS ที่จัดเตรียมไว้ ( AndroidSpeechRecognizer และ AppleSpeechRecognizer ) อย่างไรก็ตาม AndroidSpeechRecognizer ไม่สามารถใช้ได้กับอุปกรณ์ 100% หากแอปของคุณรองรับอุปกรณ์ที่ไม่มีการจดจำคำพูดในตัวให้ใช้ SPOKESTACK ASR แทนโดยการตั้งค่า profile เป็นโปรไฟล์ Spokestack โดยใช้ profile Prop
ดูเอกสาร ASR ของเราสำหรับข้อมูลเพิ่มเติม
// ...
ext {
// Set the minimum SDK to 24.
// React Native 0.64+ sets version 21.
// If you prefer to leave the minimum SDK at 21,
// another option is to set this to 21, but
// also set android.enableDexingArtifactTransform=false
// in your top-level gradle.properties.
// See https://github.com/google/ExoPlayer/issues/6801#issuecomment-574089568
minSdkVersion = 24
// ...
dependencies {
// Minimium gradle is 3.0.1+
// The latest React Native already has this
classpath( " com.android.tools.build:gradle:4.2.1 " ) เพิ่มสิทธิ์ที่จำเป็นใน AndroidManifest.xml ของคุณ การอนุญาตแรกมักจะมีอยู่แล้ว ที่สองเป็นสิ่งจำเป็นสำหรับการใช้ไมโครโฟน
<!-- For TTS -->
< uses-permission android : name = " android.permission.INTERNET " />
<!-- For wakeword and ASR -->
< uses-permission android : name = " android.permission.RECORD_AUDIO " />
<!-- For ensuring no downloads happen over cellular, unless forced -->
< uses-permission android : name = " android.permission.ACCESS_NETWORK_STATE " /> การอนุญาต record_audio นั้นพิเศษโดยที่จะต้องมีการระบุไว้ใน AndroidManifest.xml และร้องขอเมื่อเวลาผ่านไป มีสองสามวิธีในการจัดการสิ่งนี้ (React-Native-Spokestack ไม่ได้ทำเพื่อคุณ):
ในขณะที่ iOS จะนำกล่องโต้ตอบการอนุญาตขึ้นมาโดยอัตโนมัติสำหรับการอนุญาตใด ๆ ที่จำเป็นคุณต้องทำด้วยตนเองใน Android
React Native มีโมดูลสำหรับสิ่งนี้แล้ว ดูการอนุญาตของ React Native สำหรับข้อมูลเพิ่มเติม
เริ่มต้นใช้ Spokestack หรือตรวจสอบบทเรียนเชิงลึกของเราเกี่ยวกับ ASR, NLU และ TTS ตรวจสอบให้แน่ใจว่าได้ดูตำราอาหารสำหรับการแก้ไขปัญหาที่พบบ่อย
แอปตัวอย่างการทำงานรวมอยู่ใน repo นี้ใน example/ โฟลเดอร์
import Spokestack from 'react-native-spokestack'
import { View , Button , Text } from 'react-native'
function App ( ) {
const [ listening , setListening ] = useState ( false )
const onActivate = ( ) => setListening ( true )
const onDeactivate = ( ) => setListening ( false )
const onRecognize = ( { transcript } ) => console . log ( transcript )
useEffect ( ( ) => {
Spokestack . addEventListener ( 'activate' , onActivate )
Spokestack . addEventListener ( 'deactivate' , onDeactivate )
Spokestack . addEventListener ( 'recognize' , onRecognize )
Spokestack . initialize (
process . env . SPOKESTACK_CLIENT_ID ,
process . env . SPOKESTACK_CLIENT_SECRET
)
// This example starts the Spokestack pipeline immediately,
// but it could be delayed until after onboarding or other
// conditions have been met.
. then ( Spokestack . start )
return ( ) => {
Spokestack . removeAllListeners ( )
}
} , [ ] )
return (
< View >
< Button onClick = { ( ) => Spokestack . activate ( ) } title = "Listen" />
< Text > { listening ? 'Listening...' : 'Idle' } </ Text >
</ View >
)
} ในการรวมไฟล์โมเดลในแอพของคุณ (แทนที่จะดาวน์โหลดจาก CDN) คุณต้องเพิ่มส่วนขยายที่จำเป็นเพื่อให้ไฟล์สามารถรวมไฟล์ได้โดย Babel ในการทำเช่นนี้แก้ไข metro.config.js ของคุณ
const defaults = require ( 'metro-config/src/defaults/defaults' )
module . exports = {
resolver : {
assetExts : defaults . assetExts . concat ( [ 'tflite' , 'txt' , 'sjson' ] )
}
}จากนั้นรวมไฟล์โมเดลโดยใช้วัตถุต้นทาง:
Spokestack . initialize ( clientId , clientSecret , {
wakeword : {
filter : require ( './filter.tflite' ) ,
detect : require ( './detect.tflite' ) ,
encode : require ( './encode.tflite' )
} ,
nlu : {
model : require ( './nlu.tflite' ) ,
vocab : require ( './vocab.txt' ) ,
// Be sure not to use "json" here.
// We use a different extension (.sjson) so that the file is not
// immediately parsed as json and instead
// passes a require source object to Spokestack.
// The special extension is only necessary for local files.
metadata : require ( './metadata.sjson' )
}
} ) สิ่งนี้ไม่จำเป็น ผ่าน URL ระยะไกลไปยังตัวเลือกการกำหนดค่าเดียวกันและไฟล์จะถูกดาวน์โหลดและแคชเมื่อโทรครั้งแรก initialize
ดูคู่มือการสนับสนุนเพื่อเรียนรู้วิธีการมีส่วนร่วมในที่เก็บและเวิร์กโฟลว์การพัฒนา
▸ เริ่มต้น ( clientId , clientSecret , config? ): Promise void
เริ่มต้นไปป์ไลน์คำพูด จำเป็นสำหรับวิธีอื่นทั้งหมด
2 args แรกเป็นข้อมูลประจำตัวของคุณที่ให้บริการฟรีจาก https://spokestack.io หลีกเลี่ยงการเข้ารหัสเหล่านี้ในแอพของคุณ มีหลายวิธีในการรวมตัวแปรสภาพแวดล้อมในรหัสของคุณ
การใช้ process.env: https://babeljs.io/docs/en/babel-plugin-transform-inline-environment-variables/
การใช้ไฟล์. env ในเครื่องที่ถูกละเว้นโดย Git: https://github.com/goatandsheep/react-native-dotenv https://github.com/luggit/react-native-config
ดู SPOKESTACKCONFIG สำหรับตัวเลือกที่มีอยู่ทั้งหมด
example
import Spokestack from 'react-native-spokestack'
// ...
await Spokestack . initialize ( process . env . CLIENT_ID , process . env . CLIENT_SECRET , {
pipeline : {
profile : Spokestack . PipelineProfile . PTT_NATIVE_ASR
}
} ) | ชื่อ | พิมพ์ |
|---|---|
clientId | string |
clientSecret | string |
config? | [SpokestackConfig](#SpokestackConfig) |
Promise void
index.ts: 64
▸ ทำลาย (): Promise void
ทำลายท่อส่งพูดลบผู้ฟังทั้งหมดและปลดปล่อยทรัพยากรทั้งหมด สิ่งนี้สามารถเรียกได้ก่อนที่จะเริ่มต้นท่อใหม่ สถานที่ที่ดีในการเรียกสิ่งนี้อยู่ใน componentWillUnmount
example
componentWillUnmount ( ) {
Spokestack . destroy ( )
} Promise void
index.ts: 81
▸ เริ่มต้น (): Promise void
เริ่มต้นไปป์ไลน์คำพูด ท่อพูดเริ่มต้นในสถานะ deactivate
example
import Spokestack from 'react-native-spokestack`
// ...
Spokestack . initialize ( process . env . CLIENT_ID , process . env . CLIENT_SECRET )
. then ( Spokestack . start ) Promise void
index.ts: 96
▸ หยุด (): Promise void
หยุดท่อพูด สิ่งนี้จะหยุด ASR, VAD และ WAKEWORD ได้อย่างมีประสิทธิภาพ
example
import Spokestack from 'react-native-spokestack`
// ...
await Spokestack . stop ( ) Promise void
index.ts: 110
▸ เปิดใช้งาน (): Promise void
เปิดใช้งานท่อพูดด้วยตนเอง สิ่งนี้จำเป็นเมื่อใช้โปรไฟล์ PTT โปรไฟล์ VAD ยังสามารถเปิดใช้งาน ASR ได้โดยไม่จำเป็นต้องเรียกใช้วิธีนี้
example
import Spokestack from 'react-native-spokestack`
// ...
< Button title = "Listen" onClick = { ( ) => Spokestack . activate ( ) } /> Promise void
index.ts: 126
▸ ปิดการใช้งาน (): Promise void
ปิดการใช้งานไปป์ไลน์คำพูด หากโปรไฟล์มี wakeword ไปป์ไลน์จะกลับไปฟังคำเตือน หาก VAD เปิดใช้งานไปป์ไลน์สามารถเปิดใช้งานได้โดยไม่ต้องเปิดใช้งาน ()
example
import Spokestack from 'react-native-spokestack`
// ...
< Button title = "Stop listening" onClick = { ( ) => Spokestack . deactivate ( ) } /> Promise void
index.ts: 142
▸ สังเคราะห์ ( input , format? , voice? ): Promise string
สังเคราะห์ข้อความบางส่วนเป็นคำพูดส่งคืน Promise<string> โดยที่สตริงเป็น URL สำหรับ MPEG ที่เล่นได้
ขณะนี้มีเพียงเสียงฟรีเพียงอันเดียว ("ผู้สาธิต-ชาย") เสียงสามารถเปลี่ยนแปลงได้หากคุณสร้างเสียงที่กำหนดเองโดยใช้บัญชีผู้ผลิต Spokestack ดู https://spokestack.io/pricing#maker
example
const url = await Spokestack . synthesize ( 'Hello world' )
play ( url ) | ชื่อ | พิมพ์ |
|---|---|
input | string |
format? | [TTSFormat](#TTSFormat) |
voice? | string |
Promise string
index.ts: 158
▸ พูด ( input , format? , voice? ): Promise void
สังเคราะห์ข้อความบางส่วนเป็นคำพูดจากนั้นเล่นเสียงผ่านระบบเสียงเริ่มต้นทันที การจัดการเซสชันเสียงอาจมีความซับซ้อนมากและเราขอแนะนำให้ใช้ห้องสมุด RN ที่มุ่งเน้นไปที่เสียงสำหรับอะไรมากกว่าการเล่นที่ง่ายมาก
ขณะนี้มีเพียงเสียงฟรีเพียงอันเดียว ("ผู้สาธิต-ชาย")
example
await Spokestack . speak ( 'Hello world' ) | ชื่อ | พิมพ์ |
|---|---|
input | string |
format? | [TTSFormat](#TTSFormat) |
voice? | string |
Promise void
index.ts: 174
▸ จำแนก ( utterance ): Promise SpokestackNLUResult
จำแนกคำพูดโดยใช้รูปแบบการทำความเข้าใจภาษาธรรมชาติที่มีเจตนา/สล็อตผ่านไปยัง spokestack.initialize () ดู https://www.spokestack.io/docs/concepts/nlu สำหรับข้อมูลเพิ่มเติม
example
const result = await Spokestack . classify ( 'hello' )
// Here's what the result might look like,
// depending on the NLU model
console . log ( result . intent ) // launch | ชื่อ | พิมพ์ |
|---|---|
utterance | string |
Promise SpokestackNLUResult
index.ts: 190
▸ isinitialized (): Promise boolean
ส่งคืนไม่ว่าจะเริ่มต้นจากสโป้ค์
example
console . log ( `isInitialized: ${ await Spokestack . isInitialized ( ) } ` ) Promise boolean
index.ts: 199
▸ istarted (): Promise boolean
ส่งคืนไม่ว่าจะเริ่มต้นไปป์ไลน์คำพูด
example
console . log ( `isStarted: ${ await Spokestack . isStarted ( ) } ` ) Promise boolean
index.ts: 208
▸ isactivated (): Promise boolean
ส่งคืนไม่ว่าจะเปิดใช้งานไปป์ไลน์คำพูดหรือไม่
example
console . log ( `isActivated: ${ await Spokestack . isActivated ( ) } ` ) Promise boolean
index.ts: 217
• ความมั่นใจ : number
ตัวเลขจาก 0 ถึง 1 แสดงถึงความเชื่อมั่นของโมเดล NLU ในความตั้งใจที่ได้รับการยอมรับซึ่ง 1 แสดงถึงความมั่นใจอย่างแท้จริง
types.ts: 115
• เจตนา : string
ความตั้งใจตามการแข่งขันที่จัดทำโดยโมเดล NLU
types.ts: 113
• สล็อต : SpokestackNLUSlots
ข้อมูลที่เกี่ยวข้องกับความตั้งใจที่จัดทำโดยโมเดล NLU
types.ts: 117
▪ [คีย์: string ]: SpokestackNLUSlot
• rawvalue : string
ค่าสตริงดั้งเดิมของสล็อตที่รับรู้ในคำพูดของผู้ใช้
types.ts: 104
• ประเภท : string
ประเภทของสล็อตตามที่กำหนดไว้ในข้อมูลเมตาของโมเดล
types.ts: 100
• ค่า : any
ค่าที่แยกวิเคราะห์ (พิมพ์) ของสล็อตที่รับรู้ในคำพูดของผู้ใช้
types.ts: 102
▸ addeventListener ( eventType , listener , context? ): EmitterSubscription
ผูกกับเหตุการณ์ใด ๆ ที่ปล่อยออกมาโดยไลบรารีพื้นเมืองดูเหตุการณ์สำหรับรายการของเหตุการณ์ที่มีอยู่ทั้งหมด
example
useEffect ( ( ) => {
const listener = Spokestack . addEventListener ( 'recognize' , onRecognize )
// Unsubsribe by calling remove when components are unmounted
return ( ) => {
listener . remove ( )
}
} , [ ] ) | ชื่อ | พิมพ์ | คำอธิบาย |
|---|---|---|
eventType | string | ชื่อของเหตุการณ์ที่เรากำลังลงทะเบียนผู้ฟัง |
listener | ( event : any ) => void | ฟังก์ชันฟัง |
context? | Object | บริบทของผู้ฟัง |
EmitterSubscription
index.ts: 237
▸ removeEventListener ( eventType , listener ): void
ลบฟังเหตุการณ์
example
Spokestack . removeEventListener ( 'recognize' , onRecognize ) | ชื่อ | พิมพ์ | คำอธิบาย |
|---|---|---|
eventType | string | ชื่อของเหตุการณ์ที่จะปล่อยออกมา |
listener | (... args : any []) => any | ฟังก์ชั่นที่จะเรียกใช้เมื่อมีการปล่อยเหตุการณ์ที่ระบุ |
void
index.ts: 253
▸ RemoveAlLlisteners (): void
ลบผู้ฟังที่มีอยู่
example
Spokestack . removeAllListeners ( ) void
index.ts: 265
รองรับสามรูปแบบเมื่อใช้ TTS spokestack ข้อความดิบ, ssml และ markdown คำพูด ดู https://www.speechmarkdown.org/ หากไม่คุ้นเคยกับคำพูด IPA คาดว่าจะใช้ SSML หรือคำพูด markdown
• SpeechMarkdown = 2
types.ts: 73
• ssml = 1
types.ts: 72
• ข้อความ = 0
types.ts: 71
ใช้ addEventListener() , removeEventListener() และ removeAllListeners() เพื่อเพิ่มและลบตัวจัดการเหตุการณ์ กิจกรรมทั้งหมดมีอยู่ในทั้ง iOS และ Android
| ชื่อ | ข้อมูล | คำอธิบาย |
|---|---|---|
| จำได้ | { transcript: string } | ยิงเมื่อใดก็ตามที่การจดจำคำพูดเสร็จสมบูรณ์ |
| partial_recognize | { transcript: string } | ยิงเมื่อใดก็ตามที่การถอดเสียงเปลี่ยนระหว่างการรู้จำเสียงพูด |
| เริ่ม | null | ถูกไล่ออกเมื่อไปป์ไลน์คำพูดเริ่มต้นขึ้น (ซึ่งเริ่มฟังคำเตือนหรือเริ่ม VAD) |
| หยุด | null | ถูกไล่ออกเมื่อไปป์ไลน์คำพูดหยุด |
| เปิดใช้งาน | null | ยิงเมื่อท่อพูดเปิดใช้งานไม่ว่าจะผ่าน VAD, wakeword หรือเมื่อโทร .activate() |
| ปิดใช้งาน | null | ถูกไล่ออกเมื่อการพูดไปป์ไลน์ปิดการใช้งาน |
| เล่น | { playing: boolean } | ยิงเมื่อการเล่น TTS เริ่มต้นและหยุด ดูฟังก์ชั่น speak() |
| การหมดเวลา | null | ถูกไล่ออกเมื่อท่อส่งออกเวลาออกเนื่องจากขาดการรับรู้ |
| ติดตาม | { message: string } | ถูกไล่ออกเพื่อติดตามข้อความ คำย้ำถูกกำหนดโดยตัวเลือก traceLevel |
| ข้อผิดพลาด | { error: string } | ถูกไล่ออกเมื่อมีข้อผิดพลาดใน Spokestack |
เมื่อเหตุการณ์ข้อผิดพลาดถูกเรียกใช้สัญญาใด ๆ ที่มีอยู่จะถูกปฏิเสธ
นี่คือตัวเลือกการกำหนดค่าที่สามารถส่งผ่านไปยัง Spokestack.initialize(_, _, spokestackConfig) ไม่จำเป็นต้องมีตัวเลือกใน SpokestackConfig
SPOKESTACKCONFIG มีโครงสร้างดังต่อไปนี้:
interface SpokestackConfig {
/**
* This option is only used when remote URLs are passed to fields such as `wakeword.filter`.
*
* Set this to true to allow downloading models over cellular.
* Note that `Spokestack.initialize()` will still reject the promise if
* models need to be downloaded but there is no network at all.
*
* Ideally, the app will include network handling itself and
* inform the user about file downloads.
*
* Default: false
*/
allowCellularDownloads ?: boolean
/**
* Wakeword, Keyword, and NLU model files are cached internally.
* Set this to true whenever a model is changed
* during development to refresh the internal model cache.
*
* This affects models passed with `require()` as well
* as models downloaded from remote URLs.
*
* Default: true in dev mode, false otherwise
*
* **Important:** By default, apps in production will
* cache models to avoid downloading them every time
* the app is launched. The side-effect of this optimization
* is that if models change on the CDN, apps will
* not pick up those changes–unless the app were reinstalled.
* We think this is a fair trade-off, but set this to `true`
* if you prefer to download the models every time the app
* is launched.
*/
refreshModels ?: boolean
/**
* This controls the log level for the underlying native
* iOS and Android libraries.
* Also add a `"trace"` event listener to get trace events.
* See the TraceLevel enum for values.
*/
traceLevel ?: TraceLevel
/**
* Most of these options are advanced aside from "profile"
*/
pipeline ?: PipelineConfig
/** Only needed if using Spokestack.classify */
nlu ?: NLUConfig
/**
* Only required for wakeword
* Most options are advanced aside from
* filter, encode, and decode for specifying config files.
*/
wakeword ?: WakewordConfig
/**
* Only required for the keyword recognizer
* Most options are advanced aside from
* filter, encode, decode, metadata, and classes.
*/
keyword ?: KeywordConfig
} จำนวนการบันทึกที่จะแสดงจำนวนที่ต่ำกว่าหมายถึงบันทึกมากขึ้น
• Debug = 10
types.ts: 58
• ข้อมูล = 30
Types.ts: 60
• ไม่มี = 100
types.ts: 61
• perf = 20
types.ts: 59
โปรไฟล์ไปป์ไลน์ตั้งค่าไปป์ไลน์คำพูดตามความต้องการของคุณ
• ptt_native_asr = 2
การจดจำคำพูดอัตโนมัติของ Apple/Android เปิดขึ้นเมื่อมีการใช้งานไปป์ไลน์คำพูด นี่น่าจะเป็นโปรไฟล์ที่พบบ่อยมากขึ้นเมื่อไม่ได้ใช้ Wakeword
types.ts: 24
• ptt_spokestack_asr = 5
การจดจำคำพูดอัตโนมัติ Spokestack เปิดอยู่เมื่อไปป์ไลน์คำพูด นี่น่าจะเป็นโปรไฟล์ที่พบบ่อยมากขึ้นเมื่อไม่ได้ใช้ Wakeword แต่เป็นที่ต้องการของ Spokestack ASR
types.ts: 42
• tflite_wakeword_keyword = 6
คำศัพท์ Tflite Wake ที่ไวต่อ vad-sensitive เปิดใช้
types.ts: 46
• tflite_wakeword_native_asr = 0
ตั้งค่า WAKEWOR และใช้ Apple/Android ASR ในท้องถิ่น โปรดทราบว่า wakeword.filter, wakeword.encode และ wakeword.detect เป็นสิ่งจำเป็นหากมีการใช้โปรไฟล์ wakeword ใด ๆ
types.ts: 12
• TFLITE_WAKEWORD_SPOKESTACK_ASR = 3
ตั้งค่า Wakeword และใช้ Spokestack ASR ระยะไกล โปรดทราบว่า wakeword.filter, wakeword.encode และ wakeword.detect เป็นสิ่งจำเป็นหากมีการใช้โปรไฟล์ wakeword ใด ๆ
types.ts: 30
• vad_keyword_asr = 7
VAD-Triggered TFLITE MEYDROMIDIZER
Types.ts: 50
• vad_native_asr = 1
Apple/Android การรู้จำเสียงพูดอัตโนมัติเปิดอยู่เมื่อการตรวจจับเสียงที่ใช้งานอยู่
types.ts: 17
• vad_spokestack_asr = 4
Spokestack การรู้จำเสียงพูดอัตโนมัติเปิดขึ้นเมื่อการตรวจจับเสียงที่ใช้งานอยู่
types.ts: 35
• agccompressiongaindb Optional : number
advanced
Android เท่านั้นสำหรับ AcousticGainControl
เป้าหมายระดับเสียงสูงสุดใน -DB เพื่อรักษาสูงสุด -9dB กำหนดค่า 9
types.ts: 192
• AgctargetLeveldbfs Optional : number
advanced
Android เท่านั้นสำหรับ AcousticGainControl
อัตราการบีบอัดช่วงไดนามิกใน DBFS
Types.ts: 200
• Annspolicy Optional : "aggressive" | "very-aggressive" | "mild" | "medium"
advanced
Android-only สำหรับ acousticnoisesuppressor
นโยบายเสียง
types.ts: 183
• bufferwidth Optional : number
advanced
ความกว้างบัฟเฟอร์ที่ใช้กับ framewidth เพื่อกำหนดขนาดบัฟเฟอร์
types.ts: 155
• framewidth Optional : number
advanced
ความกว้างกรอบคำพูดใน MS
types.ts: 149
• โปรไฟล์ Optional : PipelineProfile
โปรไฟล์เป็นคอลเลกชันของการกำหนดค่าทั่วไปสำหรับขั้นตอนไปป์ไลน์
หากไม่มีการตั้งค่าโปรไฟล์อย่างชัดเจน Spokestack จะกำหนดโปรไฟล์เริ่มต้นที่เหมาะสมตามการกำหนดค่าที่ส่งผ่านไปยัง Spokestack.initialize() :
หากตั้งค่าไฟล์ config wakeword (และการกำหนดค่าคำหลักไม่ได้) ค่าเริ่มต้นจะถูกตั้งค่าเป็น TFLITE_WAKEWORD_NATIVE_ASR
หากมีการตั้งค่าไฟล์กำหนดค่าคำหลัก (และการกำหนดค่า wakeword ไม่ได้) ค่าเริ่มต้นจะถูกตั้งค่าเป็น VAD_KEYWORD_ASR
หากมีการตั้งค่าทั้งไฟล์การกำหนดค่า WAWWORD และคำหลักค่าเริ่มต้นจะถูกตั้งค่าเป็น TFLITE_WAKEWORD_KEYWORD
มิฉะนั้นค่าเริ่มต้นคือ PTT_NATIVE_ASR
types.ts: 139
• ตัวอย่าง Optional : number
อัตราการสุ่มตัวอย่างเสียงใน Hz
types.ts: 143
• Optional VadfallDelay : number
advanced
ความยาวการตรวจจับที่ลดลงใน MS; ค่านี้กำหนดจำนวนตัวอย่างเชิงลบที่ต้องได้รับเพื่อพลิกเครื่องตรวจจับเป็นลบ
types.ts: 166
• Vadmode Optional : "quality" | "low-bitrate" | "aggressive" | "very-aggressive"
โหมดเครื่องตรวจจับกิจกรรมเสียง
types.ts: 159
• Vadrisedelay Optional : number
advanced
Android เท่านั้น
ความยาวการตรวจจับที่เพิ่มขึ้นตามความยาวใน MS; ค่านี้กำหนดจำนวนตัวอย่างบวกที่จะได้รับเพื่อพลิกเครื่องตรวจจับเป็นบวก
types.ts: 175
• ข้อมูลเมตา : string | number
ไฟล์ JSON สำหรับข้อมูลเมตา NLU หากระบุโมเดลและคำศัพท์ก็ต้องใช้
ฟิลด์นี้ยอมรับค่า 2 ประเภท
require หรือ import (เช่น metadata: require('./metadata.sjson') ) สำคัญ: ส่วนขยายพิเศษจะใช้สำหรับไฟล์เมตาดาต้าในท้องถิ่น ( .sjson ) เมื่อใช้ require หรือ import ดังนั้นไฟล์จะไม่แยกวิเคราะห์เมื่อรวม แต่นำเข้าแทนที่จะเป็นวัตถุแหล่งที่มาแทน สิ่งนี้ทำให้ไฟล์ถูกอ่านและแยกวิเคราะห์โดยไลบรารีดั้งเดิมแทน
types.ts: 223
• รุ่น : string | number
โมเดล NLU Tensorflow-Lite หากระบุเมทาดาทาและคำศัพท์ก็จำเป็นเช่นกัน
ฟิลด์นี้ยอมรับค่า 2 ประเภท
require หรือ import (เช่น model: require('./nlu.tflite') )) types.ts: 211
• คำศัพท์ : string | number
ไฟล์ txt ที่มีคำศัพท์ NLU หากระบุโมเดลและข้อมูลเมตาก็จำเป็นเช่นกัน
ฟิลด์นี้ยอมรับค่า 2 ประเภท
require หรือ import (เช่น vocab: require('./vocab.txt') )) types.ts: 231
• InputLength Optional : number
types.ts: 244
• ตรวจจับ : string | number
โมเดล "ตรวจจับ" Tensorflow-Lite หากระบุตัวกรองและการเข้ารหัสก็จำเป็นเช่นกัน
ฟิลด์นี้ยอมรับค่า 2 ประเภท
require หรือ import (เช่น detect: require('./detect.tflite') ))โมเดล ENCODE ใช้เพื่อดำเนินการแต่ละขั้นตอนอัตโนมัติเหนือเฟรม MEL; อินพุตของมันควรมีรูปร่าง [ความยาวเมล, mel-width] และเอาต์พุตของมัน [ENCODE-WIDTH] โดยมีสถานะอินพุต/เอาต์พุตสถานะเพิ่มเติม [สถานะความกว้าง]
types.ts: 272
• เข้ารหัส : string | number
รุ่น "เข้ารหัส" Tensorflow-Lite หากระบุตัวกรองและการตรวจจับก็จำเป็นเช่นกัน
ฟิลด์นี้ยอมรับค่า 2 ประเภท
require หรือ import (เช่น encode: require('./encode.tflite') ))อินพุตของมันควรมีรูปร่าง [ความยาวเข้ารหัสความกว้างเข้ารหัส] และเอาต์พุตของมัน
types.ts: 283
• ตัวกรอง : string | number
รุ่น "ตัวกรอง" Tensorflow-Lite หากระบุให้ตรวจจับและเข้ารหัส
ฟิลด์นี้ยอมรับค่า 2 ประเภท
require หรือ import (เช่น filter: require('./filter.tflite') ))โมเดลตัวกรองใช้ในการคำนวณเฟรม MEL spectrogram จาก STFT เชิงเส้น อินพุตควรมีรูปร่าง [FFT-Width] และเอาต์พุต [Mel-Width]
types.ts: 260
• ActiveMax Optional : number
advanced
ความยาวสูงสุดของการเปิดใช้งานในมิลลิวินาทีใช้ในการปิดการเปิดใช้งาน
types.ts: 373
• activemin Optional : number
advanced
ความยาวต่ำสุดของการเปิดใช้
types.ts: 366
• requesttimeout Optional : number
iOS เท่านั้น
ระยะเวลาที่จะอนุญาตให้มีการร้องขอ Apple ASR ในมิลลิวินาที Apple มีขีด จำกัด ที่ไม่มีเอกสาร 60000ms ต่อคำขอ
types.ts: 380
• RMSALPHA Optional : number
advanced Android เท่านั้น
อัตราการอัปเดตค่าเฉลี่ยเคลื่อนที่แบบเอ็กซ์โปเนนเชียล (EWMA) สำหรับพลังงานสัญญาณ RMS ปัจจุบัน (0 สำหรับ NO RMS Normalization)
types.ts: 397
• RMStarget Optional : number
advanced Android เท่านั้น
พลังงานเชิงเส้นเชิงเส้นที่ต้องการค่าเฉลี่ยสัญญาณสัญญาณกำลังสอง (RMS) ซึ่งใช้สำหรับการทำให้เป็นปกติของสัญญาณและควรปรับให้เข้ากับเป้าหมาย RMS ที่ใช้ในระหว่างการฝึกอบรม
types.ts: 389
• WAKEDERS Optional : string | string []
iOS เท่านั้น
อาร์เรย์ที่สั่งซื้อหรือรายการคีย์เวิร์ด wakeword ที่คั่นด้วยเครื่องหมายจุลภาคเฉพาะเมื่อไม่ผ่านตัวกรองตรวจจับและเข้ารหัสเส้นทาง
types.ts: 404
• ตรวจจับ : string | number
โมเดล "ตรวจจับ" Tensorflow-Lite หากระบุตัวกรองและการเข้ารหัสก็จำเป็นเช่นกัน
ฟิลด์นี้ยอมรับค่า 2 ประเภท
require หรือ import (เช่น detect: require('./detect.tflite') ))โมเดล ENCODE ใช้เพื่อดำเนินการแต่ละขั้นตอนอัตโนมัติเหนือเฟรม MEL; อินพุตของมันควรมีรูปร่าง [ความยาวเมล, mel-width] และเอาต์พุตของมัน [ENCODE-WIDTH] โดยมีสถานะอินพุต/เอาต์พุตสถานะเพิ่มเติม [สถานะความกว้าง]
types.ts: 272
• เข้ารหัส : string | number
รุ่น "เข้ารหัส" Tensorflow-Lite หากระบุตัวกรองและการตรวจจับก็จำเป็นเช่นกัน
ฟิลด์นี้ยอมรับค่า 2 ประเภท
require หรือ import (เช่น encode: require('./encode.tflite') ))อินพุตของมันควรมีรูปร่าง [ความยาวเข้ารหัสความกว้างเข้ารหัส] และเอาต์พุตของมัน
types.ts: 283
• ตัวกรอง : string | number
รุ่น "ตัวกรอง" Tensorflow-Lite หากระบุให้ตรวจจับและเข้ารหัส
ฟิลด์นี้ยอมรับค่า 2 ประเภท
require หรือ import (เช่น filter: require('./filter.tflite') ))โมเดลตัวกรองใช้ในการคำนวณเฟรม MEL spectrogram จาก STFT เชิงเส้น อินพุตควรมีรูปร่าง [FFT-Width] และเอาต์พุต [Mel-Width]
types.ts: 260
จำเป็นต้องใช้ metadata หรือ classes และพวกเขาเป็นพิเศษร่วมกัน
• ข้อมูลเมตา : string | number
ไฟล์ JSON สำหรับข้อมูลเมตาคำหลัก จำเป็นหากไม่ได้ระบุ keyword.classes
ฟิลด์นี้ยอมรับค่า 2 ประเภท
require หรือ import (เช่น metadata: require('./metadata.sjson') ) สำคัญ: ส่วนขยายพิเศษจะใช้สำหรับไฟล์เมตาดาต้าในท้องถิ่น ( .sjson ) เมื่อใช้ require หรือ import ดังนั้นไฟล์จะไม่แยกวิเคราะห์เมื่อรวม แต่นำเข้าแทนที่จะเป็นวัตถุแหล่งที่มาแทน สิ่งนี้ทำให้ไฟล์ถูกอ่านและแยกวิเคราะห์โดยไลบรารีดั้งเดิมแทน
types.ts: 424
• คลาส : string | string []
รายการที่คั่นด้วยเครื่องหมายจุลภาคหรืออาร์เรย์ที่สั่งซื้อของชื่อคลาสสำหรับคำหลัก ชื่อที่สอดคล้องกับคลาสที่เป็นไปได้มากที่สุดจะถูกส่งกลับในฟิลด์การถอดเสียงเมื่อมีการเพิ่มเหตุการณ์การรับรู้ จำเป็นหากไม่ได้ระบุ keyword.metadata
types.ts: 434
คุณสมบัติเหล่านี้สามารถส่งผ่านไปยังวัตถุ wakeword หรือ keyword COFFING แต่จะไม่ใช้ร่วมกัน
• encodelength Optional : number
advanced
ความยาวของหน้าต่างเลื่อนของเอาต์พุตตัวเข้ารหัสที่ใช้เป็นอินพุตไปยังตัวจําแนก
types.ts: 293
• encodewidth Optional : number
advanced
ขนาดของเอาต์พุต encoder ในหน่วยเวกเตอร์
types.ts: 299
• FFTHOPLENGTH Optional number
advanced
ระยะเวลาในการข้ามทุกครั้งที่คำนวณ STFT ที่ทับซ้อนกันเป็นมิลลิวินาที
types.ts: 322
• fftwindowsize Optional : number
advanced
ขนาดของหน้าต่างสัญญาณที่ใช้ในการคำนวณ STFT ในจำนวนตัวอย่าง - ควรเป็นพลังของ 2 เพื่อประสิทธิภาพสูงสุด
types.ts: 306
• Optional fftwindowtype : string
advanced
Android เท่านั้น
ชื่อของฟังก์ชัน windowing ที่จะใช้กับแต่ละเฟรมเสียงก่อนคำนวณ STFT; ปัจจุบันมีการรองรับหน้าต่าง "Hann"
types.ts: 315
• melframelength Optional : number
advanced
ระยะเวลาในการข้ามทุกครั้งที่คำนวณ STFT ที่ทับซ้อนกันเป็นมิลลิวินาที
types.ts: 329
• melframewidth Optional : number
advanced
ขนาดของแต่ละเฟรม mel spectrogram ในจำนวนส่วนประกอบของ FilterBank
types.ts: 336
• preemphasis เสริม Optional number
advanced
น้ำหนักตัวกรองก่อนการเน้นเพื่อใช้กับสัญญาณเสียงปกติ (0 สำหรับไม่มีการเน้นล่วงหน้า)
types.ts: 343
• STATEWIDTH Optional : number
advanced
ขนาดของสถานะ encoder ในหน่วยเวกเตอร์ (ค่าเริ่มต้นเป็นความกว้างของการปลุกรับการปลุก)
types.ts: 349
• เกณฑ์ Optional : number
advanced
ขีด จำกัด ของเอาต์พุตด้านหลังของตัวจําแนกด้านบนซึ่งทริกเกอร์เปิดใช้งานไปป์ไลน์ในช่วง [0, 1]
types.ts: 356
Apache-2.0
ลิขสิทธิ์ 2021 Spokestack