Guest User

voice

a guest
May 3rd, 2019
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.57 KB | None | 0 0
  1. import sys
  2. from PyQt5.QtCore import pyqtSlot, QTimer
  3. from PyQt5.QtWidgets import QDialog, QApplication, QFileDialog
  4. from PyQt5.uic import loadUi
  5.  
  6. import speech_recognition as spreg
  7. from selenium import webdriver
  8. from selenium.webdriver.chrome.options import Options
  9. import time
  10. import pyttsx
  11. from selenium.webdriver.common.keys import Keys
  12. from selenium.webdriver.common.action_chains import ActionChains
  13.  
  14. sample_rate = 48000
  15. data_size = 8192
  16. recog = spreg.Recognizer()
  17. engine = pyttsx.init()
  18. rate = engine.getProperty('rate')
  19. engine.setProperty('rate', rate * 0.7)
  20. opt = Options()
  21. opt.add_argument('--window-size=1920,1080');
  22.  
  23. def remove_dups(duplicate):
  24. final_list = []
  25. for num in duplicate:
  26. if num not in final_list:
  27. final_list.append(num)
  28. return final_list
  29.  
  30. def LoginFn(driver):
  31. login_page = "https://www.hmhco.com/ed"
  32. driver = webdriver.Chrome(options=opt)
  33. driver.implicitly_wait(20)
  34. driver.get(login_page)
  35. driver.maximize_window()
  36. state_name = driver.find_element_by_id("state-selector-wrapper")
  37. state_name.click()
  38. driver.find_element_by_xpath("//div[text()='Other']").click()
  39. district_name = driver.find_element_by_id("district-selector-wrapper")
  40. district_name.click()
  41. driver.find_element_by_xpath("//div[text()='NA Sci Dim K-8 PROD DL-92006820']").click()
  42. next_btn = driver.find_element_by_xpath('//*[text()="Next"]')
  43. next_btn.click()
  44. username = driver.find_element_by_id("username")
  45. password = driver.find_element_by_id("password")
  46. username.send_keys("Brad.coleman")
  47. password.send_keys("Te@cher1")
  48. time.sleep(1)
  49. submit = driver.find_element_by_xpath('//span[text()="Sign In"]')
  50. time.sleep(1)
  51. submit.click()
  52. actions = ActionChains(driver)
  53. actions = actions.send_keys(Keys.ALT + Keys.TAB)
  54. actions.perform()
  55. time.sleep(5)
  56.  
  57. return driver
  58.  
  59. def OpenUnitFn(driver, unit_num):
  60. unit = driver.find_element_by_xpath('//span[text()="' + unit_num + '"]')
  61. time.sleep(1)
  62. unit.click()
  63. return driver
  64.  
  65. def OpenLessonFn(driver, lesson_num):
  66. lesson_num = int(lesson_num) + 2
  67. lesson = driver.find_element_by_xpath('(//span[contains(., "View Resources")])[' + str(lesson_num) + ']')
  68. time.sleep(2)
  69. lesson.click()
  70. time.sleep(3)
  71. return driver
  72.  
  73. def AssignResourceFn(driver, res_name):
  74. for elem in driver.find_elements_by_xpath('.//h1[@class = "ng-binding"]'):
  75. les_name = elem.text
  76. l_name = les_name.split(': ', 1)[1]
  77. i = 1
  78. res_names = []
  79. for elem in driver.find_elements_by_xpath('.//h1'):
  80. les_name = elem.text
  81. if (i > 2):
  82. res_names.append(les_name)
  83. i = i + 1
  84. unq_res_names = remove_dups(res_names)
  85. i = 1
  86. res_index_map = {}
  87. for res in unq_res_names:
  88. res_index_map[res.lower()] = i
  89. i = i + 1
  90. to_find = l_name.lower() + ': ' + res_name
  91.  
  92. res_position = res_index_map[to_find]
  93.  
  94.  
  95. resource = driver.find_element_by_xpath('(//span[contains(., "Assign")])[' + str(res_position) + ']')
  96. time.sleep(3)
  97. resource.click()
  98. time.sleep(2)
  99. cls_ckbx = driver.find_element_by_xpath('//checkbox[@label="Class 3"]')
  100. cls_ckbx.click()
  101. time.sleep(2)
  102. mr_coleman_cls = driver.find_element_by_xpath('//checkbox[@label="Mr. Coleman\'s Class"]')
  103. mr_coleman_cls.click()
  104. time.sleep(2)
  105. assignBtn = driver.find_element_by_xpath('//button[@id="assignBtn"]')
  106. assignBtn.click()
  107. time.sleep(3)
  108. return driver
  109.  
  110. def OpenHomepageFn(driver):
  111. logo = driver.find_element_by_id("logo")
  112. logo.click()
  113. time.sleep(3)
  114. return driver
  115.  
  116. def VoiceMessage(message):
  117. engine.say(message)
  118. engine.runAndWait()
  119.  
  120. class opencvgui(QDialog):
  121.  
  122. def __init__(self):
  123. super(opencvgui, self).__init__()
  124. loadUi('Voice_Navigator.ui', self)
  125. self.recordBtn.setEnabled(True)
  126. self.exitBtn.setEnabled(True)
  127. self.consoleBox.setEnabled(True)
  128. self.recordBtn.clicked.connect(self.listen)
  129. self.exitBtn.clicked.connect(sys.exit)
  130. self.driver = None
  131.  
  132. @pyqtSlot()
  133. def listen(self):
  134. try:
  135. self.consoleBox.setText("Recording...Please say your command after 2 seconds")
  136. QApplication.processEvents()
  137. #print('In listen function')
  138. with spreg.Microphone(sample_rate=sample_rate, chunk_size=data_size) as source:
  139. recog.adjust_for_ambient_noise(source)
  140. speech = recog.listen(source)
  141. try:
  142. text = recog.recognize_google(speech)
  143. print(text)
  144. self.consoleBox.setText('You have said: ' + text)
  145. except spreg.UnknownValueError:
  146. self.consoleBox.setText('Unable to recognize the audio')
  147. except spreg.RequestError as e:
  148. self.consoleBox.setText("Request error from Speech Recognition service; {}".format(e))
  149.  
  150. QApplication.processEvents()
  151. self.recordBtn.setEnabled(False)
  152. QApplication.processEvents()
  153. text_command = text.split(' ', 1)[0]
  154. text_argument = text.split(' ', 1)[1]
  155.  
  156. valid_commands = ['open', 'assign', 'login']
  157.  
  158. if (text_command in valid_commands):
  159. #self.consoleBox.setText('Command issued is: ' + text_command)
  160. #self.consoleBox.setText('Argument to command is: ' + text_argument)
  161. pass
  162. else:
  163. self.consoleBox.setText('Command not found')
  164.  
  165. if (text_command == 'login'):
  166. self.driver = LoginFn(self.driver)
  167. VoiceMessage('User has been logged in successfully ')
  168. elif (text_command == 'open'):
  169. resource_type = text_argument.split(' ')[0]
  170. try:
  171. resource_number = text_argument.split(' ')[1]
  172. except:
  173. self.consoleBox.setText('Incorrect command')
  174. if (resource_type == "unit"):
  175. self.driver = OpenUnitFn(self.driver, resource_number)
  176. # message_str = 'Unit has been opened! Please tell the lesson number that you want to open?'
  177. # VoiceMessage(message_str)
  178. elif (resource_type == "lesson"):
  179. self.driver = OpenLessonFn(self.driver, resource_number)
  180. # VoiceMessage('Lesson ' + str(resource_number) + ' has been opened! Please tell which resource you want to assign to students?')
  181. elif (resource_type == 'home'):
  182. self.driver = OpenHomepageFn(self.driver)
  183. # VoiceMessage('We are back on the home page!')
  184. else:
  185. self.consoleBox.setText('Incorrect command')
  186. elif (text_command == "assign"):
  187. self.driver = AssignResourceFn(self.driver, text_argument)
  188. # VoiceMessage('Resource named ' + text_argument + 'was successfully assigned to the students')
  189. else:
  190. self.consoleBox.setText('Command was not found')
  191. QApplication.processEvents()
  192. self.recordBtn.setEnabled(True)
  193. QApplication.processEvents()
  194. except:
  195. self.consoleBox.setText('Please repeat your command clearly!')
  196. QApplication.processEvents()
  197. finally:
  198. return self.driver
  199.  
  200. app = QApplication(sys.argv)
  201. window = opencvgui()
  202. window.setWindowTitle("Voice Navigator")
  203. window.show()
  204. sys.exit(app.exec_())
Add Comment
Please, Sign In to add comment