Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys
- from PyQt5.QtCore import pyqtSlot, QTimer
- from PyQt5.QtWidgets import QDialog, QApplication, QFileDialog
- from PyQt5.uic import loadUi
- import speech_recognition as spreg
- from selenium import webdriver
- from selenium.webdriver.chrome.options import Options
- import time
- import pyttsx
- from selenium.webdriver.common.keys import Keys
- from selenium.webdriver.common.action_chains import ActionChains
- sample_rate = 48000
- data_size = 8192
- recog = spreg.Recognizer()
- engine = pyttsx.init()
- rate = engine.getProperty('rate')
- engine.setProperty('rate', rate * 0.7)
- opt = Options()
- opt.add_argument('--window-size=1920,1080');
- def remove_dups(duplicate):
- final_list = []
- for num in duplicate:
- if num not in final_list:
- final_list.append(num)
- return final_list
- def LoginFn(driver):
- login_page = "https://www.hmhco.com/ed"
- driver = webdriver.Chrome(options=opt)
- driver.implicitly_wait(20)
- driver.get(login_page)
- driver.maximize_window()
- state_name = driver.find_element_by_id("state-selector-wrapper")
- state_name.click()
- driver.find_element_by_xpath("//div[text()='Other']").click()
- district_name = driver.find_element_by_id("district-selector-wrapper")
- district_name.click()
- driver.find_element_by_xpath("//div[text()='NA Sci Dim K-8 PROD DL-92006820']").click()
- next_btn = driver.find_element_by_xpath('//*[text()="Next"]')
- next_btn.click()
- username = driver.find_element_by_id("username")
- password = driver.find_element_by_id("password")
- username.send_keys("Brad.coleman")
- password.send_keys("Te@cher1")
- time.sleep(1)
- submit = driver.find_element_by_xpath('//span[text()="Sign In"]')
- time.sleep(1)
- submit.click()
- actions = ActionChains(driver)
- actions = actions.send_keys(Keys.ALT + Keys.TAB)
- actions.perform()
- time.sleep(5)
- return driver
- def OpenUnitFn(driver, unit_num):
- unit = driver.find_element_by_xpath('//span[text()="' + unit_num + '"]')
- time.sleep(1)
- unit.click()
- return driver
- def OpenLessonFn(driver, lesson_num):
- lesson_num = int(lesson_num) + 2
- lesson = driver.find_element_by_xpath('(//span[contains(., "View Resources")])[' + str(lesson_num) + ']')
- time.sleep(2)
- lesson.click()
- time.sleep(3)
- return driver
- def AssignResourceFn(driver, res_name):
- for elem in driver.find_elements_by_xpath('.//h1[@class = "ng-binding"]'):
- les_name = elem.text
- l_name = les_name.split(': ', 1)[1]
- i = 1
- res_names = []
- for elem in driver.find_elements_by_xpath('.//h1'):
- les_name = elem.text
- if (i > 2):
- res_names.append(les_name)
- i = i + 1
- unq_res_names = remove_dups(res_names)
- i = 1
- res_index_map = {}
- for res in unq_res_names:
- res_index_map[res.lower()] = i
- i = i + 1
- to_find = l_name.lower() + ': ' + res_name
- res_position = res_index_map[to_find]
- resource = driver.find_element_by_xpath('(//span[contains(., "Assign")])[' + str(res_position) + ']')
- time.sleep(3)
- resource.click()
- time.sleep(2)
- cls_ckbx = driver.find_element_by_xpath('//checkbox[@label="Class 3"]')
- cls_ckbx.click()
- time.sleep(2)
- mr_coleman_cls = driver.find_element_by_xpath('//checkbox[@label="Mr. Coleman\'s Class"]')
- mr_coleman_cls.click()
- time.sleep(2)
- assignBtn = driver.find_element_by_xpath('//button[@id="assignBtn"]')
- assignBtn.click()
- time.sleep(3)
- return driver
- def OpenHomepageFn(driver):
- logo = driver.find_element_by_id("logo")
- logo.click()
- time.sleep(3)
- return driver
- def VoiceMessage(message):
- engine.say(message)
- engine.runAndWait()
- class opencvgui(QDialog):
- def __init__(self):
- super(opencvgui, self).__init__()
- loadUi('Voice_Navigator.ui', self)
- self.recordBtn.setEnabled(True)
- self.exitBtn.setEnabled(True)
- self.consoleBox.setEnabled(True)
- self.recordBtn.clicked.connect(self.listen)
- self.exitBtn.clicked.connect(sys.exit)
- self.driver = None
- @pyqtSlot()
- def listen(self):
- try:
- self.consoleBox.setText("Recording...Please say your command after 2 seconds")
- QApplication.processEvents()
- #print('In listen function')
- with spreg.Microphone(sample_rate=sample_rate, chunk_size=data_size) as source:
- recog.adjust_for_ambient_noise(source)
- speech = recog.listen(source)
- try:
- text = recog.recognize_google(speech)
- print(text)
- self.consoleBox.setText('You have said: ' + text)
- except spreg.UnknownValueError:
- self.consoleBox.setText('Unable to recognize the audio')
- except spreg.RequestError as e:
- self.consoleBox.setText("Request error from Speech Recognition service; {}".format(e))
- QApplication.processEvents()
- self.recordBtn.setEnabled(False)
- QApplication.processEvents()
- text_command = text.split(' ', 1)[0]
- text_argument = text.split(' ', 1)[1]
- valid_commands = ['open', 'assign', 'login']
- if (text_command in valid_commands):
- #self.consoleBox.setText('Command issued is: ' + text_command)
- #self.consoleBox.setText('Argument to command is: ' + text_argument)
- pass
- else:
- self.consoleBox.setText('Command not found')
- if (text_command == 'login'):
- self.driver = LoginFn(self.driver)
- VoiceMessage('User has been logged in successfully ')
- elif (text_command == 'open'):
- resource_type = text_argument.split(' ')[0]
- try:
- resource_number = text_argument.split(' ')[1]
- except:
- self.consoleBox.setText('Incorrect command')
- if (resource_type == "unit"):
- self.driver = OpenUnitFn(self.driver, resource_number)
- # message_str = 'Unit has been opened! Please tell the lesson number that you want to open?'
- # VoiceMessage(message_str)
- elif (resource_type == "lesson"):
- self.driver = OpenLessonFn(self.driver, resource_number)
- # VoiceMessage('Lesson ' + str(resource_number) + ' has been opened! Please tell which resource you want to assign to students?')
- elif (resource_type == 'home'):
- self.driver = OpenHomepageFn(self.driver)
- # VoiceMessage('We are back on the home page!')
- else:
- self.consoleBox.setText('Incorrect command')
- elif (text_command == "assign"):
- self.driver = AssignResourceFn(self.driver, text_argument)
- # VoiceMessage('Resource named ' + text_argument + 'was successfully assigned to the students')
- else:
- self.consoleBox.setText('Command was not found')
- QApplication.processEvents()
- self.recordBtn.setEnabled(True)
- QApplication.processEvents()
- except:
- self.consoleBox.setText('Please repeat your command clearly!')
- QApplication.processEvents()
- finally:
- return self.driver
- app = QApplication(sys.argv)
- window = opencvgui()
- window.setWindowTitle("Voice Navigator")
- window.show()
- sys.exit(app.exec_())
Add Comment
Please, Sign In to add comment