Время прочтения: 4 мин.
Думаю, что многие смотрели фильм про эксцентричного изобретателя Тони Старка, и видели, как работает его ИИ Джарвис. Многие хотели создать такого же, чтобы можно было также быстро, с помощью голоса, контролировать собственный компьютер. На данную тематику написано много статей. Все они довольно сложны, в них используется много строк кода, библиотек и совсем непростые алгоритмы.
Но…я попробую создать рабочий прототип голосового ассистента используя буквально 4-5 библиотек и не самый замысловатый скрипт, что позволит, на начальном уровне знания python создать полезного помощника для работы.
Нам понадобятся библиотеки:
- pyAudio
- speech_recognition
- Os
- PyAutogui
- time
Мы скачали библиотеки и импортировали их в код
import %libname%
Теперь давайте определимся, какая самая распространенная манипуляция, которую мы проводим за компьютером. На мой взгляд, открытие приложений.
Честно говоря, когда рабочий стол сильно захламлен, довольно много времени уходит на то, чтобы отыскать нужный ярлык. Или же, когда не хочешь отрываться от задачи, которую выполняешь в данный момент, но тебе резко требуется другое приложение, которое нужно искать, прерывать задачу, выходить из потока, и вообще неудобно, и не хочется. Можно просто сказать компьютеру об этом, и он сам его откроет.
Итак, в основном вся логика будет строится на библиотеке speech_recognition, которая и будет обрабатывать нашу речь. Библиотека Speech_recognition — это своего рода обертка для известных речевых api от гугла,wit’a, Бинга и других it компаний, она даже может работать оффлайн (подробнее про нее можно прочитать тут)
Ну что же, приступим:
import speech_recognition as speech_r
import os
rc = speech_r.Recognizer()
Импортируем библиотеки в код и создадим экземпляр класса recognizer
Было бы неплохо, если бы скрипт работал бесконечно. Что за голосовой ассистент, который нужно постоянно запускать (Используем конструкцию while True).
while True:
with speech_r.Microphone() as voice:
print("Приветствую вас, Сэр. Какие будут указания?")
rc.adjust_for_ambient_noise(voice)
audio = rc.listen(voice)
Собственно, что я здесь делаю.
- Выбираю источник звука(микрофон)
- Приветственная фраза
- Очищаю звук от шумов
- Захватываю звук с микрофона
Хорошо, половина дела сделана, осталось его распознать.
Не выходя из бесконечного цикла, пишем метод для распознавания речи, и отлавливаем исключения. На всякий, а то вдруг Джарвис не услышит:
try:
x = rc.recognize_google(audio, language="ru-RU")
x = x.lower()
Хорошо, сейчас под переменной ‘x’ у нас хранится строчка нашего приказа или просьбы.
И я привел строчку к нижнему регистру, ну так, в целях единообразия.
Так, приказ есть — пол дела сделано. Осталось описать, что этот приказ означает.
Система будет воспринимать нашу речь и путем сравнения понимать, что ей нужно делать.
В нашем случае какое именно приложение открыть, но не ограничивайтесь этим, вы можете заставить его делать не только это.
Собственно, заведем небольшой словарик, в котором будут описаны необходимые нам приложения. Его можно вставить перед объявлением экземпляра класса.
loc_dict = {'оперу':r'C:\Users\User\AppData\Local\Programs\Opera\launcher.exe',
'блокнот': r'C:\WINDOWS\system32\notepad.exe',
'калькулятор':'C:\Windows\System32\calc.exe'
}
Дальше нам остается сделать простой сравнительный алгоритм.
Если в строку, которая хранится в переменной x входит ключ, то выполни значение ключа:
for i in loc_dict:
if x.find(i) >= 0:
os.startfile(loc_dict[i])
Ну и отлавливаем исключения:
except speech_r.UnknownValueError:
print("Я вас не расслышал, повторите пожалуйста приказ")
except speech_r.RequestError as e:
print ("Ошибка сервиса; {0}". Format (e))
Так же, в принципе, можно разнообразить нашего голосового помощника некоторыми полезными функциями для более удобной работы, здесь нам поможет библиотека pyautogui.
Допустим переключение вкладки(alt + tab)
def alt_tab():
pyautogui.keyDown('alt')
time.sleep(.2)
pyautogui.press('tab')
time.sleep(.2)
pyautogui.keyUp('alt')
Или вызов диспетчера задач:
def disp_():
pyautogui.hotkey('ctrl', 'shift', 'esc')
Функция создания скриншота будет довольно полезной:
pyautogui.screenshot('my_screenshot.png')
Идентичным способом вплетаем проверку на эти фразы в код. Общий код выходит таким:
import speech_recognition as speech_r
import os
import pyautogui
import time
rc = speech_r.Recognizer()
def alt_tab():
pyautogui.keyDown('alt')
time.sleep(.2)
pyautogui.press('tab')
time.sleep(.2)
pyautogui.keyUp('alt')
def disp_():
pyautogui.hotkey('ctrl', 'shift', 'esc')
loc_dict = {'оперу':r'C:\Users\User\AppData\Local\Programs\Opera\launcher.exe',
'блокнот': r'C:\WINDOWS\system32\notepad.exe',
'калькулятор':'C:\Windows\System32\calc.exe',
}
while True:
with speech_r.Microphone() as voice:
print("Какие будут пожелания, Сэр?")
rc.adjust_for_ambient_noise(voice)
audio = rc.listen(voice)
try:
x = rc.recognize_google(audio, language="ru-RU")
x = x.lower()
print(x)
for i in loc_dict:
if x.find(i) >= 0:
os.startfile(loc_dict[i])
if x.find('следующий') >= 0:
alt_tab()
elif x.find('скриншот') >= 0:
pyautogui.screenshot('my_screenshot.png')
elif x.find('диспетчер') >= 0:
disp_()
else:
continue
except speech_r.UnknownValueError:
print("Я вас не расслышал,Сэр. Повторите пожалуйста запрос")
except speech_r.RequestError as e:
print("Ошибка сервиса; {0}".format(e))
Таким образом, всего за пару десятков строк кода, у нас получился довольно полезный, но безмолвный голосовой помощник, который облегчит жизнь, и сделает работу за компьютером чуточку удобнее. Его можно применять, как в собственных целях, так и при помощи людям, для которых коммуникации с ПК затруднены.