Начало работы с голосовыми помощниками в Windows
В этом руководстве описано, как начать разработку голосовых помощник в Windows.
Настройка среды разработки
Чтобы начать разработку голосовой помощник для Windows, необходимо убедиться, что у вас есть соответствующая среда разработки.
- Visual Studio: необходимо установить Microsoft Visual Studio 2017, Community Edition или более поздней версии.
- Версия Windows. Компьютер с быстрой кольцевой сборкой Windows Insider и версией Windows SDK для Windows Insider. Этот пример кода проверяется как работа с сборкой 19025.vb_release_analog.191112-1600 предварительного выпуска Windows с помощью пакета SDK для Windows 19018. Любая сборка или пакет SDK более поздних версий, чем указано, должны быть совместимыми.
- Средства разработки UWP. Рабочая нагрузка на универсальной платформе Windows в Visual Studio. Описание подготовки компьютера к разработке приложений UWP, см. на странице Настройки UWP.
- Рабочий микрофон и аудиовыход
Получение ресурсов от корпорации Майкрософт
Для некоторых ресурсов, необходимых для настраиваемого голосового агента в Windows, требуются ресурсы корпорации Майкрософт. Пример голосового помощника UWP содержит образцы версий этих ресурсов для первоначальной разработки и тестирования, поэтому этот раздел не потребуется для первоначальной разработки.
- Модель ключевых слов. Для активации голоса требуется модель ключевых слов Майкрософт в формате файла BIN. Для файла BIN, указанного в примере голосового помощника UWP, было проведено обучение по ключевому слову contoso.
- Маркер функции ограниченного доступа: так как API ConversationalAgent предоставляют доступ к микрофону аудио, они защищены в соответствии с ограничениями функции ограниченного доступа. Чтобы использовать функцию ограниченного доступа, необходимо получить маркер компонента ограниченного доступа, подключенный к удостоверению пакета приложения от Корпорации Майкрософт.
Создание службы диалоговых окон
Для полного взаимодействия с голосовой помощник приложение нуждается в службе диалоговых окон, которая
- определяет ключевые слова в заданном звуковом файле;
- прослушивает данные пользователя и преобразовывать их в текст;
- отправляет текст в бот;
- преобразует текст, выдаваемый ботом в звуковые выходные данные.
Ниже приведены требования к созданию базовой службы диалоговых окон с помощью функции «Речь direct Line».
- Ресурс речи: ресурс Azure для функций службы «Речь», таких как речь в тексте и тексте. Создайте ресурс службы «Речь» на портале Azure. Дополнительные сведения см. в статье «Создание нового ресурса служб ИИ Azure».
- Бот Bot Framework: бот, созданный с помощью Bot Framework версии 4.2 или выше, подписан на Direct Line Speech , чтобы включить входные и выходные данные голосовой связи. В этом руководстве содержатся пошаговые инструкции по созданию «Эхо-бота» и оформлению подписки на канал Direct Line Speech. Вы также можете перейти к этой статье Bot Framework, чтобы узнать, как создать настраиваемого бота. Затем выполните те же действия , чтобы подписать его на Direct Line Speech, но с новым ботом, а не с «эхо-ботом».
Попробуйте пример приложения
С помощью ключа ресурса службы «Речь» и идентификатора бота эхо бота вы можете попробовать пример голосового помощника UWP. Следуйте инструкциям в файле сведений, чтобы запустить приложение и ввести учетные данные.
Создание собственного голосового помощника для Windows
Получив маркер компонента ограниченного доступа и файл bin от Майкрософт, вы можете начать работу с собственными голосовыми помощник в Windows.
Создание голосового ассистента на Python, часть 1
Добрый день. Наверное, все смотрели фильмы про железного человека и хотели себе голосового помощника, похожего на Джарвиса. В этом посте я расскажу, как сделать такого ассистента с нуля. Моя программа будет написана на python 3 в операционной системе windows. Итак, поехали!
Работать наш ассистент будет по такому принципу:
- Постоянно «слушать» микрофон
- Распознавать слова в google
- Выполнять команду, либо отвечать
Для начала мы установим в систему windows русские голоса. Для этого переходим по ссылке и скачиваем голоса в разделе SAPI 5 -> Russian. Там есть 4 голоса, можно выбрать любой, какой вам понравится. Устанавливаем и идём дальше.
Нам нужно поставить библиотеку pyttsx3 для синтеза речи:
pip install pyttsx3
Затем можно запустить тестовую программу и проверить правильность её выполнения.
import pyttsx3 text = 'какой-нибудь текст' tts = pyttsx3.init() rate = tts.getProperty('rate') #Скорость произношения tts.setProperty('rate', rate-40) volume = tts.getProperty('volume') #Громкость голоса tts.setProperty('volume', volume+0.9) voices = tts.getProperty('voices') # Задать голос по умолчанию tts.setProperty('voice', 'ru') # Попробовать установить предпочтительный голос for voice in voices: if voice.name == 'Anna': tts.setProperty('voice', voice.id) tts.say(text) tts.runAndWait()
2) Распознавание речи
Существует много инструментов для распознавания речи, но они все платные. Поэтому я пытался найти бесплатное решение для моего проекта и нашёл её! Это библиотека speech_recognition.
pip install SpeechRecognition
Также для работы с микрофоном нам необходима библиотека PyAudio.
pip install PyAudio
У некоторых людей возникает проблема с установкой PyAudio, поэтому следует перейти по этой ссылке и скачать нужную вам версию PyAudio. Затем ввести в консоль:
pip instal название скачанного файла
Затем запускаете тестовую программу. Но перед этим вы должны исправить в ней device_index=1 на своё значение индекса микрофона. Узнать индекс микрофона можно с помощью этой программы:
import speech_recognition as sr for index, name in enumerate(sr.Microphone.list_microphone_names()): print("Microphone with name \"\" found for `Microphone(device_index=)`".format(index, name))
Тест распознавания речи:
import speech_recognition as sr def record_volume(): r = sr.Recognizer() with sr.Microphone(device_index = 1) as source: print('Настраиваюсь.') r.adjust_for_ambient_noise(source, duration=0.5) #настройка посторонних шумов print('Слушаю. ') audio = r.listen(source) print('Услышала.') try: query = r.recognize_google(audio, language = 'ru-RU') text = query.lower() print(f'Вы сказали: ') except: print('Error') while True: record_volume()
Если всё отлично, переходим дальше.
Если вы хотите, чтобы ассистент просто общался с вами (без ИИ), то это можно сделать с помощью бесплатного инструмента DialogFlow от Google. После того, как вы залогинетесь, вы увидите экран, где уже можно создать своего первого бота. Нажмите Create agent. Придумайте боту имя (Agent name), выберете язык (Default Language) и нажмите Create. Бот создан!
Чтобы добавить новые варианты ответов на разные вопросы, нужно создать новый intent. Для этого в разделе intents нажмите Create intent. Заполните поля «Название» и Training phrases, а затем ответы. Нажмите Save. Вот и всё.
Чтобы управлять ботом на python, нужно написать такой код. В моей программе бот озвучивает все ответы.
import apiai, json, re import pyttsx3 import speech_recognition as sr tts = pyttsx3.init() rate = tts.getProperty('rate') tts.setProperty('rate', rate-40) volume = tts.getProperty('volume') tts.setProperty('volume', volume+0.9) voices = tts.getProperty('voices') tts.setProperty('voice', 'ru') for voice in voices: if voice.name == 'Anna': tts.setProperty('voice', voice.id) def record_volume(): r = sr.Recognizer() with sr.Microphone(device_index = 1) as source: print('Настраиваюсь.') r.adjust_for_ambient_noise(source, duration=1) print('Слушаю. ') audio = r.listen(source) print('Услышала.') try: query = r.recognize_google(audio, language = 'ru-RU') text = query.lower() print(f'Вы сказали: ') textMessage( text ) except: print('Ошибка распознавания.') def talk( text ): tts.say( text ) tts.runAndWait() def textMessage( text ): request = apiai.ApiAI('ваш токен').text_request() # Токен API к Dialogflow request.lang = 'ru' # На каком языке будет послан запрос request.session_id = 'ваш id' # ID Сессии диалога (нужно, чтобы потом учить бота) request.query = text # Посылаем запрос к ИИ с сообщением от юзера responseJson = json.loads(request.getresponse().read().decode('utf-8')) response = responseJson['result']['fulfillment']['speech'] # Разбираем JSON и вытаскиваем ответ # Если есть ответ от бота - присылаем пользователю, если нет - бот его не понял if response: request.audio_output = response talk(response) else: talk('Простите. Я Вас не совсем поняла.') while True: record_volume()
На сегодня всё. В следующей части я расскажу как сделать умного бота, т.е. чтобы он мог не только отвечать, но и что-либо делать.
- голосовой ассистент
- голосовой помощник
- python
- Python
- Программирование
- Разработка под Windows
Python: как создать простейшего голосового помощника?
Для создания голосового помощника не нужно обладать большими знаниями в программировании, главное понимать каким функционалом он должен владеть. Многие компании создают их на первой линии связи с клиентом для удобства, оптимизации рабочих процессов и наилучшей классификации звонков.
В данной статье представлена программа, которая может стать основой для Вашего собственного чат-бота, а если точнее – голосового помощника для распознавания голоса и последующего выполнения команд. С ее помощью мы сможем понять принцип работы наиболее часто встречаемых голосовых помощников.
Для начала объявим необходимые нам библиотеки:
#Необходимые библиотеки import speech_recognition as sr import os import sys import webbrowser import pyttsx3 as p from datetime import datetime import time import datetime import random
Также не забудем вести лог файл, который понадобится нам, если же мы все-таки решим улучшить бота для работы с нейронной сетью. Многие компании использую нейронную сеть в своих голосовых помощниках для понимания эмоций клиента и соответствующего реагирования на них. Также стоит не забывать, что с помощью анализа логов, мы сможем понять слабые места алгоритма бота и улучшить взаимодействие с клиентами.
#Создаем лог chat_log = [[‘SESSION_ID’, ‘DATE’, ‘AUTHOR’, ‘TEXT’, ‘AUDIO_NUM’]] #Узнаем номер сессии i = 1 exit = 0 while exit == 0: session_id = str(i) if session_id not in os.listdir(): os.mkdir(session_id) exit = 1 else: i = i + 1 #Первое сообщение пишет bot author = ‘Bot’ text = ‘Привет! Чем я могу вам помочь?’
В лог файл мы записываем время сообщения, автора (бот или пользователь) и собственно сам сказанный текст.
#Добавляем данные к логу с помощью этой процедуры def log_me(author, text, audio): now = datetime.datetime.now() i = 1 exit = 0 while exit == 0: audio_num = str(i)+’.wav’ if audio_num not in os.listdir(session_id): exit = 1 else: i = i + 1 os.chdir(session_id) with open(audio_num , «wb») as file: file.write(audio.get_wav_data()) chat_log.append([now.strftime(«%Y-%m-%d %H:%M:%S»), author, text, audio_num])
Выводим первое сообщение за авторством бота: Привет! Чем я могу вам помочь?
# Выводим первое сообщение на экран и записываем в лог print(«Bot: «+ text) log_me(author, text, audio)
А с помощью такой процедуры в Jupyter Notebook мы можем озвучить через устройство воспроизведения, настроенное по умолчанию, сказанные слова:
#Произношение words def talk(words): engine.say(words) engine.runAndWait()
Как озвучивать текст мы рассмотрели выше, но как же мы свой голос сможем превратить в текст? Тут нам поможет распознавание речи от Google и некоторые манипуляции с микрофоном.
#Настройка микрофона def command(): rec = sr.Recognizer() with sr.Microphone() as source: #Бот ожидает нашего голоса print(‘Bot: . ‘) #Небольшая задержка в записи rec.pause_threshold = 1 #Удаление фонового шума с записи rec.adjust_for_ambient_noise(source, duration=1) audio = rec.listen(source) try: #Распознание теста с помощью сервиса GOOGLE text = rec.recognize_google(audio, language=»ru-RU»).lower() #Вывод сказанного текста на экран print(‘Вы: ‘ + text[0].upper() + text[1:]) log_me(‘User’, text, audio) #Если не распознался тест из аудио except sr.UnknownValueError: text = ‘Не понимаю. Повторите.’ print(‘Bot: ‘ + text) talk(text) #Начинаем заново слушать text = command() log_me(‘Bot’, text, , Null) return text
Что может сделать наш помощник кроме того, чтобы нас слушать? Все ограничено нашей фантазией! Рассмотрим несколько интересный примеров.
Начнем с простого, пусть при команде открыть сайт – он откроет сайт (не ожидали?).
#Тут расписаны действия, которые будут выполнятся при наличии некоторых словосочетаний def makeSomething(text): if ‘открой сайт’ in text: print(‘Bot: Открываю сайт NewTechAudit.’) talk(‘Открываю сайт NewTechAudit.’) log_me(‘Bot’,’Открываю сайт NewTechAudit.’, Null) webbrowser.open(‘https://newtechaudit.ru/’)
Иногда полезно послушать свои слова, да чужими устами. Пусть бот еще умеет и повторять за нами:
#Повторение фразы пользователя elif ‘произнеси’ in text or ‘скажи’ in text or ‘повтори’ in text: print(‘Bot: ‘ + text[10].upper() + text[11:]) talk(text[10:]) log_me(‘Bot’, text[10].upper() + text[11:] , Null)
Пусть еще и собеседником будет, но начнем мы пока только со знакомства:
#Ответ на вопрос elif ‘своё имя’ in text or ‘как тебя зовут’ in text or ‘назови себя’ in text: print(‘Bot: Меня зовут Bot.’) talk(‘Меня зовут Bot’) log_me(‘Bot’, ‘Меня зовут Bot’, Null)
Мы также можем попросить голосового помощника назвать случайное число в выбранных нами пределах в формате: Назови случайное число от (1ое число) до (2ое число).
#Определение случайного числа elif ‘случайное число’ in text: ot=text.find(‘от’) do=text.find(‘до’) f_num=int(text[ot+3:do-1]) l_num=int(text[do+3:]) r=str(random.randint(f_num, l_num)) print(‘Bot: ‘ + r) talk(r) log_me(‘Bot’, r, Null)
Для того, чтобы завершить программу, достаточно только попрощаться с ботом:
#Завершение программы elif ‘пока’ in text or ‘до свидания’ in text: print(‘Bot: До свидания!’) talk(‘До свидания’) log_me(‘Bot’, ‘Конец сессии’, Null) os.chdir(session_id) log_file = open( session_id + «.txt», «w») for row in chat_log: np.savetxt(log_file, row) log_file.close() sys.exit()
А чтобы все это работало беспрерывно, мы создаем бесконечный цикл.
#Бесконечный цикл для работы while True: makeSomething(command())
Проведем тестовый диалог:
Как создать голосового ассистента
В данной статье я расскажу, как можно сделать простого голосового ассистента. Все это мы будем делать в 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=" 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="
А в список команд добавить новые слова.
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 ' def clock(): time_checker = datetime.datetime.now().strftime("%H:%M") return f'Now '
Если вы хотите добавить в своего ассистента возможность открывать программы на вашем компьютере ,то нам необходимо добавить модуль 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. Надеюсь данная статья будет кому-то полезна. Если хотите, можете писать в комментариях, как улучшить данный код.
- голосовой помощник
- голосовой ассистент
- голосовое управление