Практические, пошаговые инструкции и объяснения.

Голосовые помощники становятся все более популярными, а с появлением искусственного интеллекта и машинного обучения создавать собственные помощники стало проще, чем когда-либо. В этой статье мы покажем вам, как создать собственного голосового помощника с помощью Python, популярного языка программирования, известного своей простотой и легкостью использования. К концу этой статьи у вас будет хорошее представление о том, как создать простого, но мощного голосового помощника, и вы будете на пути к созданию собственного личного помощника на основе ИИ.

Пришло время запачкать руки. Не стесняйтесь взять свой ноутбук и просмотреть следующие примеры кода….

🔹Необходимые библиотеки:

import speech_recognition as sr
import pyttsx3
import datetime
import webbrowser
  1. import speech_recognition as sr:эта библиотека используется для распознавания речи и преобразования ее в текст. Он предоставляет класс Recognizer, который можно использовать для прослушивания голосовой команды пользователя.
  2. import pyttsx3: эта библиотека используется для создания речевых ответов. Он предоставляет механизм преобразования текста в речь (TTS), который можно использовать для преобразования текста в речь.
  3. import datetime: эта библиотека используется для получения текущего времени. Класс datetime предоставляет текущую дату и время, которые используются для приветствия пользователя в зависимости от времени суток.
  4. import webbrowser: эта библиотека используется для открытия веб-браузеров. Он предоставляет метод «открыть», который принимает URL-адрес в качестве параметра и открывает соответствующий веб-сайт. Он используется в коде для открытия веб-сайтов YouTube и Twitter по команде пользователя.

🔹Инициализация механизмов распознавания речи и преобразования текста в речь:

speech = sr.Recognizer()
try:
    engine = pyttsx3.init()
except ImportError:
    print('Requested driver is not found')
except RuntimeError:
    print('driver faild to intilize')

Этот код создает экземпляр класса Recognizer из библиотеки speech_recognition и присваивает его переменной «speech». Затем он использует блок try-except для обработки любых ошибок, которые могут возникнуть при инициализации речевого движка.

Он начинается с engine = pyttsx3.init(), который инициализирует речевой движок, что означает запуск движка TTS.

Затем за блоком try следуют два оператора исключения. Первый except ImportError: обрабатывает ошибку ImportError, которая может возникнуть, если запрошенный драйвер не найден. Это означает, что если библиотека не найдена или неправильно импортирована, будет напечатано «Запрошенный драйвер не найден».

Второй, except RuntimeError:, обрабатывает ошибку RuntimeError, которая может возникнуть, если драйвер не инициализируется. Это означает, что если двигатель не запустится, он напечатает «не удалось инициализировать драйвер».

Это делается для того, чтобы отловить любые ошибки, которые могут возникнуть при инициализации движка, и корректно их обработать, чтобы программа не вылетала, а пользователь мог понять, что пошло не так.

🔹Настройка голоса и скорости движка преобразования текста в речь:

voices = engine.getProperty('voices')
engine.setProperty('voice','HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_EN-US_ZIRA_11.0')
rate = engine.getProperty('rate')
engine.setProperty('rate', rate)

Этот код используется для установки голоса и скорости речи, генерируемой механизмом преобразования текста в речь (TTS).

  1. voices = engine.getProperty('voices'): эта строка получает список доступных голосов от механизма TTS и присваивает его переменной 'voices'. Это можно использовать для получения списка доступных голосов, которые можно использовать для генерации речи.
  2. engine.setProperty('voice','HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_EN-US_ZIRA_11.0'):Эта строка устанавливает голосовое свойство для движка. Он устанавливает голос механизма TTS на тот, который указан в ключе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_EN-US_ZIRA_11.0. Этот ключ относится к определенному голосу, установленному на компьютере пользователя.
  3. rate = engine.getProperty('rate'): эта строка получает текущую скорость речи от механизма TTS и присваивает ее переменной 'rate'. Это можно использовать для получения текущей скорости речи, которую можно использовать для установки скорости на определенное значение.
  4. engine.setProperty('rate', rate):Эта строка устанавливает свойство скорости для движка. Он устанавливает скорость речи на значение, хранящееся в переменной 'rate'. Это используется для установки скорости речи на значение, полученное на предыдущем шаге.

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

🔹Преобразование текста в речь с помощью механизма преобразования текста в речь:

def speak_text_cmd(cmd):
    engine.say(cmd)
    engine.runAndWait()

Этот код определяет функцию с именем speak_text_cmd(cmd), которая принимает команду (cmd) в качестве параметра и произносит команду с помощью механизма преобразования текста в речь (TTS).

  1. def speak_text_cmd(cmd): эта строка определяет функцию с именем 'speak_text_cmd', которая принимает единственный параметр 'cmd'.
  2. engine.say(cmd): В этой строке используется метод say механизма TTS для произнесения команды, переданной в качестве параметра. Метод 'say' принимает команду и преобразует ее в речь.
  3. engine.runAndWait(): в этой строке используется метод runAndWait механизма TTS для запуска команды и ожидания ее завершения. Это означает, что он будет ждать, пока движок полностью произнесет команду, прежде чем перейти к следующему шагу.

🔹Распознавание и возврат голосовой команды:

def read_voice_cmd():
    voice_text = ''
    print('I am listening you...')

    with sr.Microphone() as source:
        audio = speech.listen(source)

    try:

        voice_text = speech.recognize_google(audio)

    except sr.UnknownValueError:
        pass
    except sr.RequestError as e:
        print('Network error.')
    return voice_text

Этот код определяет функцию с именем read_voice_cmd(), которая прослушивает голосовую команду пользователя и возвращает команду в виде строки.

  1. def read_voice_cmd():: в этой строке определяется функция с именем «read_voice_cmd».
  2. voice_text = '': эта строка создает пустую строку с именем 'voice_text', которая будет использоваться для хранения распознанной голосовой команды.
  3. print('I am listening you...'): в этой строке выводится сообщение "Я вас слушаю...", чтобы пользователь знал, что функция ожидает голосовой команды.
  4. with sr.Microphone() as source:: эта строка создает менеджер контекста, используя класс Microphone библиотеки speech_recognition. Он открывает микрофон по умолчанию в качестве источника звука и назначает его переменной «источник».
  5. audio = speech.listen(source): в этой строке используется метод listen класса Recognizer для прослушивания звука из источника (микрофона) и присваивается звук переменной audio.
  6. try:: эта строка запускает блок try.
  7. voice_text = speech.recognize_google(audio): эта строка использует метод recognize_google класса Recognizer для распознавания голосовой команды из аудио и присваивает ее переменной voice_text.
  8. except sr.UnknownValueError:: эта строка запускает блок исключений, обрабатывающий ошибку UnknownValueError, которая может возникнуть, если служба распознавания речи не может понять звук. Это пройдет, и функция вернет пустую строку.
  9. except sr.RequestError as e:: эта строка запускает блок исключений, обрабатывающий RequestError, который может возникнуть в случае сетевой ошибки. При возникновении этой ошибки функция напечатает «Ошибка сети».
  10. return voice_text:Эта строка возвращает значение переменной 'voice_text', которая содержит распознанную голосовую команду.

🔹Преобразование аудио в речь с помощью механизма преобразования текста в речь:

def speak(audio):
    engine.say(audio)
    engine.runAndWait()

Этот код определяет функцию с именем speak(audio), которая принимает звук в качестве параметра и произносит его с помощью механизма преобразования текста в речь (TTS).

  1. def speak(audio):: в этой строке определяется функция "говорить", которая принимает единственный параметр "аудио".
  2. engine.say(audio): в этой строке используется метод say механизма TTS для произнесения аудио, переданного в качестве параметра. Метод 'say' берет звук и преобразует его в речь.
  3. engine.runAndWait(): в этой строке используется метод runAndWait механизма TTS для запуска команды и ожидания ее завершения. Это означает, что он будет ждать, пока движок полностью произнесет звук, прежде чем он перейдет к следующему шагу.

Эта функция используется для преобразования звука, переданного в качестве параметра, в речь с помощью механизма TTS. Это позволяет пользователю легко преобразовывать звук в речь и воспроизводить его с помощью механизма TTS.

🔹Приветствие пользователя в зависимости от времени суток:

def wishMe():
    hour=int(datetime.datetime.now().hour)


    if hour>=0 and hour<12:
        speak('Good Morning Aarafat.')

    elif hour>=12 and hour<= 17:
        speak('Good Afternoon Aarafat.')

    elif hour>17 and hour<=19:
        speak('Good evening Aarafat.')

    else:
        speak('Good night Aarafat.')

Н.Б. Вместо «Аарафат» вы можете использовать свое собственное имя, чтобы сделать его более персонализированным.

Этот код определяет функцию с именем wishMe(), которая приветствует пользователя в зависимости от времени суток.

  1. def wishMe()::Эта строка определяет функцию с именем 'wishMe'.
  2. hour=int(datetime.datetime.now().hour): в этой строке используется метод datetime.now().hour, чтобы получить текущий час, преобразовать его в целое число и присвоить его переменной 'hour'.
  3. if hour>=0 and hour<12::Эта строка проверяет, находится ли час в диапазоне от 0 до 12, если это правда, она входит в блок if.
  4. speak('Good Morning Aarafat.'): в этой строке используется функция "говорить", чтобы сказать пользователю "Доброе утро, Арафат".
  5. elif hour>=12 and hour<= 17:: эта строка проверяет, находится ли час между 12 и 17, если это правда, она входит в блок elif.
  6. speak('Good Afternoon Aarafat.'): в этой строке используется функция "говорить", чтобы сказать пользователю "Добрый день, Арафат".
  7. elif hour>17 and hour<=19:: эта строка проверяет, находится ли час между 17 и 19, если это правда, она входит в блок elif.
  8. speak('Good evening Aarafat.'): в этой строке используется функция "говорить", чтобы сказать пользователю "Добрый вечер, Аарафат".
  9. else:: если ни одно из предыдущих условий не выполняется, он переходит в блок else.
  10. speak('Good night Aarafat.'):Эта строка использует функцию "говорить", чтобы сказать пользователю "Спокойной ночи, Арафат".

🔹Интерпретация и реагирование на голосовые команды:

if __name__=='__main__':
    wishMe()
    speak_text_cmd('Hi, I am Titan, Your artificial friend. How can i help you?')

    while True:
        voice_note=read_voice_cmd()
        print('cmd:{}'.format(voice_note))

        if 'hello' in voice_note:
            speak_text_cmd('Hello Aarafat. How can i help you?')
            continue

        elif 'who are you' in voice_note:
            speak_text_cmd('I am Titan. An  artificial friend of Mr. Aarafat, Mr. Arafat created me on 30 december, '
                           '2020.')
            continue

        elif 'what is your name' in voice_note:
            speak_text_cmd('I am Titan, Your artificial friend.')
            continue

        elif 'goodbye Titan' in voice_note:
            speak_text_cmd('Bye Mr. Aarafat. Happy to help you. Have a good day.')
            exit()

        elif 'open YouTube' in voice_note:
            speak_text_cmd('opening youtube for you.')
            webbrowser.open('https://www.youtube.com/')

        elif 'open Twitter' in voice_note :
            speak_text_cmd('opening Twitter for you.')
            webbrowser.open('https://www.twitter.com/home')

Н.Б. Вместо «Титан» вы можете дать своему другу с искусственным интеллектом другое имя, чтобы сделать его более персонализированным.

