В этой статье я покажу вам, как создать собственного виртуального помощника с помощью языка программирования Python! Виртуальный помощник - это приложение, которое может понимать голосовые команды и выполнять задачи за пользователя. Помощник Google и Amazon Alexa - хорошие примеры виртуальных помощников.
Если вы предпочитаете не читать эту статью и хотите ее видеопрезентацию, вы можете проверить Видео YouTube ниже. В нем подробно рассматривается все, что описано в этой статье, и это поможет вам легко начать разработку собственной программы. Или вы можете использовать оба в качестве дополнительных материалов для обучения!
Начать программирование:
Начну с того, что я хочу, чтобы эта программа делала. Эта программа будет запускать определенные команды после того, как голос пользователя даст пробуждающее слово. Затем эта программа будет выполнять эти команды в звуковой форме обратно пользователю.
Необходимо выполнить следующие команды:
- Скажите пользователю случайное приветствие, если он использовал приветственное слово.
- Получить дату для пользователя
- Получите время для пользователя
- Получение информации о человеке для пользователя
(ПРИМЕЧАНИЕ: для этого мы можем использовать Википедию)
Например, пользователь может сказать «привет, компьютер, который час?» Или «хорошо, компьютер, какая сегодня дата?», И виртуальный помощник ответит соответствующим образом.
Теперь давайте напишем в комментариях краткое описание того, что будет делать эта программа.
# Description: This is a virtual assistant program that will greet # you with a random greeting, get the date, time, and # information on a person.
Нам нужно установить несколько пакетов pyadio
SpeechRecognition
gTTS
и wikipedia
.
pip install pyaudio pip install SpeechRecognition pip install gTTS pip install wikipedia
Импортируйте библиотеки и пакеты
Затем импортируйте некоторые библиотеки, которые будут использоваться в этой программе. Мы будем использовать библиотеку warnings
, чтобы игнорировать предупреждения, которые мы получаем с помощью этой программы. Библиотека speech_recognition
будет использоваться для распознавания речи :).
Библиотека os
позволит нам взаимодействовать с операционной системой. Библиотека gtts
поможет нам преобразовать текст в речь. Библиотека wikipedia
позволит нам получать информацию о человеке из Википедии. Библиотека datetime
позволит нам получить текущую дату и время. Библиотека calendar
позволит нам получить день недели, а библиотека random
будет использоваться для рандомизации.
# Import the libraries import speech_recognition as sr import os from gtts import gTTS import datetime import warnings import calendar import random import wikipedia
Мы будем игнорировать любые предупреждающие сообщения, которые могут появиться во время выполнения этой программы.
# Ignore any warning messages warnings.filterwarnings('ignore')
Создавайте полезные функции
Мы начнем создавать полезные функции, которые сделают код чистым и выполнят определенные команды.
Сначала нам нужна функция, которая может принимать звук (голосовую команду) и распознавать речь, а затем возвращать эту речь в виде строки (текста). Назовем эту функцию recordAudio ().
# Record audio and return it as a string def recordAudio(): # Record the audio r = sr.Recognizer() with sr.Microphone() as source: print('Say something!') audio = r.listen(source) # Speech recognition using Google's Speech Recognition data = '' try: data = r.recognize_google(audio) print('You said: ' + data) except sr.UnknownValueError: print('Google Speech Recognition could not understand') except sr.RequestError as e: print('Request error from Google Speech Recognition') return data
Идеально ! Теперь у нас есть функция для записи звука. Давайте создадим функцию для программы, которая будет отвечать пользователю звуком, и назовем ее assistantResponse (). Функция принимает строку (текст) и преобразует ее в аудио. Я также буду использовать эту функцию для вывода текста на экран в целях тестирования.
# Function to get the virtual assistant response def assistantResponse(text): print(text) # Convert the text to speech myobj = gTTS(text=text, lang='en', slow=False) # Save the converted audio to a file myobj.save('assistant_response.mp3') # Play the converted file os.system('start assistant_response.mp3')
Затем мы создадим функцию, которая будет принимать некоторый текст и проверять, было ли в этом тексте задано пробуждающее слово. Для этой программы я создал два слова пробуждения: «хорошо, компьютер» и «, привет, компьютер», похожие на слова пробуждения помощника Google «Привет, Google» и «окей, Google». Если в тексте было обнаружено пробуждающее слово, функция вернет True, в противном случае она вернет False.
# A function to check for wake word(s) def wakeWord(text): WAKE_WORDS = ['hey computer', 'okay computer'] text = text.lower() # Convert the text to all lower case words # Check to see if the users command/text contains a wake word for phrase in WAKE_WORDS: if phrase in text: return True # If the wake word was not found return false return False
Теперь я создам функцию для возврата сегодняшней даты в виде строки. Например, он вернет «Сегодня понедельник, 21 октября», если сегодня действительно был понедельник 21 октября. Назовем эту функцию getDate ().
def getDate(): now = datetime.datetime.now() my_date = datetime.datetime.today() weekday = calendar.day_name[my_date.weekday()]# e.g. Monday monthNum = now.month dayNum = now.day month_names = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] ordinalNumbers = ['1st', '2nd', '3rd', '4th', '5th', '6th', '7th', '8th', '9th', '10th', '11th', '12th', '13th', '14th', '15th', '16th', '17th', '18th', '19th', '20th', '21st', '22nd', '23rd', '24th', '25th', '26th', '27th', '28th', '29th', '30th', '31st'] return 'Today is ' + weekday + ' ' + month_names[monthNum - 1] + ' the ' + ordinalNumbers[dayNum - 1] + '.'
Затем мы создадим функцию, которая принимает текст и возвращает случайный ответ приветствия в виде текста для пользователя, если пользователь сказал ввод приветствия, например, «привет» или «привет», функция вернет какое-то случайное приветствие, например «привет» '. Эта функция будет называться приветствие ().
# Function to return a random greeting response def greeting(text): # Greeting Inputs GREETING_INPUTS = ['hi', 'hey', 'hola', 'greetings', 'wassup', 'hello'] # Greeting Response back to the user GREETING_RESPONSES = ['howdy', 'whats good', 'hello', 'hey there'] # If the users input is a greeting, then return random response for word in text.split(): if word.lower() in GREETING_INPUTS: return random.choice(GREETING_RESPONSES) + '.' # If no greeting was detected then return an empty string return ''
И последнее, но не менее важное: мы создадим функцию для получения имени и фамилии человека из текста после определения ключевой команды «who is». Как только мы обнаружим слово «who», за которым следует слово «is», мы вернем следующие два слова как одну строку (следующие два слова должны быть именем человека, за которым следует его фамилия).
Например, если пользователь спрашивает «Кто такой Леброн Джеймс?», Функция примет этот текст и просто вернет «Леброн Джеймс». Мы будем использовать эту функцию позже, чтобы получить краткое изложение о человеке из двух предложений из Википедии. Эта функция будет называться getPerson ().
# Function to get a person first and last name def getPerson(text): wordList = text.split()# Split the text into a list of words for i in range(0, len(wordList)): if i + 3 <= len(wordList) - 1 and wordList[i].lower() == 'who' and wordList[i + 1].lower() == 'is': return wordList[i + 2] + ' ' + wordList[i + 3]
Создать основную программу
Все самые популярные виртуальные помощники (Google Assistant, Amazon Alexa и Apple Siri) постоянно слушают ваш разговор и ждут, чтобы выполнить команды только после того, как услышат слово пробуждения, такое как «Окей, Google», «Алекса» или «Привет, Siri».
Это означает, что нам нужно, чтобы программа постоянно прослушивала слово пробуждения, поэтому нам понадобится непрерывный цикл, который будет выполняться постоянно, записывая звук.
После произнесения пробуждающего слова мы проверим, произнес ли пользователь приветствие, «дату», «время» или «кто это», и попросим компьютер ответить соответствующим образом звуком.
while True: # Record the audio text = recordAudio() response = '' #Empty response string # Checking for the wake word/phrase if (wakeWord(text) == True): # Check for greetings by the user response = response + greeting(text) # Check to see if the user said date if ('date' in text): get_date = getDate() response = response + ' ' + get_date # Check to see if the user said time if('time' in text): now = datetime.datetime.now() meridiem = '' if now.hour >= 12: meridiem = 'p.m' #Post Meridiem (PM) hour = now.hour - 12 else: meridiem = 'a.m'#Ante Meridiem (AM) hour = now.hour # Convert minute into a proper string if now.minute < 10: minute = '0'+str(now.minute) else: minute = str(now.minute) response = response + ' '+ 'It is '+ str(hour)+ ':'+minute+' '+meridiem+' .' # Check to see if the user said 'who is' if ('who is' in text): person = getPerson(text) wiki = wikipedia.summary(person, sentences=2) response = response + ' ' + wiki # Assistant Audio Response assistantResponse(response)
Вот и все, мы создали эту программу!
Если вам также интересно узнать больше о машинном обучении, чтобы сразу приступить к решению проблем и примерам, я настоятельно рекомендую вам ознакомиться с Практическое машинное обучение с помощью Scikit-Learn и TensorFlow: концепции, инструменты и методы для создания интеллектуальных систем . Это отличная книга, которая поможет новичкам научиться писать программы машинного обучения и понять концепции машинного обучения.
Спасибо, что прочитали эту статью. Надеюсь, она будет вам полезна! Если вам понравилась эта статья и вы нашли ее полезной, пожалуйста, оставьте несколько аплодисментов, чтобы выразить свою признательность. Продолжайте обучение, и если вам нравится машинное обучение, математика, информатика, программирование или анализ алгоритмов, посетите и подпишитесь на мои каналы YouTube (randerson112358 и compsci112358).
Источники:
[1] Начало работы с Pythons Wikipedia API
[2] Создайте своего первого голосового помощника
[3] Распознавание речи Python
[4] Распознавание речи
[5] Персональный помощник Джарвис на Python