Свой голосовой ассистент на Python + google
Всем привет, сегодня будем пилить своего голосового ассистента, который будет слушать наш микрофон пока запущена программа и выполнять то что мы зададим в коде. Надеюсь уже интересно. Микрофона у меня нет, поэтому пришлось долго бегать и искать его, но это не важно.
Начнём с установок.
pip install SpeechRecognition pip install gTTS
После успешной установки пакетов (у меня Win10 x64, py3.7.1) можем начинать писать код.
начнём как обычно с импортов:
import speech_recognition as sr
Импортируем либу от гугла, которая использует всю мощь их серверов что бы распознать что мы там сказали, импортируем как 'sr', я думаю вам бы тоже не хотелось писать каждый раз обращение "speech_recognition.Microphone()" когда можно кратко и красиво написать "sr.Microphone()".
Итак, начнём с главной функции в которой нас будут слушать.
def command(): r = sr.Recognizer() with sr.Microphone() as source: print("Говорите") r.pause_threshold = 1 r.adjust_for_ambient_noise(source, duration=1) audio = r.listen(source)
Что же тут происходит?
Всё довольно таки просто, сначала мы инициализируем объект "r" как sr.Recognizer() а затем с помощью цикла with мы подключаем микрофон.
После print("Говорите") мы записываем звук с микрофона в течении секунды, но если говорим то дольше. Затем мы убираем посторонние шумы, то есть тот кто ближе к микрофону (точнее громче, кхе-кхе) того наша программа и будет слушать. Затем мы создаем переменную audio где будем слушать микрофон который открыли как source.
try: task = r.recognize_google(audio, language="ru-RU").lower() print("Вы сказали " + task) except: task = command() return task
Далее в try except мы заключаем код, ибо ошибок может быть очень и очень много (Добавлял эту либу к одному из своих старых проектов) . Задаем переменную task откуда будем брать то что нам отдаст гугл С: Внимательно посмотрите, мы выбираем русский язык, если же вы хотите тренировать свой английский то такой необязательный аргумент как language можно убрать. И да, желательно, что бы потом не мучатся, сделаем возврат слова в маленьких буквах.
Если же мы сказали что то невнятное то гугл вернет ошибку и в этом случае мы перезапустим функцию. Возвращать мы будем наше слово, оно нам нужно для написания функций к ассистенту.
def makeSomething(task): print(task) if "сайт" in task: print("hello") elif "питон" in task: print("Python <3") else: print("Иех, скукота")
Затем создаем функцию которая будет принимать на вход то слово которое мы сказали и делать то что мы зададим.
Для тестов я сначала выводил то что сказал. Итак, тут мы видим что если я говорю "сайт" то он будем выводить мне "hello"
Вы же можете добавить условий и функций сколько хотите для вашего удобства.
Что бы вас постоянно слушали - создаем цикл:
while True: makeSomething(command())
Минутка скриншотов :)
Не знаю почему там катер, я говорил кодер, но да ладно, гугл считает что я катер :D
теперь я приведу полный листинг программы а ниже функции из своего старого проекта в виде скриншотов. Кому будет интересно - можете глянуть С:
import speech_recognition as sr def command(): r = sr.Recognizer() with sr.Microphone() as source: print("Говорите") r.pause_threshold = 1 r.adjust_for_ambient_noise(source, duration=1) audio = r.listen(source) try: task = r.recognize_google(audio, language="ru-RU").lower() print("Вы сказали " + task) except: task = command() return task def makeSomething(task): print(task) if "сайт" in task: print("hello") elif "питон" in task: print("Python <3") else: print("Иех, скукота") while True: makeSomething(command())
Я не пишу идеальный код, я пишу лишь костыли. Вы всегда можете улучшить мой код.
Поисковики. Открывает вкладку и ищет в гугле то что я скажу. Например я говорю "ИМЯ_БОТА найди окна" и он вбивает в гугл "окна". Тоже самое с ютубом.
Здесь я парсил погоду после чего озвучивал её с помощью другой функции.
И кое что интересное, тут я создал разговорную функцию что бы бот мог поговорить со мной. Но не просто по шаблонам а подключил его к сервису DialogFlow (Dialogflow является разработчиком Google технологий взаимодействия человека с компьютером, основанных на разговорах на естественном языке.) что бы он со временем мог обучаться и разговаривать со мной. Но проект я забросил по некоторым причинам и вот хочу поделиться им с вами С: