配置目录在~/.config/QSmartAssistant
,插件和配置文件都在该目录下,程序目录下Data文件夹会自动复制到配置目录中
配置文件为Data/config.json
,修改配置文件之后进入build目录运行cmake ..
会自动复制配置文件到配置目录
第一次运行可以将Data/default_config.json
复制为Data/config.json
模型比较:
模型 | 选项 | cpu占用 | 内存占用 |
---|---|---|---|
duilite | -DWAKEUP_DUILITE |
通用选项:wakeup
选项 | 默认值 | 含义 |
---|---|---|
chunkSize | 640 | 默认音频块的大小,默认一个音频块包含20ms的音频 |
detectSlient | 800 | vad检测到人声后停止检测的间隔,默认检测到人声后800ms没有人声则停止检测 |
undetectSlient | 4000 | 没有检测到人声时最长检测时间,默认4s没有人声退出vad |
minChunk | 3 | 最少检测音频数量,若检测到包含人声的chunk数量小于3则取消asr |
intentMap | xx | 通过唤醒词直接执行指令,不需要运行vad,asr,tts,nlu, 例如将开灯 识别为唤醒词, 具体配置可参照默认用例 |
选项:duilite
选项 | 默认值 | 含义 |
---|---|---|
login | duilite_login.json | duilite的登录配置文件,详见 |
res | wakeup_far.bin | 资源文件,可以自行从duilite控制台中查找 |
wakeword | ni hao xiao zhi | 唤醒词,输入为中文拼音,拼音之间以逗号隔开,默认唤醒词为你好小智 |
subword | 0 | 短唤醒词,假设wakeword为ni hao xiao zhi,xiao zhi ,那么subword为0,1 |
thresh | 0.15 | 唤醒阈值,阈值越高越容易唤醒,但是误唤醒率越高。该项非常敏感,建议每次修改0.1到0.2 |
chunkSize | 640 | 输入块的大小,默认是20ms |
选项: porcupine
选项 | 默认值 | 含义 |
---|---|---|
keyword | 小云_zh.ppn | 唤醒词模型,从控制台中训练及下载,中文最多三个词 |
model | porcupine_params_zh.pv | 语言模型,中文无需改变 |
key | xxx | 控制台中获得 |
sensitivity | 0.5 | 越高越容易唤醒 |
选项:openwakeup
选项 | 默认值 | 含义 |
---|---|---|
model | nihao_wenwen.tflite | 模型文件,默认唤醒词为nihao_wenwen.tflite |
选项:snowboy
选项 | 默认值 | 含义 |
---|---|---|
resource | common.res | 通用资源文件,可以在这里找到 |
thres | 0.8 | 阈值越高越容易唤醒 |
model | snowboy.umdl | 唤醒词模型 |
chunkSize | 3200 | 每次接受块的大小,默认为0.1s |
选项: sherpa_wakeup
模型下载
cd Data
wget -qq https://github.com/pkufool/keyword-spotting-models/releases/download/v0.1/sherpa-onnx-kws-zipformer-wenetspeech-3.3M-2024-01-01.tar.bz
tar xf sherpa-onnx-kws-zipformer-wenetspeech-3.3M-2024-01-01.tar.bz
ls -lh sherpa-onnx-kws-zipformer-wenetspeech-3.3M-2024-01-01
选项 | 默认值 | 含义 |
---|---|---|
model | sherpa-kws/%1-epoch-12-avg-2-chunk-16-left-64.int8.onnx | asr模型,目前只有这个模型支持wakeup |
thres | 0.5 | 阈值 |
score | 0.5 | 和上面的thres共同调节 |
tokens | sherpa-kws/tokens.txt | token文件,模型文件夹中自带 |
hotword | sherpa-kws/keywords.txt | 唤醒词,具体生成方式参照 |
选项: cobra
选项 | 默认值 | 含义 |
---|---|---|
cofidence | 0.5 | 置信度,越高越难被认为是人声 |
选项:duilite
需要chunkSize,login选项,可以参照wakeup
选项 | 默认值 | 含义 |
---|---|---|
vadRes | vad_aicar_v0.16.bin | 资源文件,可自行在控制台中下载 |
选项: silero
选项 | 默认值 | 含义 |
---|---|---|
model | silero_vad.onnx | 模型路径 |
chunkSize | 1024 | silero v5中默认为1024,v4默认为640 |
thresh | 0.1 | 阈值,越大越难检测出声音 |
abandonNum | 5 | 检测开始时抛弃的块数量 |
选项:sherpa
模型下载:
cd Data
wget https://hub.nuaa.cf/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-paraformer-zh-2023-09-14.tar.bz2
tar xvf sherpa-onnx-paraformer-zh-2023-09-14.tar.bz2
mv sherpa-onnx-paraformer-zh-2023-09-14 sherpa_paraformer
选项 | 默认值 | 含义 |
---|---|---|
model | sherpa_paraformer/model.int8.onnx | 模型文件,如果包含多个文件则不同的部分使用%1 代替,例如%1-epoch-12-avg-2-chunk-16-left-64.int8.onnx |
tokens | sherpa_paraformer/tokens.txt | token文件,模型文件夹中都有token文件 |
stream | false | 是否为流式模型 |
选项: funasr
选项 | 默认值 | 含义 |
---|---|---|
model | paraformer-seaco/model.int8.onnx | 模型文件,可以在魔搭中寻找模型下载 |
cmvn | paraformer-seaco/am.mvn | 位于模型文件夹中 |
token | paraformer-seaco/tokens.json | token文件 |
segdict | paraformer-seaco/seg_dict | 该文件在部分模型下不存在,可以使用paraformer-large-contextual中的文件 |
hw_model | paraformer-seaco/model_eb.int8.onnx | 热词模型,一般文件名中包含eb |
hotword | paraformer-seaco/hotword.txt | 热词文件,每个热词占一行,不要有多余的行 |
选项: sherpa_tts
模型下载:
cd Data
GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/csukuangfj/vits-zh-aishell3
cd vits-zh-aishell3
git lfs pull --include "*.onnx"
选项 | 默认值 | 含义 |
---|---|---|
model | vits-zh-aishell3/vits-aishell3.int8.onnx | 模型文件 |
lexicon | vits-zh-aishell3/lexicon.txt | 词法文件,在模型文件夹下都包含 |
tokens | vits-zh-aishell3/tokens.txt | 模型文件夹中包含 |
rules | vits-zh-aishell3/rule.fst | 模型文件夹中包含 |
data_dir | espeak-ng-data | 使用piper模型时需要 |
length | 1 | 越大语速越慢 |
noise | 0.3 | 控制样本随机性 |
noise-w | 0.2 | 控制音素发音长度 |
speakerid | 66 | 说话人id,当模型中有多个说话人时有效 |
extra_volume | 0 | 额外增加的音量,以分贝为单位 |
选项: unit
选项 | 默认值 | 含义 |
---|---|---|
apiKey | xxx | 从控制台中获得 |
secret | xxx | 从控制台中获得 |
unitId | xxx | 从控制台中获得 |
confThresh | 50 | 置信度,如果一个意图置信度低于该值则排除 |
选项: rasa
选项 | 默认值 | 含义 |
---|---|---|
model | Data/rasa/models/default.tar.gz | 模型文件 |
record_samples | true | 自动记录对话并生成训练语料,结果保存在Data/Tmp/rasa 中 |
python_venv | xxx | rasa所需python虚拟环境的位置,如果使用install_rasa.sh 安装则位于${project_home}/lib/rasa/bin/activate |
rasa配置目录在Data/rasa
中,文档
rasa NLU的目的是从文本中抽取出意图和实体,例如[增大](trend)音量
,它的意图是CHANGE_VOL
,其中包含trend
实体
rasa训练命令为rasa train nlu -c config.yml
。训练完成之后在model文件夹下会生成一个模型,如果需要替换需要更改config.json中的配置并重新启动。
流水线是rasa NLU的处理流程,大致可以分为tokenizer, featurizer,intent classifier,entity classfier。流水线配置在Data/rasa/config.yml
中,文档位于
- tokenizer: 分词,中文一般使用jieba分词
- featurizer: 词向量化
- intent classifier: 意图抽取
- entity classfier: 实体抽取
可以参照Data/rasa/domain.yml
进行配置,其训练语料位于Data/rasa/data/nlu
中,如果想自定义实体和意图可以在domain.yml中添加定义,然后再data/nlu中添加训练语料,然后运行训练命令训练,最后在config.yml中修改模型位置即可
mqtt会发布一些状态供其他组件使用,包括:
主题 | 含义 |
---|---|
QSmartAssistant/wakeup | 唤醒时调用 |
QSmartAssistant/detect | 唤醒结束时调用(无论是否检测到说话都会调用) |
QSmartAssistant/question | ASR识别时调用,payload为识别的文字 |
QSmartAssistant/response | 机器人的回复 |