Голосовые боты — это программы на базе искусственного интеллекта, которые общаются с людьми. Они понимают естественные языки и синтезируют речь для этого взаимодействия. Не вдаваясь в технические подробности того, как это работает, позвольте мне рассказать вам о моем коде Python, который действует как личный голосовой помощник.

Во-первых, давайте пройдемся по библиотекам, которые используются для кодирования нашего голосового помощника.

  1. Библиотека распознавания речи
    Эта библиотека используется для определения речи человека на естественном языке, а затем преобразует его в текстовую форму, чтобы наш помощник мог ответить соответствующим образом. Ссылка для скачивания этой библиотеки приведена ниже.
    https://pypi.org/project/SpeechRecognition/
  2. pyttsx3 Библиотека
    После того, как помощник понял человеческий язык, для произнесения ответа мы используем эту библиотеку. Основное преимущество этой библиотеки в том, что она работает в автономном режиме. Ссылка для загрузки этой библиотеки приведена ниже.
    https://pypi.org/project/pyttsx3/
  3. Библиотека 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