Свой голосовой ассистент на Python + google

Как сделать говорящую программу на Python самостоятельно?: Озвучиваем системное время и любой текст в Windows и Linux. Используем pytts3, espeak, RHVoice, gTTS, Speech dispatcher. Синтез речи может пригодиться вам в работе над мобильным помощником, умным домом на Raspberry Pi, искусственным интеллектом, игрой, системой уведомлений и звуковым интерфейсом. Голосовые сообщения донесут информацию до пользователя, которому некогда читать текст. Кроме того, если программа умеет озвучивать свой интерфейс, она доступна незрячим и слабовидящим.  Есть системы управления компьютером без опоры на зрение. Одна из самых популярных — NVDA (NonVisual Desktop Access) — написана на Python с добавлением C++.

 



Давайте посмотрим, как использовать text-to-speech (TTS) в Python и подключать синтезаторы голоса к вашей программе. Эту статью я хотела назвать «Говорящая консоль», потому что мы будем писать консольное приложение для Windows, Linux, а потенциально — и MacOS. Потом решила выбрать более общее название, ведь от наличия GUI суть не меняется. На всякий случай поясню: консоль в данном случае — терминал Linux или знакомая пользователям Windows командная строка.

Сегодня будем пилить своего голосового ассистента, который будет слушать наш микрофон пока запущена программа и выполнять то что мы зададим в коде. Надеюсь уже интересно. Микрофона у меня нет, поэтому пришлось долго бегать и искать его, но это не важно.

Начнём с установок.

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())

 

Минутка скриншотов 🙂

 

Не знаю почему там катер, я говорил кодер, но да ладно, гугл считает что я катер 😀

теперь я приведу полный листинг программы а ниже функции из своего старого проекта в виде скриншотов. Кому будет интересно – можете глянуть С:

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 технологий взаимодействия человека с компьютером, основанных на разговорах на естественном языке.) что бы он со временем мог обучаться и разговаривать.

 

RuCoreNET - лучшее для вас!


Поделись статьей с друзьями


957 просмотров


0 0 голос
Рейтинг статьи
Подписаться
Уведомить о
guest
2 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии


Do NOT follow this link or you will be banned from the site!
2
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x
()
x

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: