Как создать голосового ассистента

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

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

С чего начать?

Начнем с подбора нужных нам библиотек. Ниже я покажу и расскажу для чего они необходимы.

Распознавание речи

Нам понадобится speech_recognition. Данная библиотека используется для распознавания речи говорящего.

import speech_recognition 

sr = speech_recognition.Recognizer()
sr.pause_threshold=0.5 # создаем паузу, после которой ассистент примет нашу команду

def listen_comand():
    try:
        with speech_recognition.Microphone() as mic:
            sr.adjust_for_ambient_noise(source=mic, duration=0.5)
            audio = sr.listen(source=mic)
            query = sr.recognize_google(audio_data=audio, language='ru-RU').lower()
        print(query)

    except speech_recognition.UnknownValueError:
        return 'Я не понял что ты сказал'

def main():
    query = listen_comand()

if __name__=='__main__':
    main()

Данный код позволяет проверить, понимает ли нас программа или нет. Итогом работы данного кода будет выведение слов, которые вы сказали. После поверки нам необходимо будет заменить "print" на "return", чтобы добавить работу с командами.

Команды для ассистента

Нам необходимо сделать список слов(команд), на которые будет реагировать наш помощник.

Сделаем мы это так

commands_dict = {
    'commands':{
        'search_for_information_on_google': ['искать', 'гугл', 'найди' ,'найти']
    }
}

позже мы будем его дополнять. Но нужно не забыть про изменения в коде. В функцию "main" добавим пару строчек, которые позволят взаимодействовать с командами.

 def main():
    query = listen_comand()

    for k, v in commands_dict['commands'].items():
        if query in v:
            print(globals()[k]())

Поиск в Google

Я решил сразу показать вам , как сделать так, чтобы голосовой ассистент мог искать в браузере то,что вам необходимо. Для начала нам нужно будет импортировать модуль - webbrowser. Он поможет нам для работы с браузером. Создаем новую функцию, которую назовем "search_for_information_on_google".

def search_for_information_on_google():
    print('что надо найти?')
    try:
        with speech_recognition.Microphone() as mic:
            sr.adjust_for_ambient_noise(source=mic, duration=0.5)
            audio = sr.listen(source=mic)
            search_term = sr.recognize_google(audio_data=audio, language='ru-RU').lower()

    except speech_recognition.UnknownValueError:
        return 'Я не понял что ты сказал'

    url = f"https://www.google.com/search?q={search_term}"
    browser.open(url)

    return 'Открываю'

Если на вашем компьютере много браузеров, то у вас может открываться браузер, которым вы не пользуетесь. Для исправления данной проблемы нужно написать всего одну строчку кода. Вы можете выбрать любой браузер, просто надо указать путь до него.

browser = webbrowser.get('C:/Program Files/Mozilla Firefox/firefox.exe %s')

Поиск видео в YouTube

Делается это все как и с поиском в гугле, просто нужно заменить пару строк. Во-первых, заменить название функции ,например "search_for_video_on_youtube()". Заменить url.

url = f"https://www.youtube.com/results?search_query={search_term}"

А в список команд добавить новые слова.

commands_dict = {
    'commands':{
        'search_for_information_on_google': ['искать', 'гугл', 'найди' ,'найти'],
        'search_for_video_on_youtube': ["video", "youtube", "watch", "видео" ,'ютуб']
    }
}

Вот наш ассистент уже умеет искать то,что нам надо.

Что можно добавить еще?

Добавить вы можете что хотите. Я вам покажу как добавить время, погоду и открытые программ с компьютера.

Чтобы наш помощник мог говорить нам погоду, время необходимо добавить библиотеку pyowm и модуль datetime.

from pyowm import OWM

Далее сделаем так, чтобы он выдавал нам погоду и время из нашего города.

def weather():
    owm = OWM('78fc9cb466b4aa6945d253a266eec9b5')
    manager = owm.weather_manager()
    place = manager.weather_at_place("Moscow ,RU")
    res = place.weather
    value = int(res.temperature('celsius')['temp'])

    return f'In Moscow {value}'

def clock():
    time_checker = datetime.datetime.now().strftime("%H:%M")
    return f'Now {time_checker}'

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

import os

Покажу вам пример открытия Paint. Не забываем добавиь в список команд слова, которые будут отправлять нас к функции.

def open_paint():
    os.startfile(r'C:\Windows\System32\mspaint.exe')
    return 'open paint'

Доработка

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

Для озвучки вам нужно добавить библиотеку "pyttsx3"

import pyttsx3

engine = pyttsx3.init()
engine.say('любой текст')
engine.runAndWait()

Если хотите, вы можете настроить скорость, пол диктора и язык.

Для бесконечного цикла изменим "main".

def main():
    while True:
            query = listen_comand()

            for k, v in commands_dict['commands'].items():
                if query in v:
                    print(globals()[k]())

Чтобы мы могли его отключить командой в команды добавим нужные слова и создадим функцию.

def bye_albertich():
    engine.say('bye, see yoa soon')
    print('bye, see you soon')
    engine.runAndWait()

    engine.stop()
    quit()

Финал

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

Источник: https://habr.com/ru/articles/749774/


Интересные статьи

Интересные статьи

Изображение взято из https://www.niio.com/blog/what-is-ai-art-chatgpt/TL;DR1. Заводим аккаунт OpenAI;2. Качаем Autoresponder for TG, например, для Телеграма;3. Создаем правило для всех сообщений с мас...
Когда на вопрос «Что за фича?»‎ сказали: «Посмотри в Confluence!»‎ Привет! Меня зовут Таня Дудо, я менеджер продуктовых знаний в Selectel. В тексте расскажу, как решили создать внутреннюю базу з...
В идее распределенных вычислительных систем нет ничего нового. Идея реализована уже давно, плюс примеров таких реализаций множество, включая SETI, Folding@Home и другие. Идея в том, что специальное ...
Выбор правильной архитектуры для вашего веб-продукта — это важнейший вопрос, который необходимо решить, продумывая его разработку. Прежде всего, он должен быть масштабиру...
Проведение испытаний и оценка качества работы радиоустройств — то ещё веселье. Для таких лабораторных исследований порой требуется специфическое оснащение, которое стоит больших денег. В том числ...