[Python, Голосовые интерфейсы] Голосовой ассистент Виталий (школьный проект)
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Предостережение Данный пост создан исключительно для получения отзывов у специалистов, поэтому смело минусуйте его, дабы не засорять ленту школьными проектами.Также не советую использовать пост как гайд, так как я сам учусь и собираю отзывы и советы от знающих людей.Введение Меня зовут Глеб (8 кл) и я задался целью сделать хорошую открывалку/закрывалку и немного говорилку для windows, вообщем голосового ассистента на python.На момент написания поста ассистент имеет версию alfa 4.0 и Не позиционирует себя как серьезный продукт или не дай бог конкурента Алисе или Siri. Для ассистента был по-быстрому накидан сайт, где можно скачать exe или исходник на питоне, который вероятно вам и интересен. Гитхаб тоже в наличии.КОД Так как я уже прикреплял гитхаб, предлагаю с акцентировать внимание на интересных, спорных или непонятных для меня моментах.РАСПОЗНАВАНИЕ РЕЧИДля работы разпозновалки я выбрал speech recognition и в итоге был реализован такой код(сборная солянка из видеоуроков):
import speech_recognition as sr
#кортеж с предлжениями, каждую итерацию цикла ассистент дает рандомное предложение (Скажите что-нибудь например "открой браузер")
recomend = ("Открой браузер", "Найди в интернете стихи А. Пушкина.", "Как дела?", "Что ты умеешь?", "Запомни код от домофона 495 544.", "Найди на ютубе котиков.")
#распознование (и не просите, в функцию не добавлю так, как оно все-равно нужно только раз за итерацию цикла)
rec1 = len(recomend) - 1
rec2 = recomend[random.randint(0, rec1)]
print('-------------------')
r = sr.Recognizer()
with sr.Microphone() as source:
print("Скажите что нибудь, например:", rec2)
r.pause_threshold = 1
#r.adjust_for_ambient_noise(source, duration=1)
audio = r.listen(source)
try:
#разпознаное сохраняется в переменную an (answer)
an = r.recognize_google(audio, language="ru-RU").lower()
print("Вы сказали: " + an)
except sr.UnknownValueError:
t = "Я вас не слышу, говорите громче!"
print("Сбой системы распознования речи. ")
Очень прошу в комментарии покидать более качественные аналоги speech recognition.СИНТЕЗ РЕЧИДля синтеза речи я выбрал голос vokolizer, а также библиотеку pyttsx3. В коде это выглядит так:
import pyttsx3
#Настройка голоса, индекс голоса читаем из файла.
f = open("tts.txt", "r")
tts1 = int(f.read(1))
f.close()
text = ""
tts = pyttsx3.init()
speak_engine = pyttsx3.init()
voices = speak_engine.getProperty('voices')
speak_engine.setProperty('voice', voices[tts1].id)
#функция синтезы речи
def run():
tts.say(t)
tts.runAndWait()
print("Виталий:", t)
#пример запроса
t = "Привет мир"
run()
ПОДБОР ФРАЗ ДЛЯ КРАСИВОГО SMALLTALKТут я решил сделать возможность быстрого изменения фраз, поэтому сделал такой алгоритм:
import os
#читаем файл smalltalk и делаем 2 списка: 1 - с ключевыми словами, 2 - с ответами ассистента
f = open("smalltalk.txt", "r", encoding="utf-8")
smalltalkdialog = f.read()
asksmalltalk = smalltalkdialog[len("вопросы: "):smalltalkdialog.find(" | [конецстроки1]")].split(" | ")
answersmalltalk = smalltalkdialog[smalltalkdialog.find("ответы: ") + len("ответы: "):smalltalkdialog.find(" | [конецстроки2]")].split(" | ")
#подбор нужной фразы
for word in range(len(asksmalltalk)):
if asksmalltalk[word] in an:
t = answersmalltalk[word]
run()
break
Тут тоже нужен ваш совет: подскажите пожалуйста более эфективный способ искать фразы.К Dialog Flove у меня неприязнь. Личная.ОТКРЫТИЕ ПРОГРАММ, САЙТОВ И ПОИСК В ИНТЕРНЕТЕ
import webbrowser
#переменная error сообщает о том, нашла-ли программа ответ на фразу пользователя, если да, то error = 0
while условный True:
#поиск
elif "найди" in an:
error = 0
if "в интернете" in an:
t = "Начинаю поиск в интернете" + an[an.find("ете")+3:]
run()
sear = an[an.find("ете")+3:]
webbrowser.open("https://www.google.com/search?q=" + sear)
elif "youtube" in an:
sear = an[an.find("be")+2:]
t = "Начинаю поиск в ютубе " + sear
run()
webbrowser.open("https://www.youtube.com/results?search_query=" + sear)
else:
t = "Вы дали мало данных, скажите найди в интернете, либо найди в ютубе и ваш вопрос."
run()
continue
#функция на закрытие Тут мы берем 2 кортежа, в кортеже "listprogram" у нас ключевые слова, а в "listprogram2" команды.
elif "закрой" in an:
listprogram = ("steam", "skype", "браузер")
listprogram2 = ("TASKKILL /IM steam.exe", "TASKKILL /IM skype.exe", "TASKKILL /IM chrome.exe")
for net in range(len(listprogram)):
if listprogram[net] in an:
program = listprogram2[net]
os.system(program)
os.system('cls' if os.name == 'nt' else 'clear')
t = "Закрываю " + listprogram[net]
run()
error = 0
continue
#синтезатор речи
elif "текст" in an:
error = 0
t = "Вставьте сюда текст, который надо синтезировать. в конце текста напишите команду стопсинтез"
run()
t = ""
while True:
t = t + " " + str(input("Вставьте сюда текст > "))
if "стопсинтез" in t:
break
t = t[:t.find("стопсинтез")]
run()
#интернет Тут мы берем 2 кортежа, в кортеже "fordefweb" у нас ключевые слова, а в "fordefweb" ссылки.
fordefweb = ("youtube", "вконтакте", "браузер", "google", "новости", "окко", "хабр", "facebook", "wifmedia", "свой сайт")
fordefweb2 = ("https://www.youtube.com/", "https:/vk.com", "https://www.google.ru/", "https://www.google.ru/", "https://lenta.ru/", "https://okko.tv/", "https://habr.com/ru/feed/", "https://www.facebook.com/", "https://wifmedia.com/", "http://vitaliy.renderforestsites.com")
for net in range(len(fordefweb)):
if fordefweb[net] in an:
web = fordefweb2[net]
runweb()
error = 0
#программы Тут мы берем 2 кортежа, в кортеже "listprogram" у нас ключевые слова, а в "listprogram2" команды.
listprogram = ("проводник", "skype")
listprogram2 = ("explorer.exe", "start skype.exe")
for net in range(len(listprogram)):
if listprogram[net] in an:
program = listprogram2[net]
os.system(program)
t = "Открываю " + listprogram[net]
run()
error = 0
Опять-же не могу найти ничего действенее elif, но в этой версии и хотя-бы меньше.ОСТАЛЬНОЕНапоследок хочу похвастаться возможностью ассистента запоминать имя пользователя и хранить заметки, эти функции можно найти в полном коде проекта на гитхаб.Материаллы САЙТ (просто дешевая одностраничка на renderforest)ГИТХАБдемонстрационный ролик
===========
Источник:
habr.com
===========
Похожие новости:
- [Open source, Программирование, Геоинформационные сервисы, Визуализация данных, Научно-популярное] Google Earth Engine (GEE) как общедоступный каталог больших геоданных
- [Python, Машинное обучение, Искусственный интеллект, Natural Language Processing] LIT – Инспектор для вашего NLP. Обзор, установка, тест
- [Python, Программирование, Игры и игровые приставки] Создание арт-объектов, игр и много чего ещё с использованием числа Пи и Python (перевод)
- [Open source, Виртуализация, Разработка под Linux, Разработка на Raspberry Pi] Шпаргалка по Linux grep, домашний термостат на Raspberry Pi, эл. книга «Ansible for DevOps» и PostgreSQL на Linux
- [Python, Обработка изображений, Машинное обучение] И снова про капчу
- [Программирование, Анализ и проектирование систем, Проектирование и рефакторинг, Микросервисы] Разложение монолита: Декомпозиция БД (часть 1)
- [Python] Логирование в телеграм, или история о том, как я сделал питон библиотеку
- [Python, Прототипирование, Интернет-маркетинг, Natural Language Processing] Как сделать интеллектуального чат-бота для проведения опросов/интервью
- [Python, Учебный процесс в IT, Карьера в IT-индустрии] Джуном? в 40-к лет? Ещё и на удаленку? Да ну, не выдумывайте…
- [Программирование, IT-инфраструктура, Серверная оптимизация, Лайфхаки для гиков] Уход от проблемы TTL или Стратегии корректного и быстрого кэширования (перевод)
Теги для поиска: #_python, #_golosovye_interfejsy (Голосовые интерфейсы), #_proekt (Проект), #_vitalij (Виталий), #_pomoschnik (Помощник), #_assistent (Ассистент), #_shkolnyj_proekt (школьный проект), #_python, #_golosovye_interfejsy (
Голосовые интерфейсы
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 14:21
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Предостережение Данный пост создан исключительно для получения отзывов у специалистов, поэтому смело минусуйте его, дабы не засорять ленту школьными проектами.Также не советую использовать пост как гайд, так как я сам учусь и собираю отзывы и советы от знающих людей.Введение Меня зовут Глеб (8 кл) и я задался целью сделать хорошую открывалку/закрывалку и немного говорилку для windows, вообщем голосового ассистента на python.На момент написания поста ассистент имеет версию alfa 4.0 и Не позиционирует себя как серьезный продукт или не дай бог конкурента Алисе или Siri. Для ассистента был по-быстрому накидан сайт, где можно скачать exe или исходник на питоне, который вероятно вам и интересен. Гитхаб тоже в наличии.КОД Так как я уже прикреплял гитхаб, предлагаю с акцентировать внимание на интересных, спорных или непонятных для меня моментах.РАСПОЗНАВАНИЕ РЕЧИДля работы разпозновалки я выбрал speech recognition и в итоге был реализован такой код(сборная солянка из видеоуроков): import speech_recognition as sr
#кортеж с предлжениями, каждую итерацию цикла ассистент дает рандомное предложение (Скажите что-нибудь например "открой браузер") recomend = ("Открой браузер", "Найди в интернете стихи А. Пушкина.", "Как дела?", "Что ты умеешь?", "Запомни код от домофона 495 544.", "Найди на ютубе котиков.") #распознование (и не просите, в функцию не добавлю так, как оно все-равно нужно только раз за итерацию цикла) rec1 = len(recomend) - 1 rec2 = recomend[random.randint(0, rec1)] print('-------------------') r = sr.Recognizer() with sr.Microphone() as source: print("Скажите что нибудь, например:", rec2) r.pause_threshold = 1 #r.adjust_for_ambient_noise(source, duration=1) audio = r.listen(source) try: #разпознаное сохраняется в переменную an (answer) an = r.recognize_google(audio, language="ru-RU").lower() print("Вы сказали: " + an) except sr.UnknownValueError: t = "Я вас не слышу, говорите громче!" print("Сбой системы распознования речи. ") import pyttsx3
#Настройка голоса, индекс голоса читаем из файла. f = open("tts.txt", "r") tts1 = int(f.read(1)) f.close() text = "" tts = pyttsx3.init() speak_engine = pyttsx3.init() voices = speak_engine.getProperty('voices') speak_engine.setProperty('voice', voices[tts1].id) #функция синтезы речи def run(): tts.say(t) tts.runAndWait() print("Виталий:", t) #пример запроса t = "Привет мир" run() import os
#читаем файл smalltalk и делаем 2 списка: 1 - с ключевыми словами, 2 - с ответами ассистента f = open("smalltalk.txt", "r", encoding="utf-8") smalltalkdialog = f.read() asksmalltalk = smalltalkdialog[len("вопросы: "):smalltalkdialog.find(" | [конецстроки1]")].split(" | ") answersmalltalk = smalltalkdialog[smalltalkdialog.find("ответы: ") + len("ответы: "):smalltalkdialog.find(" | [конецстроки2]")].split(" | ") #подбор нужной фразы for word in range(len(asksmalltalk)): if asksmalltalk[word] in an: t = answersmalltalk[word] run() break import webbrowser
#переменная error сообщает о том, нашла-ли программа ответ на фразу пользователя, если да, то error = 0 while условный True: #поиск elif "найди" in an: error = 0 if "в интернете" in an: t = "Начинаю поиск в интернете" + an[an.find("ете")+3:] run() sear = an[an.find("ете")+3:] webbrowser.open("https://www.google.com/search?q=" + sear) elif "youtube" in an: sear = an[an.find("be")+2:] t = "Начинаю поиск в ютубе " + sear run() webbrowser.open("https://www.youtube.com/results?search_query=" + sear) else: t = "Вы дали мало данных, скажите найди в интернете, либо найди в ютубе и ваш вопрос." run() continue #функция на закрытие Тут мы берем 2 кортежа, в кортеже "listprogram" у нас ключевые слова, а в "listprogram2" команды. elif "закрой" in an: listprogram = ("steam", "skype", "браузер") listprogram2 = ("TASKKILL /IM steam.exe", "TASKKILL /IM skype.exe", "TASKKILL /IM chrome.exe") for net in range(len(listprogram)): if listprogram[net] in an: program = listprogram2[net] os.system(program) os.system('cls' if os.name == 'nt' else 'clear') t = "Закрываю " + listprogram[net] run() error = 0 continue #синтезатор речи elif "текст" in an: error = 0 t = "Вставьте сюда текст, который надо синтезировать. в конце текста напишите команду стопсинтез" run() t = "" while True: t = t + " " + str(input("Вставьте сюда текст > ")) if "стопсинтез" in t: break t = t[:t.find("стопсинтез")] run() #интернет Тут мы берем 2 кортежа, в кортеже "fordefweb" у нас ключевые слова, а в "fordefweb" ссылки. fordefweb = ("youtube", "вконтакте", "браузер", "google", "новости", "окко", "хабр", "facebook", "wifmedia", "свой сайт") fordefweb2 = ("https://www.youtube.com/", "https:/vk.com", "https://www.google.ru/", "https://www.google.ru/", "https://lenta.ru/", "https://okko.tv/", "https://habr.com/ru/feed/", "https://www.facebook.com/", "https://wifmedia.com/", "http://vitaliy.renderforestsites.com") for net in range(len(fordefweb)): if fordefweb[net] in an: web = fordefweb2[net] runweb() error = 0 #программы Тут мы берем 2 кортежа, в кортеже "listprogram" у нас ключевые слова, а в "listprogram2" команды. listprogram = ("проводник", "skype") listprogram2 = ("explorer.exe", "start skype.exe") for net in range(len(listprogram)): if listprogram[net] in an: program = listprogram2[net] os.system(program) t = "Открываю " + listprogram[net] run() error = 0 =========== Источник: habr.com =========== Похожие новости:
Голосовые интерфейсы ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 14:21
Часовой пояс: UTC + 5