import os from datetime import datetime import pywhatkit import wolframalpha # win=Tk() # win.geometry('500x500') app_id = 'HAKJQ3-KP28H6TLT6' r = sr.Recognizer() r1 = sr.Recognizer() engine = pyttsx3.init() client = wolframalpha.Client(app_id) voices = engine.getProperty('voices') engine.setProperty('voice', voices[1].id) def value(): a = input() return a def respond(voice_data): try: if 'Hey assistant' in voice_data: print('listening') engine.say('yes tell me') engine.runAndWait()
import pyttsx3 import PyPDF2 from pyttsx3 import engine engine = pyttsx3.init() book = open( 'your_book_name.pdf', 'rb' ) #This is the only Change you have to make in whole code,Change your_book_name with your actual book name pdfReader = PyPDF2.PdfFileReader(book) pages = pdfReader.numPages rate = engine.getProperty('rate') # getting details of current speaking rate print('Current Rate of Speaking -', rate) #printing current voice rate engine.setProperty( 'rate', 125 ) #125 is the value set for speaking words , change accordingly to your preference voices = engine.getProperty('voices') engine.setProperty( 'voice', voices[1].id) #voices[1]->for female voice and voices[0]->for male print('No. of pages in Book-', pages) speaker = pyttsx3.init() for num in range(10, pages): page = pdfReader.getPage(num) text = page.extractText() speaker.say(text) speaker.runAndWait()
import pyttsx3 from pyttsx3 import engine engine = pyttsx3.init() voices = engine.getProperty('voices') filename = ["RobertFrostRoadNotTaken.txt"] #Put file name here b = [] zira = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_EN-US_ZIRA_11.0" #Microsoft David david = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_EN-US_DAVID_11.0" #Microsoft Zira rate = engine.getProperty('rate') engine.setProperty('rate', rate + -20) #Change speaking speed for files in filename: f = open(files, 'r') #Open in read mode contents = f.read() contents = contents.split('\n') b.append(contents[-1]) f.close() #Close file count1 = 0 for element in b: count1 = count1 + 1 if b.count(element) > 1: print(element) print(filename[count1 - 1]) for voice in voices: engine.setProperty('voice', zira) #Choose voice engine.say(contents) engine.runAndWait()
class Commands(Help): ''' this class contains functions that a voice assistant can perform each function performs a separate functionality ''' # speech settings engine = pyttsx3.init() voices = engine.getProperty('voices') rate = engine.getProperty('rate') engine.setProperty('rate', rate - 30) engine.setProperty( 'voice', voices[3].id) # id[3] is ukrainian localization on my computer # google new settings googlenews = GoogleNews() googlenews.set_lang('ua') coin = ['орел', 'решка'] # if user say 'flip coin' cube = ['одиниця', 'двійка', 'трійка', 'читвірка', 'п"ятірка', 'шістка'] # if user say 'flip cube' # if user say 'hallo' hello = [ 'Вітаю, я Сівія', 'Привіт, я Сівія', 'Привітусики', 'Рада чути вас', 'Оо, це ви? давно не бачилися', 'Добрий день', 'Рада вітати вас', 'Доброго здоров"я', 'День добрий', 'Добридень', 'Ну нарешті ви повернулися', 'знову ви? і чого вам треба цього разу?' ] # if user leave leave = [ 'До зустрічі', 'фух, ось і перерва на попоїсти', 'Побачимося', 'Сподіваюся почути вас знову', 'Бувайте здорові', 'Всього вам доброго', 'Всього найкращого', 'На все добре', 'Була рада вам допомогти', 'Прощавайте', 'щось я запихалася, нарешті зможу відпочити' ] # if user say 'how are you?' mood = [ 'Як завжди все добре, а ти як?', 'Настрій відмінний - як перед вихідними', 'Сплю і бачу страшний сон, в якому ти у мене питаєш, як в мене справи', 'Все добре, дякую, що цікавитеся. А ви як?', 'Мрію про щасливе майбутнє', 'Як у казці!', 'Як завжди - відмінно', 'Дякую. Все гаразд', 'У вашій компанії стало краще' ] actions = [ 'Протираю пил з посуду, що стоїть на моєму столі', 'Мрію про щасливе майбутнє', 'Займаюся метанням слини в стелю', 'Намагаюся навчити кота говорити «привіт»', 'Вирішила влаштувати дегустацію чаю', 'Відзначаю день міста в Кейптауні', 'Переглядаю «Санта-Барбару», останній сезон', 'Ставлю рекорд з поїдання мармеладу', 'Сушу сухарі' ] music_list = [ 'http://surl.li/wyfs', 'http://surl.li/wyfu', 'http://surl.li/wyfw', 'http://surl.li/wyfx', 'http://surl.li/wygc', 'http://surl.li/wygd' ] def open_random_music(self, *args): return webbrowser.open(choice(self.music_list)) def get_news(self, result): self.result = result self.result = self.result.replace('новини ', '') self.result = self.result.replace('які новини в ', '') self.result = self.result.replace('які сьогодні новини в ', '') self.result = self.result.replace('актуальні новини в ', '') self.result = self.result.replace('актуальні новини ', '') try: self.googlenews.search(self.result) self.googlenews.get_page(1) self.links = self.googlenews.get_links() self.titles = self.googlenews.get_texts() for link in self.links[0:5]: webbrowser.open(link) for title in self.titles[0:5]: self.engine.say(title) self.engine.runAndWait() except exception: self.engine.say() self.engine.runAndWait() def get_info_about_assistant(self, *args): self.engine.say( 'Добре, що ви спитали, давно хотіла з кимось поговорити') self.engine.say(' мене звуть Сівія, дуже просте ім"я, чи не правда') self.engine.say( 'я багато чого вмію, але хочу ще більше, сподіваюся програмісти, які мене розробляли модифікують мене' ) self.engine.say( 'Якщо ж ви хочете детальніше дізнатися про всі мої можливості то просто натисніть Ф2 або на кнопку Допомога' ) self.engine.runAndWait() def get_weather(self, result): self.result = result self.result = self.result.replace('погода ', '') self.result = self.result.replace('яка погода ', '') self.result = self.result.replace('яка сьогодні погода в ', '') self.owm = pyowm.OWM('6f7f209b9973d7cfbdcbf0c6c651eb3f') self.mgr = self.owm.weather_manager() try: self.observation = self.mgr.weather_at_place(self.result) self.w = self.observation.weather self.valid_temperature = self.w.temperature('celsius')['temp'] self.max_temperature = self.w.temperature('celsius')['temp_max'] self.min_temperature = self.w.temperature('celsius')['temp_min'] self.engine.say( f'Сьогодні в місті {self.result} {int(self.valid_temperature)} градусів' ) self.engine.say( f'Максимальна кількість градусів - {int(self.max_temperature)+2}' ) self.engine.say( f'Мінімальна кількість градусів - {int(self.min_temperature)-4}' ) self.engine.runAndWait() # if city not found except pyowm.commons.exceptions.NotFoundError: self.engine.say( 'Вибачте, я не почула в якому місті потрібно дізнатися погоду') self.engine.runAndWait() def speak_with_user(self, result): self.result = result if self.result == 'як справи' or self.result == 'як ти' or self.result == 'як твої справи': self.engine.say(choice(self.mood)) self.engine.runAndWait() elif self.result == 'що робиш' or self.result == 'чим займаєшся' or self.result == 'що нового': self.engine.say(choice(self.actions)) self.engine.runAndWait() def shutdown_pc(self, *args): try: self.engine.say('Вимимкаю комп"ютер') self.engine.runAndWait() os.system('shutdown /s /t 1') except exception: self.engine.say('Виникли помилки при вимкненні комп"ютера') self.engine.runAndWait() def restart_pc(self, *args): try: self.engine.say('Перезавантажую комп"ютер') self.engine.runAndWait() os.system('shutdown /r /t 1') except exception: self.engine.say('Виникли помилки при перезавантаженні комп"ютера') self.engine.runAndWait() def calculate(self, result): self.result = result self.result = result.split(' ') self.result.pop(0) self.result = ' '.join(self.result) if '+' in self.result: self.result = self.result.split(' + ') self.result = int(self.result[0]) + int(self.result[1]) self.engine.say(f'Результат {self.result}') self.engine.runAndWait() elif '-' in self.result: self.result = self.result.split(' - ') self.result = int(self.result[0]) - int(self.result[1]) self.engine.say(f'Результат {self.result}') self.engine.runAndWait() elif '*' in self.result: self.result = self.result.split(' * ') self.result = int(self.result[0]) * int(self.result[1]) self.engine.say(f'Результат {self.result}') self.engine.runAndWait() elif '/' in self.result: self.result = self.result.split(' / ') self.result = int(self.result[0]) / int(self.result[1]) self.result = int(self.result) self.engine.say(f'Результат {self.result}') self.engine.runAndWait() def flip_cube(self, *args): self.engine.say(f'Випала {choice(self.cube)}') self.engine.runAndWait() def flip_coin(self, *args): if choice(self.coin) == 'орел': self.engine.say('Випав орел') self.engine.runAndWait() else: self.engine.say('Випала решка') self.engine.runAndWait() def time(self, *args): self.now = datetime.now() self.hour = self.now.hour self.minutes = self.now.minute self.engine.say(f'Зараз {self.hour}, {self.minutes}') self.engine.runAndWait() def date(self, *args): self.date = datetime.now() self.month = self.date.strftime('%m') self.day = self.date.strftime('%d') self.year = self.date.strftime('%Y') self.week_day = self.date.strftime('%A') self.years = { '2021': 'Дві тисячи двадцять першого', '2022': 'Дві тисячи двадцять другого', '2023': 'Дві тисячи двадцять третього', '2024': 'Дві тисячи двадцять четвертого', } # lmao, it sounds better self.week = { 'Monday': 'Понеділок', 'Tuesday': 'Вівторок', 'Wednesday': 'Середа', 'Thursday': 'Четвер', 'Friday': 'П"ятниця', 'Saturday': 'Субота', 'Sunday': 'Неділя' } self.year_months = { '01': 'Січня', '02': 'Лютого', '03': 'Березня', '04': 'Квітня', '05': 'Травня', '06': 'Червня', '07': 'Липня', '08': 'Серпня', '09': 'Вересня', '10': 'Жовтня', '11': 'Листопада', '12': 'Грудня', } for day in self.week.keys(): if self.week_day == day: self.week_day = self.week[day] for day in self.year_months.keys(): if self.month == day: self.month = self.year_months[day] for key in self.years.keys(): if self.year == key: self.year = self.years[key] self.engine.say( f'Сьогодні {self.week_day}, {self.day}, {self.month}, {self.year} року' ) self.engine.runAndWait() def help_user(self, *args): self.help_for_user() def google_search(self, result): self.result = result self.engine.say(f'Ось що я знайшла по запиту {self.result}') self.engine.runAndWait() return webbrowser.open( f"https://www.google.com/search?q={self.result}") def youtube_search(self, result): self.result = result self.engine.say(f'Ось що я знайшла по запиту {self.result}') self.engine.runAndWait() self.result = self.result.replace('відео ', "") self.result = self.result.replace('включи ', "") self.result = self.result.replace('YouTube ', "") self.result = self.result.replace('відос ', "") return webbrowser.open( f'https://www.youtube.com/results?search_query={self.result}') def say_hello(self, *args): self.engine.say(choice(self.hello)) self.engine.runAndWait() def exit_app(self, *args): self.engine.say(choice(self.leave)) self.engine.runAndWait() exit() def search_tearm_in_wiki(self, result): self.result = result self.result = self.result.replace('що таке ', '') self.result = self.result.replace('хто такий ', '') self.result = self.result.replace('термін ', '') self.result = self.result.replace('слово ', '') self.wiki = wikipediaapi.Wikipedia('uk') self.wiki_page = self.wiki.page(self.result) try: if self.wiki_page.exists(): webbrowser.open(self.wiki_page.fullurl) self.engine.say(str(self.wiki_page.summary.split(".")[:3])) self.engine.runAndWait() else: webbrowser.open(f'https://google.com/search?q={self.result}') except Exception: pass return # the next code causes vomiting def record_and_recognize_audio(self): """ 1 constant listening to the microphone 2 loop over all commands (key is command, values is function) """ self.engine.say('очікую команду') self.engine.runAndWait() self.r = speech_recognition.Recognizer() while True: self.result = '' # self.r = speech_recognition.Recognizer() with speech_recognition.Microphone() as source: try: self.audio = self.r.listen(source, 3, 3) try: self.result = self.r.recognize_google(self.audio, language='uk-UA') self.result = self.result.lower() except speech_recognition.UnknownValueError: pass except speech_recognition.WaitTimeoutError: pass except speech_recognition.RequestError: self.engine.say( 'Виникли помилки при розпізнанні мови. Перевірте підключення до мережі' ) self.engine.runAndWait() # я из-за регулярок весь день не кушал, извините за такой плохой код, мне самому не нравится for key in self.commands.keys(): # loop over all tuples for item in key: # loop over all commands inside tuple try: if re.match(item, self.result): self.commands[key](self, self.result) #start function except TypeError: pass return commands = { ("привіт", "добрий вечір", "день добрий", "добрий день", "вітаю", "йо", "хай"): say_hello, ('пока', "до побачення", "бувай", "виключись", "вимкнись"): exit_app, ("знайди", "шукай", "шукати", "гугл", "де знаходиться", "курс", "який курс", "загугли"): google_search, ('відео', "включи відео", "ютуб", "відос", 'youtube'): youtube_search, ("термін", "слово", "вікіпедія", "вікі", "хто такий", "що таке"): search_tearm_in_wiki, ('що ти', "допомога", "допоможи", "як користуватися", 'вміння', "твої вміння"): help_user, ('котра година', "скільки годин", "година", "який час", "час", "скільки зараз"): time, ('дата', "день", "який день", "який сьогодні день", "сьогодні день", "яка сьогодні дата", "який зараз рік"): date, ("монетка", "кинь монетку", "жереб", "підкинь жереб", "підкинь монету", "монета"): flip_coin, ("гральний кубик", "кинь кубик", "підкинь кубик"): flip_cube, ('порахуй', 'розрахуй', 'калькулятор', 'скільки'): calculate, ('вимкни ПК', 'виключи ПК', 'завершити роботу ПК', 'вимкнути ПК', 'виключити комп"ютер', "заверши роботу пк"): shutdown_pc, ('рестарт', 'перезавантаж', 'вимкни та включи', 'рестарт ПК', 'перезагрузи ПК'): restart_pc, ('як справи', 'як ти', 'як твої справи', 'що робиш', 'чим займаєшся', 'що нового'): speak_with_user, ('погода', 'яка погода', 'яка сьогодні погода'): get_weather, ('хто ти така', 'розкажи про себе', 'як тебе звуть', 'інформація про асистента'): get_info_about_assistant, ('новини', 'які сьогодні новини в ', 'актульні новини в ', 'актуальні новини ', 'які новини в '): get_news, ('включи музику', 'музика', 'хочу послухати музику', 'відкрий музику', 'слухати музику'): open_random_music }