Этот код является основным исполнительным блоком программы, именно внутри оператора if __name__=='__main__': выполняются функции и команды программы.

  1. if __name__=='__main__':: эта строка проверяет, запускается ли текущий файл как основная программа, а не импортируется как модуль. Если это так, код внутри этого блока будет выполнен.
  2. wishMe(): эта строка вызывает функцию 'wishMe', определенную ранее в коде, которая приветствует пользователя в зависимости от времени суток.
  3. speak_text_cmd('Hi, I am Titan, Your artificial friend. How can i help you?'): эта строка вызывает функцию 'speak_text_cmd' и передает строку 'Привет, я Титан, твой искусственный друг. Могу я чем-нибудь помочь?' в качестве параметра, который будет озвучен пользователю механизмом TTS.
  4. while True::Эта строка запускает бесконечный цикл.
  5. voice_note=read_voice_cmd():Эта строка присваивает возвращаемое значение функции read_voice_cmd переменной voice_note, которая содержит распознанную голосовую команду.
  6. print('cmd:{}'.format(voice_note)): эта строка выводит распознанную голосовую команду на консоль.
  7. if 'hello' in voice_note:: эта строка проверяет, находится ли строка «hello» в переменной «voice_note». Если оно истинно, оно входит в блок if.
  8. speak_text_cmd('Hello Aarafat. How can i help you?'): эта строка вызывает функцию 'speak_text_cmd' и передает строку 'Hello Aarafat. Могу я чем-нибудь помочь?' в качестве параметра, который будет озвучен пользователю механизмом TTS.
  9. continue:Эта строка указывает программе продолжить следующую итерацию цикла, пропуская любой код ниже нее.
  10. elif 'who are you' in voice_note::Эта строка проверяет, находится ли строка «кто вы» в переменной «voice_note». Если это правда, он входит в блок elif.
  11. speak_text_cmd('I am Titan. An artificial friend of Mr. Aarafat, Mr. Arafat created me on 30 december, 2020.'): эта строка вызывает функцию 'speak_text_cmd' и передает строку 'Я Титан. Искусственный друг г-на Арафата, г-н Арафат создал меня 30 декабря 2020 года». в качестве параметра, который будет озвучен пользователю механизмом TTS.
  12. elif 'what is your name' in voice_note:: эта строка проверяет, находится ли строка «как вас зовут» в переменной «voice_note». Если это правда, он входит в блок elif.
  13. speak_text_cmd('I am Titan, Your artificial friend.'): эта строка вызывает функцию «speak_text_cmd» и передает строку «Я Титан, твой искусственный друг». в качестве параметра, который будет озвучен пользователю механизмом TTS.
  14. elif 'goodbye Titan' in voice_note::Эта строка проверяет, находится ли строка «до свидания, Титан» в переменной «voice_note». Если это правда, он входит в блок elif.
  15. speak_text_cmd('Bye Mr. Aarafat. Happy to help you. Have a good day.'): эта строка вызывает функцию 'speak_text_cmd' и передает строку 'Пока, мистер Аарафат. Рад помочь вам. Хорошего дня.' в качестве параметра, который будет озвучен пользователю механизмом TTS.
  16. elif 'open YouTube' in voice_note::эта строка проверяет, находится ли строка "открыть YouTube" в переменной "voice_note". Если это правда, он входит в блок elif.
  17. speak_text_cmd('opening youtube for you.'):Эта строка вызывает функцию 'speak_text_cmd' и передает строку 'открытие youtube для вас'. в качестве параметра, который будет озвучен пользователю механизмом TTS.
  18. webbrowser.open('https://www.youtube.com/'): эта строка использует модуль веб-браузера для открытия URL-адреса https://www.youtube.com/ в веб-браузере по умолчанию. .
  19. elif 'open Twitter' in voice_note ::Эта строка проверяет, находится ли строка «открыть Twitter» в переменной «voice_note». Если это правда, он входит в блок elif.
  20. speak_text_cmd('opening Twitter for you.'): эта строка вызывает функцию «speak_text_cmd» и передает строку «открытие Twitter для вас». в качестве параметра, который будет озвучен пользователю механизмом TTS.
  21. webbrowser.open('https://www.twitter.com/home'): в этой строке используется модуль веб-браузера для открытия URL-адресаhttps://www.twitter.com/homeв веб-сайте по умолчанию. браузер.

В заключение, этот код демонстрирует использование различных библиотек, таких как speech_recognition, pyttsx3, datetime и webbrowser, для создания простого помощника искусственного интеллекта под названием Titan. Код использует библиотеку распознавания речи для прослушивания и распознавания голосовых команд, механизм преобразования текста в речь для ответа пользователю и библиотеку веб-браузера для открытия веб-страниц. Он также использует библиотеку datetime для приветствия пользователя в зависимости от времени суток. Это можно использовать в качестве отправной точки для создания более продвинутых помощников ИИ, и его можно настроить в соответствии с потребностями и предпочтениями пользователя.

Следите за мной в среде для будущих обновлений.

🦜Подпишитесь на Twitter.

💠Сила ChatGPT: понимание и изучение его возможностей!

💠Овладение искусством объектно-ориентированного программирования на Python!