基于PyQT5、PocketSphinx的python语音识别小程序

发布日期: 2019-05-11 16:44:19 浏览量: 790
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

1.使用说明

1.1 项目简介

参照微软cotana的工作方式,编写自己的一个python语音助手程序,借助PyQt5和Pipy,创建可视化窗口,能实现基本的语音识别功能,同时根据几个特定的关键词执行简单的行动(如music,readme等)。

1.2 项目功能要求

  • 实现语音识别,并将识别的内容在屏幕上打印出来

  • 设置几个命令关键词(music,readme),并实现相应的行动。若识别出的内容中包含设置的几个关键词,则程序执行相应的行动。

  • 设置两种识别模式:PocketSphinx中包含7个Recognizer API:程序中使用了两个API:recognize_sphinx和recognize_google。(两种识别模式可由用户自行选择,其中recognize_sphinx可直接在本地运行,但识别精度较低;recognize_google识别精度较高,但是使用recognize_google需要处于联网状态下且IP地址需要在境外,否则语音识别会出现错误)

  • 设置文本框:用户可直接在文本框中输入命令,其执行效力与语音输入等效

2.程序设计与实现

2.1 设计

  1. class Ui_MainWindow(object):

Ui_Mainwindow类加载图形化用户界面,控制界面布局,类中包含各种Label,PushButton,MenuBar控件。

  1. class myWindow(QtWidgets.QMainWindow):

mywindow类处理交互逻辑,类中包含各种执行函数,同时实现控件与函数的连接。

2.2 主要函数实现

声音监听与处理函数

  1. def listen(self):
  2. # Working with Microphones
  3. mic = sr.Recognizer()
  4. with sr.Microphone() as source: # use the default microphone as the audio source
  5. audio = mic.listen(source) # listen for the first phrase and extract it into audio data
  6. try:
  7. if self.isgoogle:
  8. content = mic.recognize_google(audio)
  9. else:
  10. content = mic.recognize_sphinx(audio)
  11. except sr.RequestError:
  12. self.ui.label.setText("Something was wrong! Try again......")
  13. COMMEND = ["music", "open"]
  14. commend_is_music = re.search(COMMEND[0].lower(), content.lower())
  15. commend_is_file = re.search(COMMEND[1].lower(), content.lower())
  16. if commend_is_music:
  17. self.ui.label.setText("you said: \" " + content + "\"")
  18. win32api.ShellExecute(0, 'open', 'D:\\网易云音乐\\CloudMusic\\cloudmusic.exe', '', '', 1)
  19. elif commend_is_file:
  20. self.ui.label.setText("you said: \"" + content + "\"")
  21. win32api.ShellExecute(0, 'open', 'D:\\Notpad++\\Notepad++\\notepad++.exe', '', '', 0)
  22. else:
  23. self.ui.label.setText("you said: \" " + content + "\"\nIt's not a valid command.")

创建监听线程

  1. def listen_thread(self):
  2. self.ui.label.setText("I'm listening...... ")
  3. t1 = threading.Thread(target=self.listen)
  4. t1.setDaemon(True)
  5. t1.start()

文本处理函数

  1. def text_changed(self):
  2. content = self.ui.textbox.text()
  3. print(content)
  4. COMMEND = ["music", "open"]
  5. commend_is_music = re.search(COMMEND[0].lower(), content.lower())
  6. commend_is_file = re.search(COMMEND[1].lower(), content.lower())
  7. if commend_is_music:
  8. self.ui.label.setText("you typed: \" " + content + "\"")
  9. win32api.ShellExecute(0, 'open', 'D:\\网易云音乐\\CloudMusic\\cloudmusic.exe', '', '', 1)
  10. elif commend_is_file:
  11. self.ui.label.setText("you typed: \"" + content + "\"")
  12. win32api.ShellExecute(0, 'open', 'D:\\Notpad++\\Notepad++\\notepad++.exe', '', '', 0)
  13. else:
  14. self.ui.label.setText("you typed: \" " + content + "\"\nIt's not a valid command.")

创建文本处理线程

  1. def text_thread(self):
  2. t2 = threading.Thread(target=self.text_changed)
  3. t2.setDaemon(True)
  4. t2.start()

连接各类控件与相应函数

  1. self.ui.recognize_btn.clicked.connect(self.listen_thread)#语音识别按钮连接监听线程
  2. self.ui.sphinx_bar.triggered.connect(self.sphinxbar_recognize)#sphinx模式触发
  3. self.ui.google_bar.triggered.connect(self.googlebar_recognize)#google模式触发
  4. self.ui.text_btn.clicked.connect(self.text_thread)#文本框输入确认按钮连接文本处理线程

3.测试截图

上传的附件 cloud_download 基于PyQT、PocketSphinx的python语音识别小程序.7z ( 16.45mb, 5次下载 )
error_outline 下载需要6点积分

发送私信

6
文章数
1
评论数
eject