Голосовые боты — это программы на базе искусственного интеллекта, которые общаются с людьми. Они понимают естественные языки и синтезируют речь для этого взаимодействия. Не вдаваясь в технические подробности того, как это работает, позвольте мне рассказать вам о моем коде Python, который действует как личный голосовой помощник.
Во-первых, давайте пройдемся по библиотекам, которые используются для кодирования нашего голосового помощника.
- Библиотека распознавания речи
Эта библиотека используется для определения речи человека на естественном языке, а затем преобразует его в текстовую форму, чтобы наш помощник мог ответить соответствующим образом. Ссылка для скачивания этой библиотеки приведена ниже.
https://pypi.org/project/SpeechRecognition/ - pyttsx3 Библиотека
После того, как помощник понял человеческий язык, для произнесения ответа мы используем эту библиотеку. Основное преимущество этой библиотеки в том, что она работает в автономном режиме. Ссылка для загрузки этой библиотеки приведена ниже.
https://pypi.org/project/pyttsx3/ - Библиотека neuralintents
Это новая библиотека, выпущенная 10 марта 2021 г. (версия 0.0.3). Он выполняет все необходимые нам функции и очень прост в использовании. Эта библиотека используется для создания простых интерфейсов и чат-ботов. Ссылка для скачивания этой библиотеки приведена ниже.
https://pypi.org/project/neuralintents/
Еще до того, как мы начнем кодировать, нам нужен файл «intents.json», в котором хранятся ответы на набор входных данных пользователя. К этому файлу JSON обращается голосовой помощник и соответствующий ответ.
{"intents": [ { "tag": "greeting", "patterns": ["Hey", "Hello", "Hi", "What's up?", "Good Day"], "responses": ["Hello there!", "Hello, what can I do for you?"] }, { "tag": "create_note", "patterns": ["New note", "Create a note"], "responses": [""] }, { "tag": "add_todo", "patterns": ["New item", "Add an item"], "responses": [""] }, { "tag": "show_todos", "patterns": ["Show my todos", "What is on my list"], "responses": [""] }, { "tag": "exit", "patterns": ["Bye", "See you", "Quit", "Exit"], "responses": ["Thank you for spending time with me."] }, ]}
Давайте начнем программировать, импортировав все необходимые библиотеки.
import speech_recognition import pyttsx3 as tts from neuralintents import GenericAssistant import sys
После импорта всех необходимых модулей нам нужно создать экземпляр говорящего и распознавателя, чтобы помощник мог фиксировать то, что мы, люди, говорим, и преобразовывать его в текстовую форму, а оставшийся код поясняется комментариями внутри программы. Список с именем «todo_list» создается для работы со списком, который помощник поддерживает для нас.
recognizer = speech_recognizer.Recognizer() speaker = tts.init() speaker.setProperty('rate', 150) #rate is property, 150 is the value #Creating an object to access the todo list todo_list = ['Go Shopping', 'Clean Room']
Теперь давайте начнем программировать функции для каждой из необходимых задач. В приведенном ниже фрагменте кода показано, как система реагирует на приветствие.
#Greeting the user def greeting(): speaker.say("Hello, What can I do for you?") speaker.runAndWait()
Мы кодируем приведенную ниже функцию для программы, чтобы создавать заметки на основе требований пользователя и сохранять их в определенном файле.
#Function to create and add new note def create_note(): global recognizer #Making the variable global speaker.say("What do you want to write as note?") speaker.runAndWait() #Asking for user input done = True #The try block is used in case the microphone fails while done: try: with speech_recognition.Microphone() as mic: recognizer.adjust_for_ambient_noise(mic, duration = 0.2) #Accepting user voice input audio = recognizer.listen(mic) note = recognizer.recognize_google(audio) note = note.lower() speaker.say("Choose a filename!") speaker.runAndWait() recognizer.adjust_for_ambient_noise(mic, duration = 0.2) #Accepting user filename audio = recognizer.listen(mic) filename = recognizer.recognize_google(audio) filename = filename.lower() with open(filename + '.txt', 'w') as f: f.write(note) done = False #Terminating the while loop if listened properly speaker.say("New note successfully created") speaker.runAndWait() except speech_recognition.UnknownValueError: recognizer = speech_recognizer.Recognizer() speaker.say("I did not understand you. Please try again!") speaker.runAndWait()
Список дел является обязательным в каждом голосовом помощнике, поскольку он помогает нам помнить задачи или действия, которые необходимо выполнить. Приведенный ниже код показывает нам, как такой список дел может быть создан и прочитан пользователю. Также была создана функция добавления новых элементов в список.
#Speaking out the list def show_todo(): speaker.say("Your list contains the following elements") for item in todo_list: speaker.say(item) speaker.runAndWait() #Adding elements to a todo list def add_todo(); global recognizer speaker.say("What item do you want to add?") speaker.runAndWait() done = True while done: try: with speech_recognition.Microphone() as mic: recognizer.adjust_for_ambient_noise(mic, duration = 0.3) audio = recognizer.listen(mic) item = recognizer.recognize_google(audio) item = item.lower() todo_list.append(item) done = False speaker.say(item+" was added to the list!") speaker.runAndWait() except speech_recognition.UnknownValueError: recognizer = speech_recognition.Recognizer() speaker.say("I'm sorry, can you repeat it again!") speaker.runAndWait()
Теперь мы создаем функцию выхода, чтобы отправить пользователя: P
#Exiting from your assistant def close(): speaker.say("Bye. Coming back soon!") speaker.runAndWait() sys.exit(0)
После определения всех функций мы должны сопоставить каждую из функций с одним из объектов в файле JSON. Синтаксис для этого приведен ниже.
mappings = { "greeting": hello, "create_node": create_node, "add_todo": add_todo, "show_todo": show_todo, "exit": close }
Примечание. В приведенном выше коде не забудьте сопоставить имена функций, а не вызывать функцию. Программа автоматически вызывает функцию на основе имен функций.
Последнее в программе предназначено для обучения модели распознаванию намерений. Эта часть обучения выполняется с помощью метода GenericAssistant, который присутствует в модуле neurointents.
#Training a model to recognize the intents assistant = GenericAssistant('intents.json',intent_methods=mappings) assistant.train_model() assistant.request()
Теперь мы создали голосового помощника, который работает в соответствии с намерениями пользователя. Нам просто нужно создать фрагмент кода, который постоянно слушает пользователя. В приведенном ниже коде показано, как наш помощник продолжает прослушивать ввод пользователя.
while True: try: with speech_recognition.Microphone() as mic: recognizer.adjust_for_ambient_sound9mic, duration = 0.2) audio = recognizer.listen(mic) message = recognizer.recognize_google(audio) message = message.audio() assistant.request(message) except speech_recogniton.UnkownValueError: recognizer = speech_recognition.Recognizer()
Весь код присутствует в моем репозитории GitHub. При необходимости проверьте файл.
https://github.com/ThejasBK/Python-Projects/blob/master/virtualAssistant.py