找回密码
 立即注册
查看: 454|回复: 0

基于python和深度学习实现本地离线智能语音控制终端(二)

[复制链接]

86

主题

0

回帖

894

积分

中级会员

积分
894
发表于 2024-4-24 14:16:40 | 显示全部楼层 |阅读模式
学会休眠和语音唤醒

这里我以pocketsphinx实现语音唤醒为例子:

1.环境配置:
  1. pip install pocketsphinx
  2. pip install pyaudio     
复制代码

进行本地离线安装。

比如:我在window上python3.7 进行离线安装pocketsphinx,这里要注意文件的路径,否则会报错找不到指定文件

  1. pip install pocketsphinx-0.1.15-cp37-cp37m-win_amd64.whl
复制代码
2.如何定制训练自己的唤醒词:

建立一个名为keyword的文件,里面输入你想要的唤醒词,以及读音相近的词(相似读音的词越多灵敏度越高),比如:我想训练的终端名为 COCO,则我的keyword内容为:

  1. gogo
  2. coco
  3. yoyo
  4. bobo
  5. lolo
  6. momo
  7. nono
  8. hoho
复制代码




选择 keyword.txt 进行上传,得到对应的压缩包,下载后放到项目文件夹下,并解压得:



这里的数字都是网站随机生成的,不一样是正常的。

测试代码:

  1. import os
  2. from pocketsphinx import LiveSpeech, get_model_path

  3. def wakeup_co():
  4.     model_path = get_model_path()
  5.     speech = LiveSpeech(
  6.         verbose=False,
  7.         sampling_rate=16000,
  8.         buffer_size=2048,
  9.         no_search=False,
  10.         full_utt=False,
  11.         hmm=os.path.join(model_path, 'en-us'),
  12.         lm=os.path.join('.\\Sphinx_keyword\\keyword_COCO\\', '5995.lm'),
  13.         dic=os.path.join('.\\Sphinx_keyword\\keyword_COCO\\', '5995.dic')
  14.     )
  15.     for phrase in speech:
  16.         #print("phrase:", phrase)
  17.         #print(phrase.segments(detailed=True))
  18.         if str(phrase) in ["GOGO", "COCO", "YOYO",
  19.                            "BOBO", "LOLO", "MOMO",
  20.                            "NONO", "HOHO"]:
  21.               print('我是COCO')
复制代码

这里 '.\\Sphinx_keyword\\keyword_COCO\\' 是我存放文件的地址,5995   也需要根据你的文件来更改,需要根据你的地址来更改。

测试结果:

  1. Allocating 32 buffers of 2500 samples each
  2. 我是COCO

  3. 进程已结束,退出代码为 0
复制代码

若想使用中文词作为唤醒词,则需要下载好相关的中文文件:

Download CMU Sphinx from SourceForge.net

下载后放到项目文件夹中解压,得:cmusphinx-zh-cn-5.2  文件夹


和训练英文唤醒词一样,需要建立  keyword.txt   文件,我训练了一个名为“佩佩”的唤醒词:

  1. 贝贝
  2. 佩佩
  3. 蕾蕾
  4. 内内
  5. 嘿嘿
  6. 忒忒
  7. 得得
  8. 贼贼
  9. 尅尅
复制代码

打开网站:Sphinx Knowledge Base Tool VERSION 3

上传keyword.txt后得到一个压缩包,下载后放到项目路径下并解压。


这里需要更改 dic 为后缀的文件内容,需要在中文后面按格式添加上拼音和声调,所有间隔均为一个空格,修改后,例如:

  1. 佩佩 p ei4 p ei3       
  2. 内内 n ei4 n ei3       
  3. 嘿嘿 h ei4 h ei3       
  4. 尅尅 k ei4 k ei3       
  5. 得得 d ei4 d ei3       
  6. 忒忒 t ei4 t ei3       
  7. 蕾蕾 l ei4 l ei3       
  8. 贝贝 b ei4 b ei3       
  9. 贼贼 z ei4 z ei3       
复制代码

测试代码:

  1. import os
  2. from pocketsphinx import LiveSpeech, get_model_path

  3. model_path = '.\\Sphinx_keyword\\cmusphinx-zh-cn-5.2\\'

  4. speech = LiveSpeech(
  5.     verbose=False,
  6.     sampling_rate=16000,
  7.     buffer_size=2048,
  8.     no_search=False,
  9.     full_utt=False,
  10.     hmm=os.path.join(model_path ,'zh_cn.cd_cont_5000'),
  11.     lm=os.path.join('.\\Sphinx_keyword\\keyword_PeiPei\\', '0738.lm'),
  12.     dic=os.path.join('.\\Sphinx_keyword\\keyword_PeiPei\\', '0738.dic')
  13. )
  14. for phrase in speech:
  15.     print("phrase:", phrase)
  16.     print(phrase.segments(detailed=True))
  17.     if str(phrase) in ["贝贝", "佩佩", "蕾蕾",
  18.                        "内内", "嘿嘿", "忒忒",
  19.                        "得得", "贼贼", "尅尅",]:
  20.         print("我是佩佩")
复制代码
  1. Allocating 32 buffers of 2500 samples each
  2. phrase: 尅尅
  3. [('<s>', 0, 4359242, 4359325), ('<sil>', -1331, 4359326, 4359479), ('<sil>', -1331, 4359480, 4359801), ('<sil>', -1331, 4359802, 4359940), ('尅尅', 0, 4359941, 4360080)]
  4. 我是佩佩
  5. phrase: 得得
  6. [('<s>', 0, 8516377, 8516528), ('<sil>', -5375, 8516529, 8516683), ('<sil>', -2035, 8516684, 8516764), ('得得', 0, 8516765, 8516968), ('</s>', 0, 8516969, 8516980)]
  7. 我是佩佩
  8. phrase: 嘿嘿
  9. [('<s>', 0, 10674834, 10675304), ('嘿嘿', -3628, 10675305, 10675382), ('</s>', 0, 10675383, 10675385)]
  10. 我是佩佩
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|EnMaking

GMT+8, 2025-3-31 09:07 , Processed in 0.050219 second(s), 24 queries .

Powered by Qiqirobot

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表